Changeset 190783 in webkit
- Timestamp:
- Oct 9, 2015 5:47:47 AM (9 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r190763 r190783 1 2015-10-08 Sergio Villar Senin <svillar@igalia.com> 2 3 [css-grid] Remove unneeded calls to compute(Content)LogicalWidth(Height) 4 https://bugs.webkit.org/show_bug.cgi?id=149926 5 6 Reviewed by Darin Adler. 7 8 In order to resolve a Length to a LayoutUnit we need to 9 provide a maximum value so that i.e. percentages are correctly 10 computed. That maximum value was computeLogicalWidth() for 11 columns and computeContentLogicalHeight() for rows. We were 12 calling it for every single track with a definite size instead 13 of computing it once and reusing it multiple times. 14 15 This brings some nice performance improvements: 16 - 2.9% in /Layout/fixed-grid-lots-of-data 17 - 2.95% in /Layout/fixed-grid-lots-of-stretched-data 18 19 No new tests required as there is no change in functionality. 20 21 * rendering/RenderGrid.cpp: 22 (WebCore::RenderGrid::computeUsedBreadthOfGridTracks): 23 (WebCore::RenderGrid::computeUsedBreadthOfMinLength): 24 (WebCore::RenderGrid::computeUsedBreadthOfMaxLength): 25 (WebCore::RenderGrid::tracksAreWiderThanMinTrackBreadth): 26 * rendering/RenderGrid.h: 27 1 28 2015-10-08 Chris Dumez <cdumez@apple.com> 2 29 -
trunk/Source/WebCore/rendering/RenderGrid.cpp
r190721 r190783 387 387 sizingData.contentSizedTracksIndex.shrink(0); 388 388 389 const LayoutUnit maxSize = direction == ForColumns ? contentLogicalWidth() : computeContentLogicalHeight(MainOrPreferredSize, style().logicalHeight(), Nullopt).valueOr(0); 389 390 // 1. Initialize per Grid track variables. 390 391 for (unsigned i = 0; i < tracks.size(); ++i) { … … 394 395 const GridLength& maxTrackBreadth = trackSize.maxTrackBreadth(); 395 396 396 track.setBaseSize(computeUsedBreadthOfMinLength( direction, minTrackBreadth));397 track.setGrowthLimit(computeUsedBreadthOfMaxLength( direction, maxTrackBreadth, track.baseSize()));397 track.setBaseSize(computeUsedBreadthOfMinLength(minTrackBreadth, maxSize)); 398 track.setGrowthLimit(computeUsedBreadthOfMaxLength(maxTrackBreadth, track.baseSize(), maxSize)); 398 399 track.setInfinitelyGrowable(false); 399 400 … … 471 472 } 472 473 473 LayoutUnit RenderGrid::computeUsedBreadthOfMinLength( GridTrackSizingDirection direction, const GridLength& gridLength) const474 LayoutUnit RenderGrid::computeUsedBreadthOfMinLength(const GridLength& gridLength, LayoutUnit maxSize) const 474 475 { 475 476 if (gridLength.isFlex()) … … 478 479 const Length& trackLength = gridLength.length(); 479 480 if (trackLength.isSpecified()) 480 return computeUsedBreadthOfSpecifiedLength(direction, trackLength);481 return valueForLength(trackLength, maxSize); 481 482 482 483 ASSERT(trackLength.isMinContent() || trackLength.isAuto() || trackLength.isMaxContent()); … … 484 485 } 485 486 486 LayoutUnit RenderGrid::computeUsedBreadthOfMaxLength( GridTrackSizingDirection direction, const GridLength& gridLength, LayoutUnit usedBreadth) const487 LayoutUnit RenderGrid::computeUsedBreadthOfMaxLength(const GridLength& gridLength, LayoutUnit usedBreadth, LayoutUnit maxSize) const 487 488 { 488 489 if (gridLength.isFlex()) … … 490 491 491 492 const Length& trackLength = gridLength.length(); 492 if (trackLength.isSpecified()) { 493 LayoutUnit computedBreadth = computeUsedBreadthOfSpecifiedLength(direction, trackLength); 494 ASSERT(computedBreadth != infinity); 495 return computedBreadth; 496 } 493 if (trackLength.isSpecified()) 494 return valueForLength(trackLength, maxSize); 497 495 498 496 ASSERT(trackLength.isMinContent() || trackLength.isAuto() || trackLength.isMaxContent()); 499 497 return infinity; 500 }501 502 LayoutUnit RenderGrid::computeUsedBreadthOfSpecifiedLength(GridTrackSizingDirection direction, const Length& trackLength) const503 {504 ASSERT(trackLength.isSpecified());505 if (direction == ForColumns)506 return valueForLength(trackLength, contentLogicalWidth());507 return valueForLength(trackLength, computeContentLogicalHeight(MainOrPreferredSize, style().logicalHeight(), Nullopt).valueOr(0));508 498 } 509 499 … … 1002 992 bool RenderGrid::tracksAreWiderThanMinTrackBreadth(GridTrackSizingDirection direction, const Vector<GridTrack>& tracks) 1003 993 { 994 const LayoutUnit maxSize = direction == ForColumns ? contentLogicalWidth() : computeContentLogicalHeight(MainOrPreferredSize, style().logicalHeight(), Nullopt).valueOr(0); 1004 995 for (unsigned i = 0; i < tracks.size(); ++i) { 1005 996 const GridTrackSize& trackSize = gridTrackSize(direction, i); 1006 997 const GridLength& minTrackBreadth = trackSize.minTrackBreadth(); 1007 if (computeUsedBreadthOfMinLength( direction, minTrackBreadth) > tracks[i].baseSize())998 if (computeUsedBreadthOfMinLength(minTrackBreadth, maxSize) > tracks[i].baseSize()) 1008 999 return false; 1009 1000 } -
trunk/Source/WebCore/rendering/RenderGrid.h
r190663 r190783 72 72 void computeUsedBreadthOfGridTracks(GridTrackSizingDirection, GridSizingData&, LayoutUnit& availableLogicalSpace); 73 73 bool gridElementIsShrinkToFit(); 74 LayoutUnit computeUsedBreadthOfMinLength(GridTrackSizingDirection, const GridLength&) const; 75 LayoutUnit computeUsedBreadthOfMaxLength(GridTrackSizingDirection, const GridLength&, LayoutUnit usedBreadth) const; 76 LayoutUnit computeUsedBreadthOfSpecifiedLength(GridTrackSizingDirection, const Length&) const; 74 LayoutUnit computeUsedBreadthOfMinLength(const GridLength&, LayoutUnit maxSize) const; 75 LayoutUnit computeUsedBreadthOfMaxLength(const GridLength&, LayoutUnit usedBreadth, LayoutUnit maxSize) const; 77 76 void resolveContentBasedTrackSizingFunctions(GridTrackSizingDirection, GridSizingData&); 78 77
Note: See TracChangeset
for help on using the changeset viewer.