Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 7b600312f1e13c3d54289a9280d12c91ca123641
https://github.com/WebKit/WebKit/commit/7b600312f1e13c3d54289a9280d12c91ca123641
Author: Matt Woodrow <[email protected]>
Date: 2022-11-13 (Sun, 13 Nov 2022)
Changed paths:
M LayoutTests/TestExpectations
M LayoutTests/platform/ios/TestExpectations
M Source/WebCore/rendering/GridTrackSizingAlgorithm.cpp
M Source/WebCore/rendering/GridTrackSizingAlgorithm.h
M Source/WebCore/rendering/RenderGrid.cpp
M Source/WebCore/rendering/RenderGrid.h
Log Message:
-----------
Create a temporary grid for computing intrinsic sizes.
https://bugs.webkit.org/show_bug.cgi?id=247653
<rdar://101965460>
Reviewed by Alan Baradlay.
Reverts r249006.
r249006 switched this code from using a temporary Grid during
computeIntrinsicLogicalWidths to instead mutate the layout Grid if a layout was
pending. If no layout was
pending, it used cached values from the previous layout.
This was to solve an issue with subgrid, where the sizing algorithm could
recurse into nested subgrids, which in turn could recurse back into the
original grid. The temporary
stack-based Grid wouldn't be available through this deeply nested callstack and
the code defaulted back to the layout grid. Switching Grids mid-sizing caused
incorrect sizes to
be computed.
This unforuntately still doesn't work, since we're not expecting
computeInstrinsicLogicalWidths to have potential side-effects, even if layout
was pending.
This change reverts r249006 and instead adds m_currentGrid so that the
stack-based temporary Grid is available, without needing to pass it as a
parameter. The real layout
Grid is put inside a private wrapper, so that callers can't accidentally use
it, and must always use the 'current' grid.
No test unfortunately, but this was causing issues on humble bundle with grids
nested inside flexbox, where we trigger repeated layouts (and they weren't
idempotent due to
this bug).
* Source/WebCore/rendering/GridTrackSizingAlgorithm.cpp:
(WebCore::GridTrackSizingAlgorithm::computeTrackBasedSize const):
(WebCore::GridTrackSizingAlgorithm::increaseSizesToAccommodateSpanningItems):
(WebCore::GridTrackSizingAlgorithm::estimatedGridAreaBreadthForChild const):
(WebCore::GridTrackSizingAlgorithm::gridAreaBreadthForChild const):
(WebCore::IndefiniteSizeStrategy::accumulateFlexFraction const):
(WebCore::IndefiniteSizeStrategy::recomputeUsedFlexFractionIfNeeded const):
(WebCore::GridTrackSizingAlgorithm::setup):
* Source/WebCore/rendering/RenderGrid.cpp:
(WebCore::RenderGrid::RenderGrid):
(WebCore::RenderGrid::computeTrackSizesForDefiniteSize):
(WebCore::RenderGrid::canPerformSimplifiedLayout const):
(WebCore::RenderGrid::layoutBlock):
(WebCore::RenderGrid::guttersSize const):
(WebCore::RenderGrid::computeIntrinsicLogicalWidths const):
(WebCore::RenderGrid::computeTrackSizesForIndefiniteSize const):
(WebCore::RenderGrid::computeEmptyTracksForAutoRepeat const):
(WebCore::RenderGrid::placeItems):
(WebCore::RenderGrid::placeItemsOnGrid):
(WebCore::RenderGrid::populateExplicitGridAndOrderIterator):
(WebCore::RenderGrid::createEmptyGridAreaAtSpecifiedPositionsOutsideGrid const):
(WebCore::RenderGrid::placeSpecifiedMajorAxisItemsOnGrid):
(WebCore::RenderGrid::placeAutoMajorAxisItemsOnGrid):
(WebCore::RenderGrid::placeAutoMajorAxisItemOnGrid):
(WebCore::RenderGrid::dirtyGrid):
(WebCore::RenderGrid::trackSizesForComputedStyle const):
(WebCore::RenderGrid::layoutGridItems):
(WebCore::RenderGrid::gridAreaBreadthForChildIncludingAlignmentOffsets const):
(WebCore::RenderGrid::populateGridPositionsForDirection):
(WebCore::RenderGrid::firstLineBaseline const):
(WebCore::RenderGrid::lastLineBaseline const):
(WebCore::RenderGrid::getBaselineChild const):
(WebCore::RenderGrid::currentGrid const):
(WebCore::RenderGrid::currentGrid):
(WebCore::RenderGrid::gridAreaBreadthForOutOfFlowChild):
(WebCore::RenderGrid::gridAreaPositionForInFlowChild const):
(WebCore::RenderGrid::nonCollapsedTracks const):
(WebCore::RenderGrid::numTracks const):
(WebCore::RenderGrid::paintChildren):
(WebCore::RenderGrid::computeGridPositionsForOutOfFlowChild const):
(WebCore::RenderGrid::gridSpanForOutOfFlowChild const):
(WebCore::RenderGrid::GridWrapper::GridWrapper):
(WebCore::RenderGrid::GridWrapper::resetCurrentGrid const):
(WebCore::RenderGrid::placeItemsOnGrid const): Deleted.
(WebCore::RenderGrid::populateExplicitGridAndOrderIterator const): Deleted.
(WebCore::RenderGrid::placeSpecifiedMajorAxisItemsOnGrid const): Deleted.
(WebCore::RenderGrid::placeAutoMajorAxisItemsOnGrid const): Deleted.
(WebCore::RenderGrid::placeAutoMajorAxisItemOnGrid const): Deleted.
* Source/WebCore/rendering/RenderGrid.h:
Canonical link: https://commits.webkit.org/256624@main
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes