Commit e3da69de authored by Oriol Brufau's avatar Oriol Brufau Committed by Commit Bot

Revert "[css-grid] Accommodate spanning items crossing flexible tracks"

This reverts commit 8d3d941a.

Reason for revert: 20% performance regression in nested-grid.

Bug: 1015213, 935102

Original change's description:
> [css-grid] Accommodate spanning items crossing flexible tracks
> 
> The specification added a step to increase sizes to accommodate spanning
> items crossing flexible tracks instead of ignoring their contents
> completely. This is done after handling all grid items that don't cross
> such tracks, and this time items are considered together, not grouped by
> their span size.
> 
> Spec: https://drafts.csswg.org/css-grid/#algo-spanning-flex-items
> 
> BUG=935102
> 
> TEST=third_party/blink/web_tests/external/wpt/css/css-grid/layout-algorithm/grid-flex-track-intrinsic-sizes-001.html
> TEST=third_party/blink/web_tests/external/wpt/css/css-grid/layout-algorithm/grid-flex-track-intrinsic-sizes-002.html
> TEST=third_party/blink/web_tests/fast/css-grid-layout/flex-and-content-sized-resolution-columns.html
> TEST=third_party/blink/web_tests/fast/css-grid-layout/grid-gutters-and-flex-content.html
> 
> Change-Id: Ic91a2eb471fae23cde1570c461f491cd5335d771
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1492337
> Reviewed-by: Javier Fernandez <jfernandez@igalia.com>
> Reviewed-by: Sergio Villar <svillar@igalia.com>
> Commit-Queue: Oriol Brufau <obrufau@igalia.com>
> Cr-Commit-Position: refs/heads/master@{#705228}

TBR=jfernandez@igalia.com,rego@igalia.com,svillar@igalia.com,obrufau@igalia.com

Change-Id: Id6ad085e32bfb3ae947459c2fc56d097c2dadb94
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: 935102
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1872593Reviewed-by: default avatarOriol Brufau <obrufau@igalia.com>
Reviewed-by: default avatarManuel Rego <rego@igalia.com>
Commit-Queue: Oriol Brufau <obrufau@igalia.com>
Cr-Commit-Position: refs/heads/master@{#708148}
parent 00f09477
...@@ -24,11 +24,6 @@ class Grid; ...@@ -24,11 +24,6 @@ class Grid;
class GridTrackSizingAlgorithmStrategy; class GridTrackSizingAlgorithmStrategy;
class LayoutGrid; class LayoutGrid;
enum TrackSizeComputationVariant {
kNotCrossingIntrinsicFlexibleTracks,
kCrossingIntrinsicFlexibleTracks,
};
enum TrackSizeComputationPhase { enum TrackSizeComputationPhase {
kResolveIntrinsicMinimums, kResolveIntrinsicMinimums,
kResolveContentBasedMinimums, kResolveContentBasedMinimums,
...@@ -71,14 +66,6 @@ class GridTrack { ...@@ -71,14 +66,6 @@ class GridTrack {
} }
void SetGrowthLimitCap(base::Optional<LayoutUnit>); void SetGrowthLimitCap(base::Optional<LayoutUnit>);
// For flexible tracks, intrinsic contributions are distributed according to
// the ratios of the flex fractions. At that point we will only have some
// GridTracks, but we won't know their index, so we won't be able to call
// GetGridTrackSize in order to obtain their flex fraction. Therefore we cache
// them instead of computing on demand.
double SizeDistributionWeight() const { return size_distribution_weight_; }
void SetSizeDistributionWeight(double);
private: private:
bool IsGrowthLimitBiggerThanBaseSize() const; bool IsGrowthLimitBiggerThanBaseSize() const;
void EnsureGrowthLimitIsBiggerThanBaseSize(); void EnsureGrowthLimitIsBiggerThanBaseSize();
...@@ -89,7 +76,6 @@ class GridTrack { ...@@ -89,7 +76,6 @@ class GridTrack {
LayoutUnit size_during_distribution_; LayoutUnit size_during_distribution_;
base::Optional<LayoutUnit> growth_limit_cap_; base::Optional<LayoutUnit> growth_limit_cap_;
bool infinitely_growable_; bool infinitely_growable_;
double size_distribution_weight_{0};
}; };
class GridTrackSizingAlgorithm final { class GridTrackSizingAlgorithm final {
...@@ -164,19 +150,14 @@ class GridTrackSizingAlgorithm final { ...@@ -164,19 +150,14 @@ class GridTrackSizingAlgorithm final {
void SizeTrackToFitNonSpanningItem(const GridSpan&, void SizeTrackToFitNonSpanningItem(const GridSpan&,
LayoutBox& grid_item, LayoutBox& grid_item,
GridTrack&); GridTrack&);
bool SpanningItemCrossesIntrinsicFlexibleSizedTracks(const GridSpan&) const; bool SpanningItemCrossesFlexibleSizedTracks(const GridSpan&) const;
typedef struct GridItemsSpanGroupRange GridItemsSpanGroupRange; typedef struct GridItemsSpanGroupRange GridItemsSpanGroupRange;
template <TrackSizeComputationVariant variant, template <TrackSizeComputationPhase phase>
TrackSizeComputationPhase phase>
void IncreaseSizesToAccommodateSpanningItems(
const GridItemsSpanGroupRange& grid_items_with_span);
template <TrackSizeComputationVariant variant>
void IncreaseSizesToAccommodateSpanningItems( void IncreaseSizesToAccommodateSpanningItems(
const GridItemsSpanGroupRange& grid_items_with_span); const GridItemsSpanGroupRange& grid_items_with_span);
LayoutUnit ItemSizeForTrackSizeComputationPhase(TrackSizeComputationPhase, LayoutUnit ItemSizeForTrackSizeComputationPhase(TrackSizeComputationPhase,
LayoutBox&) const; LayoutBox&) const;
template <TrackSizeComputationVariant variant, template <TrackSizeComputationPhase phase>
TrackSizeComputationPhase phase>
void DistributeSpaceToTracks( void DistributeSpaceToTracks(
Vector<GridTrack*>& tracks, Vector<GridTrack*>& tracks,
Vector<GridTrack*>* grow_beyond_growth_limits_tracks, Vector<GridTrack*>* grow_beyond_growth_limits_tracks,
......
This is a testharness.js-based test.
PASS 'grid' with: grid-template-columns: 0fr; and grid-template-rows: 0fr;
PASS 'grid' with: grid-template-columns: 1fr; and grid-template-rows: 1fr;
PASS 'grid' with: grid-template-columns: 2fr; and grid-template-rows: 2fr;
PASS 'grid' with: grid-template-columns: minmax(0, 0fr); and grid-template-rows: minmax(0, 0fr);
PASS 'grid' with: grid-template-columns: minmax(0, .5fr); and grid-template-rows: minmax(0, .5fr);
PASS 'grid' with: grid-template-columns: minmax(0, 1fr); and grid-template-rows: minmax(0, 1fr);
PASS 'grid' with: grid-template-columns: minmax(0, 2fr); and grid-template-rows: minmax(0, 2fr);
PASS 'grid' with: grid-template-columns: minmax(75px, 1fr); and grid-template-rows: minmax(75px, 1fr);
FAIL 'grid' with: grid-template-columns: 0fr 0fr; and grid-template-rows: 0fr 0fr; assert_in_array: gridTemplateColumns value "0px 0px" not in array ["50px 50px"]
FAIL 'grid' with: grid-template-columns: 0fr 1fr; and grid-template-rows: 0fr 1fr; assert_in_array: gridTemplateColumns value "0px 50px" not in array ["0px 100px"]
FAIL 'grid' with: grid-template-columns: 1fr 0fr; and grid-template-rows: 1fr 0fr; assert_in_array: gridTemplateColumns value "50px 0px" not in array ["100px 0px"]
FAIL 'grid' with: grid-template-columns: 1fr 1fr; and grid-template-rows: 1fr 1fr; assert_in_array: gridTemplateColumns value "25px 25px" not in array ["50px 50px"]
FAIL 'grid' with: grid-template-columns: 1fr 3fr; and grid-template-rows: 1fr 3fr; assert_in_array: gridTemplateColumns value "12.5px 37.5px" not in array ["25px 75px"]
FAIL 'grid' with: grid-template-columns: 0fr 0fr 1fr; and grid-template-rows: 0fr 0fr 1fr; assert_in_array: gridTemplateColumns value "0px 0px 50px" not in array ["50px 50px 0px"]
PASS 'grid' with: grid-template-columns: minmax(0, 0fr) minmax(0, 0fr); and grid-template-rows: minmax(0, 0fr) minmax(0, 0fr);
PASS 'grid' with: grid-template-columns: minmax(0, 0fr) minmax(0, 1fr); and grid-template-rows: minmax(0, 0fr) minmax(0, 1fr);
PASS 'grid' with: grid-template-columns: minmax(15px, 0fr) minmax(0, 1fr); and grid-template-rows: minmax(15px, 0fr) minmax(0, 1fr);
PASS 'grid' with: grid-template-columns: minmax(20px, 1fr) minmax(0, 1fr); and grid-template-rows: minmax(20px, 1fr) minmax(0, 1fr);
PASS 'grid' with: grid-template-columns: minmax(30px, 1fr) minmax(0, 1fr); and grid-template-rows: minmax(30px, 1fr) minmax(0, 1fr);
FAIL 'grid' with: grid-template-columns: 0fr minmax(0, 0fr); and grid-template-rows: 0fr minmax(0, 0fr); assert_in_array: gridTemplateColumns value "0px 0px" not in array ["100px 0px"]
FAIL 'grid' with: grid-template-columns: 0fr minmax(0, 1fr); and grid-template-rows: 0fr minmax(0, 1fr); assert_in_array: gridTemplateColumns value "0px 50px" not in array ["100px 0px"]
FAIL 'grid' with: grid-template-columns: 1fr minmax(0, 1fr); and grid-template-rows: 1fr minmax(0, 1fr); assert_in_array: gridTemplateColumns value "25px 25px" not in array ["100px 0px"]
FAIL 'grid' with: grid-template-columns: 1fr minmax(25px, 1fr); and grid-template-rows: 1fr minmax(25px, 1fr); assert_in_array: gridTemplateColumns value "25px 25px" not in array ["75px 25px"]
FAIL 'grid' with: grid-template-columns: 0fr auto; and grid-template-rows: 0fr auto; assert_in_array: gridTemplateColumns value "0px 50px" not in array ["100px 0px"]
FAIL 'grid' with: grid-template-columns: 1fr auto; and grid-template-rows: 1fr auto; assert_in_array: gridTemplateColumns value "50px 0px" not in array ["100px 0px"]
FAIL 'grid' with: grid-template-columns: 1fr max-content; and grid-template-rows: 1fr max-content; assert_in_array: gridTemplateColumns value "50px 0px" not in array ["100px 0px"]
FAIL 'grid' with: grid-template-columns: minmax(0, 0fr) auto; and grid-template-rows: minmax(0, 0fr) auto; assert_in_array: gridTemplateColumns value "0px 50px" not in array ["0px 100px"]
FAIL 'grid' with: grid-template-columns: minmax(0, 1fr) auto; and grid-template-rows: minmax(0, 1fr) auto; assert_in_array: gridTemplateColumns value "50px 0px" not in array ["0px 100px"]
FAIL 'grid' with: grid-template-columns: minmax(25px, 0fr) auto; and grid-template-rows: minmax(25px, 0fr) auto; assert_in_array: gridTemplateColumns value "25px 25px" not in array ["25px 75px"]
FAIL 'grid' with: grid-template-columns: minmax(25px, 1fr) auto; and grid-template-rows: minmax(25px, 1fr) auto; assert_in_array: gridTemplateColumns value "50px 0px" not in array ["25px 75px"]
Harness: the test ran to completion.
This is a testharness.js-based test.
FAIL 'grid' with: grid-template-columns: minmax(0, 1fr) auto auto auto; and grid-template-rows: minmax(0, 1fr) auto auto auto; assert_in_array: gridTemplateColumns value "0px 50px 50px 50px" not in array ["0px 60px 45px 45px"]
FAIL 'grid' with: grid-template-columns: 1fr auto auto auto; and grid-template-rows: 1fr auto auto auto; assert_in_array: gridTemplateColumns value "0px 50px 50px 50px" not in array ["10px 50px 50px 50px"]
FAIL 'grid' with: grid-template-columns: 1fr 1fr 1fr 1fr; and grid-template-rows: 1fr 1fr 1fr 1fr; assert_in_array: gridTemplateColumns value "12.5px 12.5px 12.5px 12.5px" not in array ["30px 50px 50px 50px"]
FAIL 'grid' with: grid-template-columns: 1fr 1fr 1fr 4fr; and grid-template-rows: 1fr 1fr 1fr 4fr; assert_in_array: gridTemplateColumns value "7.14062px 7.14062px 7.14062px 28.5625px" not in array ["30px 30px 25px 100px"]
FAIL 'grid' with: grid-template-columns: 1fr 1fr 1fr; and grid-template-rows: 1fr 1fr 1fr; assert_in_array: gridTemplateColumns value "60px 0px 0px" not in array ["60px 50px 50px"]
Harness: the test ran to completion.
PASS window.getComputedStyle(gridFixedAndMinContentAndFlex, '').getPropertyValue('grid-template-columns') is "20px 30px 50px" PASS window.getComputedStyle(gridFixedAndMinContentAndFlex, '').getPropertyValue('grid-template-columns') is "20px 30px 50px"
PASS window.getComputedStyle(gridFixedAndMinContentAndFlexMultipleOverlap, '').getPropertyValue('grid-template-columns') is "20px 10px 70px" PASS window.getComputedStyle(gridFixedAndMinContentAndFlexMultipleOverlap, '').getPropertyValue('grid-template-columns') is "20px 10px 70px"
PASS window.getComputedStyle(gridMinMaxFixedFlexAndMaxContentAndAuto, '').getPropertyValue('grid-template-columns') is "30px 50px 20px" PASS window.getComputedStyle(gridMinMaxFixedFlexAndMaxContentAndAuto, '').getPropertyValue('grid-template-columns') is "60px 20px 20px"
PASS window.getComputedStyle(gridMinMaxFixedFlexAndMaxContentAndAutoNoFlexSpanningItems, '').getPropertyValue('grid-template-columns') is "30px 70px 0px" PASS window.getComputedStyle(gridMinMaxFixedFlexAndMaxContentAndAutoNoFlexSpanningItems, '').getPropertyValue('grid-template-columns') is "100px 0px 0px"
PASS window.getComputedStyle(gridMinMaxAutoFixedAndMinContentAndFixed, '').getPropertyValue('grid-template-columns') is "35px 20px 25px" PASS window.getComputedStyle(gridMinMaxAutoFixedAndMinContentAndFixed, '').getPropertyValue('grid-template-columns') is "35px 20px 25px"
PASS window.getComputedStyle(gridMinContentAndMinMaxFixedMinContentAndFlex, '').getPropertyValue('grid-template-columns') is "20px 20px 60px" PASS window.getComputedStyle(gridMinContentAndMinMaxFixedMinContentAndFlex, '').getPropertyValue('grid-template-columns') is "20px 20px 60px"
PASS window.getComputedStyle(gridMaxContentAndMinMaxFixedMaxContentAndFlex, '').getPropertyValue('grid-template-columns') is "70px 20px 30px" PASS window.getComputedStyle(gridMaxContentAndMinMaxFixedMaxContentAndFlex, '').getPropertyValue('grid-template-columns') is "70px 20px 10px"
PASS successfullyParsed is true PASS successfullyParsed is true
TEST COMPLETE TEST COMPLETE
......
...@@ -98,11 +98,11 @@ function checkColumns(gridId, columnValue) ...@@ -98,11 +98,11 @@ function checkColumns(gridId, columnValue)
checkColumns("gridFixedAndMinContentAndFlex", "20px 30px 50px"); checkColumns("gridFixedAndMinContentAndFlex", "20px 30px 50px");
checkColumns("gridFixedAndMinContentAndFlexMultipleOverlap", "20px 10px 70px"); checkColumns("gridFixedAndMinContentAndFlexMultipleOverlap", "20px 10px 70px");
checkColumns("gridMinMaxFixedFlexAndMaxContentAndAuto", "30px 50px 20px"); checkColumns("gridMinMaxFixedFlexAndMaxContentAndAuto", "60px 20px 20px");
checkColumns("gridMinMaxFixedFlexAndMaxContentAndAutoNoFlexSpanningItems", "30px 70px 0px"); checkColumns("gridMinMaxFixedFlexAndMaxContentAndAutoNoFlexSpanningItems", "100px 0px 0px");
checkColumns("gridMinMaxAutoFixedAndMinContentAndFixed", "35px 20px 25px"); checkColumns("gridMinMaxAutoFixedAndMinContentAndFixed", "35px 20px 25px");
checkColumns("gridMinContentAndMinMaxFixedMinContentAndFlex", "20px 20px 60px"); checkColumns("gridMinContentAndMinMaxFixedMinContentAndFlex", "20px 20px 60px");
checkColumns("gridMaxContentAndMinMaxFixedMaxContentAndFlex", "70px 20px 30px"); checkColumns("gridMaxContentAndMinMaxFixedMaxContentAndFlex", "70px 20px 10px");
</script> </script>
</html> </html>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment