Commit 7dc5fd18 authored by ajuma@chromium.org's avatar ajuma@chromium.org

Removing a RenderLayer's CLM should trigger a repaint

This makes RLC::applyUpdateLayerCompositingStateChickenEggHacks
issue a repaint when a RenderLayer gains or loses a CLM.

Review URL: https://codereview.chromium.org/336493004

git-svn-id: svn://svn.chromium.org/blink/trunk@176128 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent d64d3af4
(GraphicsLayer
(bounds 800.00 600.00)
(children 1
(GraphicsLayer
(bounds 800.00 600.00)
(contentsOpaque 1)
(drawsContent 1)
(repaint rects
(rect 8.00 8.00 30.00 30.00)
)
)
)
)
<!DOCTYPE html>
<style>
#square {
background-color: blue;
width: 30px;
height: 30px;
position: relative;
-webkit-backface-visibility: hidden;
}
#testResults {
display: none;
}
</style>
<script>
if (window.testRunner) {
testRunner.dumpAsText();
}
onload = function() {
if (!window.internals)
return;
window.internals.startTrackingRepaints(document);
// Remove the div's only compositing reason. This should trigger a repaint.
document.getElementById("square").style.webkitBackfaceVisibility = "visible";
document.getElementById("layertree").textContent = window.internals.layerTreeAsText(document, internals.LAYER_TREE_INCLUDES_REPAINT_RECTS);
window.internals.stopTrackingRepaints(document);
document.getElementById("testResults").style.display = "block";
}
</script>
<div id="square"></div>
<div id="testResults">
<pre id="layertree"></pre>
</div>
......@@ -42,6 +42,7 @@ CASE 2, The original composited layer is no longer composited, which then also r
(rect 220.00 220.00 100.00 100.00)
(rect 140.00 140.00 100.00 100.00)
(rect 60.00 60.00 100.00 100.00)
(rect 60.00 60.00 100.00 100.00)
)
)
)
......
......@@ -474,8 +474,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)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment