Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(754)

Unified Diff: Source/core/rendering/RenderLayer.cpp

Issue 285103003: [RAL] Make sure RenderLayers are invalidated when moved. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;
}

Powered by Google App Engine
This is Rietveld 408576698