Index: Source/core/rendering/RenderLayer.cpp |
diff --git a/Source/core/rendering/RenderLayer.cpp b/Source/core/rendering/RenderLayer.cpp |
index 42f61fba0ee347a78f79d491e8b285c7e06b5213..b8c06335b466401b9dfd65c2b223bb1e56e04d7b 100644 |
--- a/Source/core/rendering/RenderLayer.cpp |
+++ b/Source/core/rendering/RenderLayer.cpp |
@@ -710,8 +710,17 @@ void RenderLayer::setHasVisibleContent() |
return; |
} |
- m_visibleContentStatusDirty = false; |
m_hasVisibleContent = true; |
+ m_visibleContentStatusDirty = false; |
+ |
+ { |
+ // FIXME: We can remove this code once we remove the recursive tree |
+ // walk inside updateGraphicsLayerGeometry. |
+ DisableCompositingQueryAsserts disabler; |
+ if (RenderLayer* compositingLayer = enclosingCompositingLayer()) |
+ compositingLayer->compositedLayerMapping()->setNeedsGeometryUpdate(); |
+ } |
+ |
repainter().computeRepaintRects(renderer()->containerForRepaint()); |
if (!m_stackingNode->isNormalFlowOnly()) { |
// We don't collect invisible layers in z-order lists if we are not in compositing mode. |
@@ -848,6 +857,7 @@ void RenderLayer::updateDescendantDependentFlags() |
} |
if (m_visibleContentStatusDirty) { |
+ bool previouslyHasVisibleCOntent = m_hasVisibleContent; |
if (renderer()->style()->visibility() == VISIBLE) |
m_hasVisibleContent = true; |
else { |
@@ -875,6 +885,14 @@ void RenderLayer::updateDescendantDependentFlags() |
} |
} |
m_visibleContentStatusDirty = false; |
+ |
+ // FIXME: We can remove this code once we remove the recursive tree |
+ // walk inside updateGraphicsLayerGeometry. |
+ if (hasVisibleContent() != previouslyHasVisibleCOntent) { |
+ DisableCompositingQueryAsserts disabler; |
+ if (RenderLayer* compositingLayer = enclosingCompositingLayer()) |
+ compositingLayer->compositedLayerMapping()->setNeedsGeometryUpdate(); |
+ } |
} |
} |
@@ -3511,6 +3529,7 @@ CompositedLayerMappingPtr RenderLayer::ensureCompositedLayerMapping() |
{ |
if (!m_compositedLayerMapping) { |
m_compositedLayerMapping = adoptPtr(new CompositedLayerMapping(this)); |
+ m_compositedLayerMapping->setNeedsGeometryUpdate(); |
updateOrRemoveFilterEffectRenderer(); |
@@ -3522,6 +3541,9 @@ CompositedLayerMappingPtr RenderLayer::ensureCompositedLayerMapping() |
void RenderLayer::clearCompositedLayerMapping(bool layerBeingDestroyed) |
{ |
+ if (!layerBeingDestroyed) |
+ m_compositedLayerMapping->setNeedsGeometryUpdate(); |
+ |
m_compositedLayerMapping.clear(); |
if (!layerBeingDestroyed) |
@@ -3877,6 +3899,9 @@ void RenderLayer::styleChanged(StyleDifference diff, const RenderStyle* oldStyle |
// https://code.google.com/p/chromium/issues/detail?id=343756 |
DisableCompositingQueryAsserts disabler; |
+ if (RenderLayer* compositingLayer = enclosingCompositingLayer()) |
+ compositingLayer->compositedLayerMapping()->setNeedsGeometryUpdate(); |
+ |
const RenderStyle* newStyle = renderer()->style(); |
compositor()->updateLayerCompositingState(this, RenderLayerCompositor::UseChickenEggHacks); |