Changeset 174006 in webkit
- Timestamp:
- Sep 26, 2014 6:41:57 AM (10 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r174002 r174006 1 2014-09-23 Sergio Villar Senin <svillar@igalia.com> 2 3 [CSS Grid Layout] Fix the handling of infinity in track growth limits 4 https://bugs.webkit.org/show_bug.cgi?id=137019 5 6 Reviewed by Darin Adler. 7 8 * fast/css-grid-layout/grid-content-sized-columns-resolution-expected.txt: Added. 9 * fast/css-grid-layout/grid-content-sized-columns-resolution.html: Added. 10 * fast/css-grid-layout/grid-item-order-in-content-sized-columns-resolution-expected.txt: 11 1 12 2014-09-26 Lorenzo Tilve <ltilve@igalia.com> 2 13 -
trunk/LayoutTests/fast/css-grid-layout/grid-item-order-in-content-sized-columns-resolution-expected.txt
r173620 r174006 2 2 PASS grid-template-columns is 76px 50px after grid row swap. 3 3 PASS grid-template-columns is 60px 16px after grid row swap. 4 PASS grid-template-columns is 6 8px 16px after grid row swap.5 PASS grid-template-columns is 76px 8px after grid row swap.6 PASS grid-template-columns is 6 8px 16px after grid row swap.4 PASS grid-template-columns is 60px 16px after grid row swap. 5 PASS grid-template-columns is 76px 0px after grid row swap. 6 PASS grid-template-columns is 60px 16px after grid row swap. 7 7 PASS grid-template-columns is 60px 16px after grid row swap. 8 8 PASS grid-template-columns is 60px 16px after grid row swap. -
trunk/Source/WebCore/ChangeLog
r174002 r174006 1 2014-09-23 Sergio Villar Senin <svillar@igalia.com> 2 3 [CSS Grid Layout] Fix the handling of infinity in track growth limits 4 https://bugs.webkit.org/show_bug.cgi?id=137019 5 6 Reviewed by Darin Adler. 7 8 The growth limit of content sized tracks is initialized to 9 infinity which is internally represented as -1. We were not 10 specialcasing this situation, and thus, -1 was used in the 11 computations as any other value. This change makes the code aware 12 of the existence of infinites (like when sorting tracks by growth 13 potential or when initializing the track growth limits). 14 15 There was another bug related to infinities. The code that was 16 replacing a infinite growth limit by a finite one was not using 17 the proper indexes so the tracks that were being updated were the 18 wrong ones. 19 20 Test: fast/css-grid-layout/grid-content-sized-columns-resolution.html 21 22 * rendering/RenderGrid.cpp: 23 (WebCore::RenderGrid::computeUsedBreadthOfGridTracks): 24 (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions): 25 (WebCore::sortByGridTrackGrowthPotential): 26 (WebCore::RenderGrid::distributeSpaceToTracks): 27 1 28 2014-09-26 Lorenzo Tilve <ltilve@igalia.com> 2 29 -
trunk/Source/WebCore/rendering/RenderGrid.cpp
r173868 r174006 308 308 track.m_maxBreadth = computeUsedBreadthOfMaxLength(direction, maxTrackBreadth, track.m_usedBreadth); 309 309 310 track.m_maxBreadth = std::max(track.m_maxBreadth, track.m_usedBreadth); 310 if (track.m_maxBreadth != infinity) 311 track.m_maxBreadth = std::max(track.m_maxBreadth, track.m_usedBreadth); 311 312 312 313 if (trackSize.isContentSized()) … … 560 561 // FIXME: Split the grid tracks into groups that doesn't overlap a <flex> grid track. 561 562 562 for ( size_t i = 0; i < sizingData.contentSizedTracksIndex.size(); ++i) {563 GridIterator iterator(m_grid, direction, sizingData.contentSizedTracksIndex[i]);563 for (auto trackIndex : sizingData.contentSizedTracksIndex) { 564 GridIterator iterator(m_grid, direction, trackIndex); 564 565 HashSet<RenderBox*> itemsSet; 565 566 Vector<GridItemWithSpan> itemsSortedByIncreasingSpan; … … 578 579 } 579 580 580 GridTrack& track = (direction == ForColumns) ? sizingData.columnTracks[ i] : sizingData.rowTracks[i];581 GridTrack& track = (direction == ForColumns) ? sizingData.columnTracks[trackIndex] : sizingData.rowTracks[trackIndex]; 581 582 if (track.m_maxBreadth == infinity) 582 583 track.m_maxBreadth = track.m_usedBreadth; … … 618 619 static bool sortByGridTrackGrowthPotential(const GridTrack* track1, const GridTrack* track2) 619 620 { 621 // This check ensures that we respect the irreflexivity property of the strict weak ordering required by std::sort 622 // (forall x: NOT x < x). 623 if (track1->m_maxBreadth == infinity && track2->m_maxBreadth == infinity) 624 return false; 625 626 if (track1->m_maxBreadth == infinity || track2->m_maxBreadth == infinity) 627 return track2->m_maxBreadth == infinity; 628 620 629 return (track1->m_maxBreadth - track1->m_usedBreadth) < (track2->m_maxBreadth - track2->m_usedBreadth); 621 630 } … … 632 641 GridTrack& track = *tracks[i]; 633 642 LayoutUnit trackBreadth = (tracks[i]->*trackGetter)(); 634 LayoutUnit trackGrowthPotential = track.m_maxBreadth - trackBreadth; 643 bool infiniteGrowthPotential = track.m_maxBreadth == infinity; 644 LayoutUnit trackGrowthPotential = infiniteGrowthPotential ? track.m_maxBreadth : track.m_maxBreadth - trackBreadth; 635 645 sizingData.distributeTrackVector[i] = trackBreadth; 636 if (trackGrowthPotential > 0) { 646 // Let's avoid computing availableLogicalSpaceShare as much as possible as it's a hot spot in performance tests. 647 if (trackGrowthPotential > 0 || infiniteGrowthPotential) { 637 648 LayoutUnit availableLogicalSpaceShare = availableLogicalSpace / (tracksSize - i); 638 LayoutUnit growthShare = std::min(availableLogicalSpaceShare, trackGrowthPotential); 649 LayoutUnit growthShare = infiniteGrowthPotential ? availableLogicalSpaceShare : std::min(availableLogicalSpaceShare, trackGrowthPotential); 650 ASSERT(growthShare > 0); 639 651 // We should never shrink any grid track or else we can't guarantee we abide by our min-sizing function. 640 652 sizingData.distributeTrackVector[i] += growthShare;
Note: See TracChangeset
for help on using the changeset viewer.