Index: Source/core/rendering/compositing/RenderLayerCompositor.cpp |
diff --git a/Source/core/rendering/compositing/RenderLayerCompositor.cpp b/Source/core/rendering/compositing/RenderLayerCompositor.cpp |
index 7403f2c30a603277816b2ad08f3a19a10a013b13..7ddd8dab981b9c18f15a03f16c36cc14eb02862b 100644 |
--- a/Source/core/rendering/compositing/RenderLayerCompositor.cpp |
+++ b/Source/core/rendering/compositing/RenderLayerCompositor.cpp |
@@ -506,7 +506,7 @@ void RenderLayerCompositor::updateCompositingLayersInternal() |
// scrolling and animation bounds is implemented (crbug.com/252472). |
Vector<RenderLayer*> unclippedDescendants; |
IntRect absoluteDecendantBoundingBox; |
- computeCompositingRequirements(0, updateRoot, &overlapTestRequestMap, recursionData, saw3DTransform, unclippedDescendants, absoluteDecendantBoundingBox); |
+ computeCompositingRequirements(0, updateRoot, overlapTestRequestMap, recursionData, saw3DTransform, unclippedDescendants, absoluteDecendantBoundingBox); |
#if !ASSERT_DISABLED |
assertNeedsRecomputeBoundsBitsCleared(updateRoot); |
#endif |
@@ -934,12 +934,11 @@ void RenderLayerCompositor::addToOverlapMap(OverlapMap& overlapMap, RenderLayer* |
// must be compositing so that its contents render over that child. |
// This implies that its positive z-index children must also be compositing. |
// |
-void RenderLayerCompositor::computeCompositingRequirements(RenderLayer* ancestorLayer, RenderLayer* layer, OverlapMap* overlapMap, CompositingRecursionData& currentRecursionData, bool& descendantHas3DTransform, Vector<RenderLayer*>& unclippedDescendants, IntRect& absoluteDecendantBoundingBox) |
+void RenderLayerCompositor::computeCompositingRequirements(RenderLayer* ancestorLayer, RenderLayer* layer, OverlapMap& overlapMap, CompositingRecursionData& currentRecursionData, bool& descendantHas3DTransform, Vector<RenderLayer*>& unclippedDescendants, IntRect& absoluteDecendantBoundingBox) |
{ |
layer->stackingNode()->updateLayerListsIfNeeded(); |
- if (overlapMap) |
- overlapMap->geometryMap().pushMappingsToAncestor(layer, ancestorLayer); |
+ overlapMap.geometryMap().pushMappingsToAncestor(layer, ancestorLayer); |
// Clear the flag |
layer->setHasCompositingDescendant(false); |
@@ -992,11 +991,11 @@ void RenderLayerCompositor::computeCompositingRequirements(RenderLayer* ancestor |
} |
IntRect absBounds; |
- if (overlapMap && !layer->isRootLayer()) { |
+ if (!layer->isRootLayer()) { |
if (currentRecursionData.m_recomputeLayerBoundsUpdateType == ForceUpdate || layer->needsToRecomputeBounds()) { |
// FIXME: If the absolute bounds didn't change, then we don't need to ForceUpdate descendant RenderLayers. |
currentRecursionData.m_recomputeLayerBoundsUpdateType = ForceUpdate; |
- absBounds = enclosingIntRect(overlapMap->geometryMap().absoluteRect(layer->overlapBounds())); |
+ absBounds = enclosingIntRect(overlapMap.geometryMap().absoluteRect(layer->overlapBounds())); |
layer->setAbsoluteBoundingBox(absBounds); |
} else { |
absBounds = layer->absoluteBoundingBox(); |
@@ -1010,8 +1009,8 @@ void RenderLayerCompositor::computeCompositingRequirements(RenderLayer* ancestor |
absoluteDecendantBoundingBox = absBounds; |
- if (overlapMap && currentRecursionData.m_testingOverlap && !requiresCompositingOrSquashing(directReasons)) |
- overlapCompositingReason = overlapMap->overlapsLayers(absBounds) ? CompositingReasonOverlap : CompositingReasonNone; |
+ if (currentRecursionData.m_testingOverlap && !requiresCompositingOrSquashing(directReasons)) |
+ overlapCompositingReason = overlapMap.overlapsLayers(absBounds) ? CompositingReasonOverlap : CompositingReasonNone; |
reasonsToComposite |= overlapCompositingReason; |
@@ -1031,8 +1030,7 @@ void RenderLayerCompositor::computeCompositingRequirements(RenderLayer* ancestor |
// Here we know that all children and the layer's own contents can blindly paint into |
// this layer's backing, until a descendant is composited. So, we don't need to check |
// for overlap with anything behind this layer. |
- if (overlapMap) |
- overlapMap->beginNewOverlapTestingContext(); |
+ overlapMap.beginNewOverlapTestingContext(); |
// This layer is going to be composited, so children can safely ignore the fact that there's an |
// animation running behind this layer, meaning they can rely on the overlap map testing again. |
childRecursionData.m_testingOverlap = true; |
@@ -1060,36 +1058,33 @@ void RenderLayerCompositor::computeCompositingRequirements(RenderLayer* ancestor |
if (!willBeCompositedOrSquashed) { |
// make layer compositing |
childRecursionData.m_compositingAncestor = layer; |
- if (overlapMap) |
- overlapMap->beginNewOverlapTestingContext(); |
+ overlapMap.beginNewOverlapTestingContext(); |
willBeCompositedOrSquashed = true; |
willHaveForegroundLayer = true; |
// FIXME: temporary solution for the first negative z-index composited child: |
// re-compute the absBounds for the child so that we can add the |
// negative z-index child's bounds to the new overlap context. |
- if (overlapMap) { |
- overlapMap->geometryMap().pushMappingsToAncestor(curNode->layer(), layer); |
- // The above call to computeCompositinRequirements will have already updated this layer's absolute bounding box. |
- overlapMap->beginNewOverlapTestingContext(); |
- ASSERT(!curNode->layer()->needsToRecomputeBounds()); |
- addToOverlapMap(*overlapMap, curNode->layer(), curNode->layer()->absoluteBoundingBox()); |
- overlapMap->finishCurrentOverlapTestingContext(); |
- overlapMap->geometryMap().popMappingsToAncestor(layer); |
- } |
+ overlapMap.geometryMap().pushMappingsToAncestor(curNode->layer(), layer); |
+ // The above call to computeCompositinRequirements will have already updated this layer's absolute bounding box. |
+ overlapMap.beginNewOverlapTestingContext(); |
+ ASSERT(!curNode->layer()->needsToRecomputeBounds()); |
+ addToOverlapMap(overlapMap, curNode->layer(), curNode->layer()->absoluteBoundingBox()); |
+ overlapMap.finishCurrentOverlapTestingContext(); |
+ overlapMap.geometryMap().popMappingsToAncestor(layer); |
} |
} |
} |
} |
- if (overlapMap && willHaveForegroundLayer) { |
+ if (willHaveForegroundLayer) { |
ASSERT(willBeCompositedOrSquashed); |
// A foreground layer effectively is a new backing for all subsequent children, so |
// we don't need to test for overlap with anything behind this. So, we can finish |
// the previous context that was accumulating rects for the negative z-index |
// children, and start with a fresh new empty context. |
- overlapMap->finishCurrentOverlapTestingContext(); |
- overlapMap->beginNewOverlapTestingContext(); |
+ overlapMap.finishCurrentOverlapTestingContext(); |
+ overlapMap.beginNewOverlapTestingContext(); |
// This layer is going to be composited, so children can safely ignore the fact that there's an |
// animation running behind this layer, meaning they can rely on the overlap map testing again |
childRecursionData.m_testingOverlap = true; |
@@ -1120,8 +1115,8 @@ void RenderLayerCompositor::computeCompositingRequirements(RenderLayer* ancestor |
// All layers (even ones that aren't being composited) need to get added to |
// the overlap map. Layers that are not separately composited will paint into their |
// compositing ancestor's backing, and so are still considered for overlap. |
- if (overlapMap && childRecursionData.m_compositingAncestor && !childRecursionData.m_compositingAncestor->isRootLayer()) |
- addToOverlapMap(*overlapMap, layer, absBounds); |
+ if (childRecursionData.m_compositingAncestor && !childRecursionData.m_compositingAncestor->isRootLayer()) |
+ addToOverlapMap(overlapMap, layer, absBounds); |
if (layer->stackingNode()->isStackingContext()) { |
layer->setShouldIsolateCompositedDescendants(childRecursionData.m_hasUnisolatedCompositedBlendingDescendant); |
@@ -1135,13 +1130,11 @@ void RenderLayerCompositor::computeCompositingRequirements(RenderLayer* ancestor |
reasonsToComposite |= subtreeCompositingReasons; |
if (!willBeCompositedOrSquashed && canBeComposited(layer) && requiresCompositingOrSquashing(subtreeCompositingReasons)) { |
childRecursionData.m_compositingAncestor = layer; |
- if (overlapMap) { |
- // FIXME: this context push is effectively a no-op but needs to exist for |
- // now, because the code is designed to push overlap information to the |
- // second-from-top context of the stack. |
- overlapMap->beginNewOverlapTestingContext(); |
- addToOverlapMap(*overlapMap, layer, absoluteDecendantBoundingBox); |
- } |
+ // FIXME: this context push is effectively a no-op but needs to exist for |
+ // now, because the code is designed to push overlap information to the |
+ // second-from-top context of the stack. |
+ overlapMap.beginNewOverlapTestingContext(); |
+ addToOverlapMap(overlapMap, layer, absoluteDecendantBoundingBox); |
willBeCompositedOrSquashed = true; |
} |
@@ -1171,8 +1164,8 @@ void RenderLayerCompositor::computeCompositingRequirements(RenderLayer* ancestor |
if ((!childRecursionData.m_testingOverlap && !isCompositedClippingLayer) || isRunningAcceleratedTransformAnimation(layer->renderer())) |
currentRecursionData.m_testingOverlap = false; |
- if (overlapMap && childRecursionData.m_compositingAncestor == layer && !layer->isRootLayer()) |
- overlapMap->finishCurrentOverlapTestingContext(); |
+ if (childRecursionData.m_compositingAncestor == layer && !layer->isRootLayer()) |
+ overlapMap.finishCurrentOverlapTestingContext(); |
if (layer->isRootLayer()) { |
// The root layer needs to be composited if anything else in the tree is composited. |
@@ -1197,9 +1190,7 @@ void RenderLayerCompositor::computeCompositingRequirements(RenderLayer* ancestor |
layer->parent()->setHasNonCompositedChild(true); |
descendantHas3DTransform |= anyDescendantHas3DTransform || layer->has3DTransform(); |
- |
- if (overlapMap) |
- overlapMap->geometryMap().popMappingsToAncestor(ancestorLayer); |
+ overlapMap.geometryMap().popMappingsToAncestor(ancestorLayer); |
} |
void RenderLayerCompositor::SquashingState::updateSquashingStateForNewMapping(CompositedLayerMappingPtr newCompositedLayerMapping, bool hasNewCompositedLayerMapping, LayoutPoint newOffsetFromAbsoluteForSquashingCLM, RenderLayer* newClippingAncestorForMostRecentMapping) |