| Index: Source/core/rendering/compositing/RenderLayerCompositor.cpp
|
| diff --git a/Source/core/rendering/compositing/RenderLayerCompositor.cpp b/Source/core/rendering/compositing/RenderLayerCompositor.cpp
|
| index 81603f801f981f1f2d05c5322fefc8b5cb3b13c7..6233c5d66ea752ae4e554dce5ac58f73560d6328 100644
|
| --- a/Source/core/rendering/compositing/RenderLayerCompositor.cpp
|
| +++ b/Source/core/rendering/compositing/RenderLayerCompositor.cpp
|
| @@ -480,8 +480,19 @@ bool RenderLayerCompositor::updateLayerIfViewportConstrained(RenderLayer* layer)
|
| // See crbug.com/383191 for a list of tests that fail if this method is removed.
|
| void RenderLayerCompositor::applyUpdateLayerCompositingStateChickenEggHacks(RenderLayer* layer, CompositingStateTransitionType compositedLayerUpdate)
|
| {
|
| - if (compositedLayerUpdate != NoCompositingStateChange)
|
| - allocateOrClearCompositedLayerMapping(layer, compositedLayerUpdate);
|
| + if (compositedLayerUpdate != NoCompositingStateChange) {
|
| + bool compositedLayerMappingChanged = allocateOrClearCompositedLayerMapping(layer, compositedLayerUpdate);
|
| + if (compositedLayerMappingChanged) {
|
| + // Repaint rects can only be computed for layers that have already been attached to the
|
| + // render tree, but a chicken-egg compositing update can happen before |layer| gets
|
| + // attached. Since newly-created renderers don't get parented until they are attached
|
| + // (see RenderTreeBuilder::createRendererForElementIfNeeded), we can check for attachment
|
| + // by checking for a parent.
|
| + if (layer->parent())
|
| + layer->repainter().computeRepaintRectsIncludingNonCompositingDescendants();
|
| + repaintOnCompositingChange(layer);
|
| + }
|
| + }
|
| }
|
|
|
| void RenderLayerCompositor::updateLayerCompositingState(RenderLayer* layer, UpdateLayerCompositingStateOptions options)
|
|
|