Chromium Code Reviews| Index: Source/core/rendering/RenderLayer.cpp |
| diff --git a/Source/core/rendering/RenderLayer.cpp b/Source/core/rendering/RenderLayer.cpp |
| index 7bd8417f0019b02aed0ba7758bb3c7a29c4cc216..b9c2e7610b2b7bf138c51c4fd2a01aafc5f28d1e 100644 |
| --- a/Source/core/rendering/RenderLayer.cpp |
| +++ b/Source/core/rendering/RenderLayer.cpp |
| @@ -270,10 +270,10 @@ void RenderLayer::updateLayerPositionsAfterLayout(const RenderLayer* rootLayer, |
| RenderGeometryMap geometryMap(UseTransforms); |
| if (this != rootLayer) |
| geometryMap.pushMappingsToAncestor(parent(), 0); |
| - updateLayerPositions(&geometryMap, flags); |
| + updateLayerPositions(&geometryMap, *rootLayer->renderer()->containerForRepaint(), flags); |
| } |
| -void RenderLayer::updateLayerPositions(RenderGeometryMap* geometryMap, UpdateLayerPositionsFlags flags) |
| +void RenderLayer::updateLayerPositions(RenderGeometryMap* geometryMap, const RenderLayerModelObject& repaintContainer, UpdateLayerPositionsFlags flags) |
| { |
| updateLayerPosition(); // For relpositioned layers or non-positioned layers, |
| // we need to keep in sync, since we may have shifted relative |
| @@ -305,6 +305,14 @@ void RenderLayer::updateLayerPositions(RenderGeometryMap* geometryMap, UpdateLay |
| m_enclosingPaginationLayer = 0; |
| } |
| + const RenderLayerModelObject* newRepaintContainer = &repaintContainer; |
| + if (RuntimeEnabledFeatures::repaintAfterLayoutEnabled()) { |
| + bool establishesNewRepaintContainer = isRepaintContainer(); |
| + newRepaintContainer = renderer()->adjustCompositedContainerForSpecialAncestors(establishesNewRepaintContainer ? renderer() : &repaintContainer); |
| + if (renderer()->previousPositionFromRepaintContainer() != renderer()->positionFromRepaintContainer(newRepaintContainer)) |
|
leviw_travelin_and_unemployed
2014/05/28 20:51:55
This is unfortunate duplicate work. positionFromRe
leviw_travelin_and_unemployed
2014/05/28 21:02:00
Dan pointed out at RenderGeometryMap uses a FloatP
dsinclair
2014/06/02 18:14:34
Done.
|
| + renderer()->setMayNeedInvalidation(true); |
| + } |
| + |
| repainter().repaintAfterLayout(flags & CheckForRepaint); |
| // Go ahead and update the reflection's position and size. |
| @@ -320,7 +328,7 @@ void RenderLayer::updateLayerPositions(RenderGeometryMap* geometryMap, UpdateLay |
| flags |= UpdatePagination; |
| for (RenderLayer* child = firstChild(); child; child = child->nextSibling()) |
| - child->updateLayerPositions(geometryMap, flags); |
| + child->updateLayerPositions(geometryMap, *newRepaintContainer, flags); |
| if ((flags & NeedsFullRepaintInBacking) && hasCompositedLayerMapping() && !compositedLayerMapping()->paintsIntoCompositedAncestor()) |
| compositedLayerMapping()->setContentsNeedDisplay(); |
| @@ -1529,7 +1537,7 @@ void RenderLayer::removeOnlyThisLayer() |
| // Hits in compositing/overflow/automatically-opt-into-composited-scrolling-part-1.html |
| DisableCompositingQueryAsserts disabler; |
| - current->updateLayerPositions(0); // FIXME: use geometry map. |
| + current->updateLayerPositions(0, *renderer()->containerForRepaint()); // FIXME: use geometry map. |
| current = next; |
| } |