Changeset 196983 in webkit
- Timestamp:
- Feb 23, 2016 10:17:17 AM (8 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r196978 r196983 1 2016-02-23 Manuel Rego Casasnovas <rego@igalia.com> 2 3 [css-grid] Avoid duplicated calls to resolution code 4 https://bugs.webkit.org/show_bug.cgi?id=154336 5 6 Reviewed by Sergio Villar Senin. 7 8 We were calling GridResolvedPosition::resolveGridPositionsFromStyle() 9 several times per item. 10 11 We can store the GridCoordinates in 12 RenderGrid::populateExplicitGridAndOrderIterator() 13 and reuse them in the placement code. 14 Once RenderGrid::placeItemsOnGrid() is over, 15 all the items will have a definite position in both axis. 16 17 No new tests, no change of behavior. 18 19 * rendering/RenderGrid.cpp: 20 (WebCore::RenderGrid::insertItemIntoGrid): 21 (WebCore::RenderGrid::placeItemsOnGrid): 22 (WebCore::RenderGrid::populateExplicitGridAndOrderIterator): 23 (WebCore::RenderGrid::placeSpecifiedMajorAxisItemsOnGrid): 24 (WebCore::RenderGrid::placeAutoMajorAxisItemOnGrid): 25 (WebCore::RenderGrid::cachedGridCoordinate): 26 (WebCore::RenderGrid::cachedGridSpan): 27 * rendering/RenderGrid.h: 28 1 29 2016-02-23 Manuel Rego Casasnovas <rego@igalia.com> 2 30 -
trunk/Source/WebCore/rendering/RenderGrid.cpp
r196691 r196983 1139 1139 void RenderGrid::insertItemIntoGrid(RenderBox& child, const GridCoordinate& coordinate) 1140 1140 { 1141 ASSERT(coordinate.rows.isDefinite() && coordinate.columns.isDefinite()); 1141 1142 ensureGridSize(coordinate.rows.resolvedFinalPosition().toInt(), coordinate.columns.resolvedFinalPosition().toInt()); 1142 1143 … … 1145 1146 m_grid[row.toInt()][column.toInt()].append(&child); 1146 1147 } 1147 m_gridItemCoordinate.set(&child, coordinate);1148 1148 } 1149 1149 … … 1161 1161 continue; 1162 1162 1163 GridSpan rowPositions = GridResolvedPosition::resolveGridPositionsFromStyle(style(), *child, ForRows); 1164 GridSpan columnPositions = GridResolvedPosition::resolveGridPositionsFromStyle(style(), *child, ForColumns); 1165 1166 if (!rowPositions.isDefinite() || !columnPositions.isDefinite()) { 1163 GridCoordinate coordinate = cachedGridCoordinate(*child); 1164 1165 if (!coordinate.rows.isDefinite() || !coordinate.columns.isDefinite()) { 1167 1166 bool majorAxisDirectionIsForColumns = autoPlacementMajorAxisDirection() == ForColumns; 1168 if ((majorAxisDirectionIsForColumns && !co lumnPositions.isDefinite())1169 || (!majorAxisDirectionIsForColumns && ! rowPositions.isDefinite()))1167 if ((majorAxisDirectionIsForColumns && !coordinate.columns.isDefinite()) 1168 || (!majorAxisDirectionIsForColumns && !coordinate.rows.isDefinite())) 1170 1169 autoMajorAxisAutoGridItems.append(child); 1171 1170 else … … 1173 1172 continue; 1174 1173 } 1175 insertItemIntoGrid(*child, GridCoordinate( rowPositions, columnPositions));1174 insertItemIntoGrid(*child, GridCoordinate(coordinate.rows, coordinate.columns)); 1176 1175 } 1177 1176 … … 1181 1180 placeSpecifiedMajorAxisItemsOnGrid(specifiedMajorAxisAutoGridItems); 1182 1181 placeAutoMajorAxisItemsOnGrid(autoMajorAxisAutoGridItems); 1182 1183 #if ENABLE(ASSERT) 1184 for (RenderBox* child = m_orderIterator.first(); child; child = m_orderIterator.next()) { 1185 if (child->isOutOfFlowPositioned()) 1186 continue; 1187 1188 GridCoordinate coordinate = cachedGridCoordinate(*child); 1189 ASSERT(coordinate.rows.isDefinite() && coordinate.columns.isDefinite()); 1190 } 1191 #endif 1183 1192 } 1184 1193 … … 1212 1221 maximumColumnIndex = std::max(maximumColumnIndex, positions.resolvedFinalPosition().toInt()); 1213 1222 } 1223 1224 m_gridItemCoordinate.set(child, GridCoordinate(rowPositions, columnPositions)); 1214 1225 } 1215 1226 … … 1238 1249 1239 1250 for (auto& autoGridItem : autoGridItems) { 1240 GridSpan majorAxisPositions = GridResolvedPosition::resolveGridPositionsFromStyle(style(),*autoGridItem, autoPlacementMajorAxisDirection());1251 GridSpan majorAxisPositions = cachedGridSpan(*autoGridItem, autoPlacementMajorAxisDirection()); 1241 1252 ASSERT(majorAxisPositions.isDefinite()); 1253 ASSERT(!cachedGridSpan(*autoGridItem, autoPlacementMinorAxisDirection()).isDefinite()); 1242 1254 GridSpan minorAxisPositions = GridResolvedPosition::resolveGridPositionsFromAutoPlacementPosition(style(), *autoGridItem, autoPlacementMinorAxisDirection(), GridResolvedPosition(0)); 1243 1255 unsigned majorAxisInitialPosition = majorAxisPositions.resolvedInitialPosition().toInt(); … … 1247 1259 if (!emptyGridArea) 1248 1260 emptyGridArea = createEmptyGridAreaAtSpecifiedPositionsOutsideGrid(*autoGridItem, autoPlacementMajorAxisDirection(), majorAxisPositions); 1261 1262 m_gridItemCoordinate.set(autoGridItem, *emptyGridArea); 1249 1263 insertItemIntoGrid(*autoGridItem, *emptyGridArea); 1250 1264 … … 1271 1285 void RenderGrid::placeAutoMajorAxisItemOnGrid(RenderBox& gridItem, AutoPlacementCursor& autoPlacementCursor) 1272 1286 { 1273 ASSERT(! GridResolvedPosition::resolveGridPositionsFromStyle(style(),gridItem, autoPlacementMajorAxisDirection()).isDefinite());1287 ASSERT(!cachedGridSpan(gridItem, autoPlacementMajorAxisDirection()).isDefinite()); 1274 1288 GridSpan majorAxisPositions = GridResolvedPosition::resolveGridPositionsFromAutoPlacementPosition(style(), gridItem, autoPlacementMajorAxisDirection(), GridResolvedPosition(0)); 1275 1289 … … 1279 1293 1280 1294 std::unique_ptr<GridCoordinate> emptyGridArea; 1281 GridSpan minorAxisPositions = GridResolvedPosition::resolveGridPositionsFromStyle(style(),gridItem, autoPlacementMinorAxisDirection());1295 GridSpan minorAxisPositions = cachedGridSpan(gridItem, autoPlacementMinorAxisDirection()); 1282 1296 if (minorAxisPositions.isDefinite()) { 1283 1297 // Move to the next track in major axis if initial position in minor axis is before auto-placement cursor. … … 1319 1333 } 1320 1334 1335 m_gridItemCoordinate.set(&gridItem, *emptyGridArea); 1321 1336 insertItemIntoGrid(gridItem, *emptyGridArea); 1322 1337 autoPlacementCursor.first = emptyGridArea->rows.resolvedInitialPosition().toInt(); … … 1507 1522 } 1508 1523 1524 GridCoordinate RenderGrid::cachedGridCoordinate(const RenderBox& gridItem) const 1525 { 1526 ASSERT(m_gridItemCoordinate.contains(&gridItem)); 1527 return m_gridItemCoordinate.get(&gridItem); 1528 } 1529 1509 1530 GridSpan RenderGrid::cachedGridSpan(const RenderBox& gridItem, GridTrackSizingDirection direction) const 1510 1531 { 1511 ASSERT(m_gridItemCoordinate.contains(&gridItem)); 1512 GridCoordinate coordinate = m_gridItemCoordinate.get(&gridItem); 1532 GridCoordinate coordinate = cachedGridCoordinate(gridItem); 1513 1533 return direction == ForColumns ? coordinate.columns : coordinate.rows; 1514 1534 } -
trunk/Source/WebCore/rendering/RenderGrid.h
r195808 r196983 141 141 ContentAlignmentData computeContentPositionAndDistributionOffset(GridTrackSizingDirection, const LayoutUnit& availableFreeSpace, unsigned numberOfGridTracks) const; 142 142 LayoutPoint findChildLogicalPosition(const RenderBox&) const; 143 GridCoordinate cachedGridCoordinate(const RenderBox&) const; 143 144 GridSpan cachedGridSpan(const RenderBox&, GridTrackSizingDirection) const; 144 145
Note: See TracChangeset
for help on using the changeset viewer.