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 ...@@ -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 220.00 220.00 100.00 100.00)
(rect 140.00 140.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)
(rect 60.00 60.00 100.00 100.00)
) )
) )
) )
......
...@@ -474,8 +474,19 @@ bool RenderLayerCompositor::updateLayerIfViewportConstrained(RenderLayer* layer) ...@@ -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. // See crbug.com/383191 for a list of tests that fail if this method is removed.
void RenderLayerCompositor::applyUpdateLayerCompositingStateChickenEggHacks(RenderLayer* layer, CompositingStateTransitionType compositedLayerUpdate) void RenderLayerCompositor::applyUpdateLayerCompositingStateChickenEggHacks(RenderLayer* layer, CompositingStateTransitionType compositedLayerUpdate)
{ {
if (compositedLayerUpdate != NoCompositingStateChange) if (compositedLayerUpdate != NoCompositingStateChange) {
allocateOrClearCompositedLayerMapping(layer, compositedLayerUpdate); 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) 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