Bug 1640916 [wpt PR 23772] - [css-grid] Consider 'auto' height items for grid area estimation, a=testonly

Automatic update from web-platform-tests
[css-grid] Consider 'auto' height items for grid area estimation

We perform a pre-layout, based on a estimation of the grid area, of the
grid items in two different situations: orthogonal and baseline aligned
items.

In the case of baseline aligned items, we were doing this pre-layout
only in the case of items with relative inline and block sizes. However,
items with 'auto' block-size also depend on this estimated grid area
size to properly compute the baseline offset.

It was discarded in the past due to performance concerns, since the
'auto' height is a very common case. However, this codepath is only
executed for baseline aligned items. Since we already applied several
optimization to the baseline alignment logic, I think we can try this
approach to solve the bug and evaluate potential perf regressions when
they appear.

Bug: 1086132
Change-Id: I73c39e6c3ad6cd74aa50fe33106e25cd63b7625f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2215054
Reviewed-by: Manuel Rego <rego@igalia.com>
Reviewed-by: Oriol Brufau <obrufau@igalia.com>
Commit-Queue: Javier Fernandez <jfernandez@igalia.com>
Cr-Commit-Position: refs/heads/master@{#774139}

--

wpt-commits: b4205f9f8b440e56da7fb2bd6cc26643296b02e1
wpt-pr: 23772

Differential Revision: https://phabricator.services.mozilla.com/D78782
This commit is contained in:
Javier Fernandez 2020-06-09 10:25:19 +00:00
Родитель 9cdee8aa3a
Коммит 13890f4edc
2 изменённых файлов: 106 добавлений и 0 удалений

Просмотреть файл

@ -0,0 +1,51 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Grid Layout Test: Self-Baseline alignment along column-axis on fixed sized grids and synthesized baselines</title>
<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
<link rel="help" href="https://drafts.csswg.org/css-grid-1/#alignment">
<link rel="help" href="https://drafts.csswg.org/css-grid-1/#column-align">
<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-align-items">
<link rel="help" href="https://drafts.csswg.org/css-align-3/#baseline-alignment">
<link rel="help" href="https://drafts.csswg.org/css-align-3/#valdef-justify-self-baseline">
<link rel="help" href="https://drafts.csswg.org/css-align/#synthesize-baseline">
<link rel="stylesheet" href="/css/support/grid.css">
<link rel="stylesheet" href="../../support/alignment.css">
<meta name="assert" content="Grid items orthogonal to the Baseline Alignment Context should use their border-box 'under' edge as synthesized baseline.">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
body { overflow: scroll; }
.container { position: relative; }
.grid {
position: relative;
grid-template-rows: 150px;
text-orientation: sideways;
font: 20px/1 Ahem;
}
.width100 { width: 100px; }
.width200 { width: 200px; }
.width300 { width: 300px; }
.bigFont { font-size: 50px; }
</style>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/check-layout-th.js"></script>
<script type="text/javascript">
setup({ explicit_done: true });
</script>
<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })">
<pre>verticalLR grid and parallel items</pre>
<div class="grid width100 alignItemsBaseline">
<div class="firstRowFirstColumn verticalLR" data-offset-x="0" data-offset-y="0" data-expected-width="35" data-expected-height="120">É É ÉÉ</div>
<div class="firstRowSecondColumn verticalLR bigFont" data-offset-x="35" data-offset-y="70" data-expected-width="65" data-expected-height="50">É</div>
</div>
<pre>verticalRL grid and parallel items</pre>
<div class="grid width100 alignItemsBaseline">
<div class="firstRowFirstColumn verticalRL" data-offset-x="0" data-offset-y="0" data-expected-width="35" data-expected-height="120">É É ÉÉ</div>
<div class="firstRowSecondColumn verticalRL bigFont" data-offset-x="35" data-offset-y="70" data-expected-width="65" data-expected-height="50">É</div>
</div>
</body>

Просмотреть файл

@ -0,0 +1,55 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Grid Layout Test: Self-Baseline alignment along row-axis on content-sized grids and synthesized baselines</title>
<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
<link rel="help" href="https://drafts.csswg.org/css-grid-1/#alignment">
<link rel="help" href="https://drafts.csswg.org/css-grid-1/#row-align">
<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-justify-items">
<link rel="help" href="https://drafts.csswg.org/css-align-3/#baseline-alignment">
<link rel="help" href="https://drafts.csswg.org/css-align-3/#valdef-justify-self-baseline">
<link rel="help" href="https://drafts.csswg.org/css-align/#synthesize-baseline">
<link rel="stylesheet" href="/css/support/grid.css">
<link rel="stylesheet" href="../../support/alignment.css">
<meta name="assert" content="Grid items orthogonal to the Baseline Alignment Context should use their border-box 'under' edge as synthesized baseline.">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
body { overflow: scroll; }
.container { position: relative; }
.grid {
position: relative;
grid-template-columns: 150px;
text-orientation: sideways;
font: 20px/1 Ahem;
}
.width100 { width: 100px; }
.width200 { width: 200px; }
.width300 { width: 300px; }
.bigFont { font-size: 50px; }
</style>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/check-layout-th.js"></script>
<script type="text/javascript">
setup({ explicit_done: true });
</script>
<body onload="document.fonts.ready.then(() => { checkLayout('.grid'); })">
<pre>verticalLR grid and parallel items</pre>
<div class="container width100 verticalLR">
<div class="grid justifyItemsBaseline">
<div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="20" data-expected-height="120">É É ÉÉ</div>
<div class="secondRowFirstColumn bigFont" data-offset-x="20" data-offset-y="70" data-expected-width="50" data-expected-height="50">É</div>
</div>
</div>
<pre>verticalRL grid and parallel items</pre>
<div class="container width100 verticalRL">
<div class="grid justifyItemsBaseline">
<div class="firstRowFirstColumn" data-offset-x="50" data-offset-y="0" data-expected-width="20" data-expected-height="120">É É ÉÉ</div>
<div class="secondRowFirstColumn bigFont" data-offset-x="0" data-offset-y="70" data-expected-width="50" data-expected-height="50">É</div>
</div>
</div>
</body>