Commit 08a6e658 authored by abarth@chromium.org's avatar abarth@chromium.org

Delete chicken/egg compositing geometry updates

After this CL, we don't update the graphics layer geometry incrementally.
Instead, the updates are deferred until its actually time to do a compositing
update. There's a lot of cleanup we can do after this CL lands, but I wanted to
keep this CL small. We can do the cleanup in subsequent CLs.

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

git-svn-id: svn://svn.chromium.org/blink/trunk@170630 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 00f2a4c8
......@@ -430,27 +430,6 @@ void CompositedLayerMapping::updateCompositingReasons()
void CompositedLayerMapping::updateAfterLayout(bool needsFullRepaint, bool isUpdateRoot)
{
RenderLayerCompositor* layerCompositor = compositor();
if (!layerCompositor->compositingLayersNeedRebuild()) {
// Calling updateGraphicsLayerGeometry() here gives incorrect results, because the
// position of this layer's GraphicsLayer depends on the position of our compositing
// ancestor's GraphicsLayer. That cannot be determined until all the descendant
// RenderLayers of that ancestor have been processed via updateLayerPositions().
//
// The solution is to update compositing children of this layer here,
// via updateCompositingChildrenGeometry().
updateCompositedBounds(GraphicsLayerUpdater::ForceUpdate);
layerCompositor->updateCompositingDescendantGeometry(m_owningLayer.stackingNode(), &m_owningLayer);
if (isUpdateRoot) {
updateGraphicsLayerGeometry(GraphicsLayerUpdater::ForceUpdate);
layerCompositor->updateRootLayerPosition();
RenderLayerStackingNode* stackingContainer = m_owningLayer.stackingNode()->enclosingStackingContainerNode();
if (!layerCompositor->compositingLayersNeedRebuild() && stackingContainer && (stackingContainer != m_owningLayer.stackingNode()))
layerCompositor->updateCompositingDescendantGeometry(stackingContainer, stackingContainer->layer());
}
}
if (needsFullRepaint && !paintsIntoCompositedAncestor())
setContentsNeedDisplay();
}
......
......@@ -372,6 +372,7 @@ void RenderLayerCompositor::setNeedsCompositingUpdate(CompositingUpdateType upda
break;
case CompositingUpdateAfterLayout:
m_needsToRecomputeCompositingRequirements = true;
m_needsToUpdateLayerTreeGeometry = true;
break;
case CompositingUpdateOnScroll:
m_needsToRecomputeCompositingRequirements = true; // Overlap can change with scrolling, so need to check for hierarchy updates.
......@@ -1406,40 +1407,6 @@ bool RenderLayerCompositor::parentFrameContentLayers(RenderPart* renderer)
return true;
}
// Recurs down the RenderLayer tree until its finds the compositing descendants of compositingAncestor and updates their geometry.
void RenderLayerCompositor::updateCompositingDescendantGeometry(RenderLayerStackingNode* compositingAncestor, RenderLayer* layer)
{
if (layer->stackingNode() != compositingAncestor) {
if (layer->hasCompositedLayerMapping()) {
CompositedLayerMappingPtr compositedLayerMapping = layer->compositedLayerMapping();
compositedLayerMapping->updateCompositedBounds(GraphicsLayerUpdater::ForceUpdate);
if (layer->reflectionInfo()) {
RenderLayer* reflectionLayer = layer->reflectionInfo()->reflectionLayer();
if (reflectionLayer->hasCompositedLayerMapping())
reflectionLayer->compositedLayerMapping()->updateCompositedBounds(GraphicsLayerUpdater::ForceUpdate);
}
compositedLayerMapping->updateGraphicsLayerGeometry(GraphicsLayerUpdater::ForceUpdate);
return;
}
}
if (layer->reflectionInfo())
updateCompositingDescendantGeometry(compositingAncestor, layer->reflectionInfo()->reflectionLayer());
if (!layer->hasCompositingDescendant())
return;
#if !ASSERT_DISABLED
LayerListMutationDetector mutationChecker(layer->stackingNode());
#endif
RenderLayerStackingNodeIterator iterator(*layer->stackingNode(), AllChildren);
while (RenderLayerStackingNode* curNode = iterator.next())
updateCompositingDescendantGeometry(compositingAncestor, curNode->layer());
}
void RenderLayerCompositor::repaintCompositedLayers()
{
recursiveRepaintLayer(rootRenderLayer());
......
......@@ -112,9 +112,6 @@ public:
// (At the moment, it also has some legacy compatibility hacks.)
void updateLayerCompositingState(RenderLayer*, UpdateLayerCompositingStateOptions = Normal);
// Update the geometry for compositing children of compositingAncestor.
void updateCompositingDescendantGeometry(RenderLayerStackingNode* compositingAncestor, RenderLayer*);
// Whether layer's compositedLayerMapping needs a GraphicsLayer to do clipping by an ancestor (non-stacking-context parent with overflow).
bool clippedByAncestor(const RenderLayer*) const;
// Whether layer's compositedLayerMapping needs a GraphicsLayer to clip z-order children of the given RenderLayer.
......
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