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

Unified Diff: Source/core/rendering/compositing/RenderLayerCompositor.cpp

Issue 311813005: Issue repaints for RenderLayers that get new composited backings after (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Merged. Created 6 years, 6 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/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;

Powered by Google App Engine
This is Rietveld 408576698