Index: Source/core/rendering/compositing/RenderLayerCompositor.cpp |
diff --git a/Source/core/rendering/compositing/RenderLayerCompositor.cpp b/Source/core/rendering/compositing/RenderLayerCompositor.cpp |
index 3a447eaffe0486869d96eef592a887b07085dfc1..1e69907e7455d5865033e833128c907696e937b9 100644 |
--- a/Source/core/rendering/compositing/RenderLayerCompositor.cpp |
+++ b/Source/core/rendering/compositing/RenderLayerCompositor.cpp |
@@ -379,9 +379,10 @@ void RenderLayerCompositor::updateIfNeeded() |
RenderLayer* updateRoot = rootRenderLayer(); |
+ Vector<RenderLayer*> layersNeedingRepaint; |
+ |
if (updateType >= CompositingUpdateAfterCompositingInputChange) { |
bool layersChanged = false; |
- |
{ |
TRACE_EVENT0("blink_rendering", "CompositingPropertyUpdater::updateAncestorDependentProperties"); |
CompositingPropertyUpdater(updateRoot).updateAncestorDependentProperties(updateRoot, compositingPropertyUpdateType); |
@@ -394,7 +395,7 @@ void RenderLayerCompositor::updateIfNeeded() |
{ |
TRACE_EVENT0("blink_rendering", "CompositingLayerAssigner::assign"); |
- CompositingLayerAssigner(this).assign(updateRoot, layersChanged); |
+ CompositingLayerAssigner(this).assign(updateRoot, layersChanged, layersNeedingRepaint); |
} |
{ |
@@ -452,6 +453,13 @@ void RenderLayerCompositor::updateIfNeeded() |
if (needsToUpdateScrollingCoordinator && m_renderView.frame()->isMainFrame() && scrollingCoordinator() && inCompositingMode()) |
scrollingCoordinator()->updateAfterCompositingChange(); |
+ for (unsigned i = 0; i < layersNeedingRepaint.size(); i++) { |
+ RenderLayer* layer = layersNeedingRepaint[i]; |
+ layer->repainter().computeRepaintRectsIncludingDescendants(); |
+ |
+ repaintOnCompositingChange(layer); |
+ } |
+ |
// Inform the inspector that the layer tree has changed. |
if (m_renderView.frame()->isMainFrame()) |
InspectorInstrumentation::layerTreeDidChange(m_renderView.frame()); |
@@ -488,13 +496,6 @@ bool RenderLayerCompositor::allocateOrClearCompositedLayerMapping(RenderLayer* l |
if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoordinator()) |
scrollingCoordinator->frameViewRootLayerDidChange(m_renderView.frameView()); |
} |
- |
- // FIXME: it seems premature to compute this before all compositing state has been updated? |
- // This layer and all of its descendants have cached repaints rects that are relative to |
- // the repaint container, so change when compositing changes; we need to update them here. |
- if (layer->parent()) |
- layer->repainter().computeRepaintRectsIncludingDescendants(); |
- |
break; |
case RemoveOwnCompositedLayerMapping: |
// PutInSquashingLayer means you might have to remove the composited layer mapping first. |
@@ -513,13 +514,6 @@ bool RenderLayerCompositor::allocateOrClearCompositedLayerMapping(RenderLayer* l |
layer->clearCompositedLayerMapping(); |
compositedLayerMappingChanged = true; |
- |
- // This layer and all of its descendants have cached repaints rects that are relative to |
- // the repaint container, so change when compositing changes; we need to update them here. |
- layer->repainter().computeRepaintRectsIncludingDescendants(); |
- |
- // If we need to repaint, do so now that we've removed the compositedLayerMapping |
- repaintOnCompositingChange(layer); |
} |
break; |