Index: Source/WebCore/rendering/RenderLayerCompositor.cpp |
diff --git a/Source/WebCore/rendering/RenderLayerCompositor.cpp b/Source/WebCore/rendering/RenderLayerCompositor.cpp |
index d49df157b71d16d3dfb4c9338d8e85178bce5db7..65c35e245cd4d5b9b777de4bebee187dbf5d7b66 100644 |
--- a/Source/WebCore/rendering/RenderLayerCompositor.cpp |
+++ b/Source/WebCore/rendering/RenderLayerCompositor.cpp |
@@ -323,6 +323,22 @@ bool RenderLayerCompositor::hasAnyAdditionalCompositedLayers(const RenderLayer* |
return m_compositedLayerCount > (rootLayer->isComposited() ? 1 : 0); |
} |
+void RenderLayerCompositor::updateDescendantsAreContiguousInStackingOrderRecursive(RenderLayer* layer) |
+{ |
+ for (RenderLayer* child = layer->firstChild(); child; child = child->nextSibling()) |
+ updateDescendantsAreContiguousInStackingOrderRecursive(child); |
+ |
+ if (layer->isStackingContext() && layer->m_descendantsAreContiguousInStackingOrderDirty) |
+ layer->updateDescendantsAreContiguousInStackingOrder(); |
+} |
+ |
+void RenderLayerCompositor::updateNeedsCompositedScrolling(RenderLayer* layer) |
+{ |
+ layer->updateNeedsCompositedScrolling(); |
+ for (RenderLayer* child = layer->firstChild(); child; child = child->nextSibling()) |
+ updateNeedsCompositedScrolling(child); |
+} |
+ |
void RenderLayerCompositor::updateCompositingLayers(CompositingUpdateType updateType, RenderLayer* updateRoot) |
{ |
m_updateCompositingLayersTimer.stop(); |
@@ -383,6 +399,11 @@ void RenderLayerCompositor::updateCompositingLayers(CompositingUpdateType update |
#endif |
if (checkForHierarchyUpdate) { |
+ // FIXME(vollick): can we skip this altogether in some cases? |
+ updateRoot->updateDescendantDependentFlags(); |
+ updateDescendantsAreContiguousInStackingOrderRecursive(updateRoot); |
+ updateNeedsCompositedScrolling(updateRoot); |
+ |
// Go through the layers in presentation order, so that we can compute which RenderLayers need compositing layers. |
// FIXME: we could maybe do this and the hierarchy udpate in one pass, but the parenting logic would be more complex. |
CompositingState compState(updateRoot, m_compositingConsultsOverlap); |