Chromium Code Reviews| Index: Source/core/rendering/compositing/RenderLayerCompositor.cpp |
| diff --git a/Source/core/rendering/compositing/RenderLayerCompositor.cpp b/Source/core/rendering/compositing/RenderLayerCompositor.cpp |
| index 0286ae96c52aecff0296a611633638bc19c67cf0..248cb4a44ec1a087333b6a18fdadd7fe96a00086 100644 |
| --- a/Source/core/rendering/compositing/RenderLayerCompositor.cpp |
| +++ b/Source/core/rendering/compositing/RenderLayerCompositor.cpp |
| @@ -51,7 +51,6 @@ |
| #include "core/rendering/RenderApplet.h" |
| #include "core/rendering/RenderEmbeddedObject.h" |
| #include "core/rendering/RenderFullScreen.h" |
| -#include "core/rendering/RenderGeometryMap.h" |
| #include "core/rendering/RenderIFrame.h" |
| #include "core/rendering/RenderLayerStackingNode.h" |
| #include "core/rendering/RenderLayerStackingNodeIterator.h" |
| @@ -112,7 +111,6 @@ class RenderLayerCompositor::OverlapMap { |
| WTF_MAKE_NONCOPYABLE(OverlapMap); |
| public: |
| OverlapMap() |
| - : m_geometryMap(UseTransforms) |
| { |
| // Begin by assuming the root layer will be composited so that there |
| // is something on the stack. The root layer should also never get a |
| @@ -155,18 +153,14 @@ public: |
| m_overlapStack.removeLast(); |
| } |
| - RenderGeometryMap& geometryMap() { return m_geometryMap; } |
| - |
| private: |
| Vector<OverlapMapContainer> m_overlapStack; |
| - RenderGeometryMap m_geometryMap; |
| }; |
| struct CompositingRecursionData { |
| - CompositingRecursionData(RenderLayer* compAncestor, RenderLayer* mostRecentCompositedLayer, RenderLayerCompositor::BoundsUpdateType boundsUpdateType, bool testOverlap) |
| + CompositingRecursionData(RenderLayer* compAncestor, RenderLayer* mostRecentCompositedLayer, bool testOverlap) |
| : m_compositingAncestor(compAncestor) |
| , m_mostRecentCompositedLayer(mostRecentCompositedLayer) |
| - , m_recomputeLayerBoundsUpdateType(boundsUpdateType) |
| , m_subtreeIsCompositing(false) |
| , m_hasUnisolatedCompositedBlendingDescendant(false) |
| , m_testingOverlap(testOverlap) |
| @@ -179,7 +173,6 @@ struct CompositingRecursionData { |
| CompositingRecursionData(const CompositingRecursionData& other) |
| : m_compositingAncestor(other.m_compositingAncestor) |
| , m_mostRecentCompositedLayer(other.m_mostRecentCompositedLayer) |
| - , m_recomputeLayerBoundsUpdateType(other.m_recomputeLayerBoundsUpdateType) |
| , m_subtreeIsCompositing(other.m_subtreeIsCompositing) |
| , m_hasUnisolatedCompositedBlendingDescendant(other.m_hasUnisolatedCompositedBlendingDescendant) |
| , m_testingOverlap(other.m_testingOverlap) |
| @@ -191,7 +184,6 @@ struct CompositingRecursionData { |
| RenderLayer* m_compositingAncestor; |
| RenderLayer* m_mostRecentCompositedLayer; // in paint order regardless of hierarchy. |
| - RenderLayerCompositor::BoundsUpdateType m_recomputeLayerBoundsUpdateType; |
| bool m_subtreeIsCompositing; |
| bool m_hasUnisolatedCompositedBlendingDescendant; |
| bool m_testingOverlap; |
| @@ -208,7 +200,7 @@ RenderLayerCompositor::RenderLayerCompositor(RenderView& renderView) |
| , m_needsToRecomputeCompositingRequirements(false) |
| , m_needsToUpdateLayerTreeGeometry(false) |
| , m_pendingUpdateType(GraphicsLayerUpdater::DoNotForceUpdate) |
| - , m_recomputeLayerBoundsUpdateType(DoNotForceUpdate) |
| + , m_pendingPropertyUpdateType(CompositingPropertyUpdater::DoNotForceUpdate) |
| , m_compositing(false) |
| , m_compositingLayersNeedRebuild(false) |
| , m_forceCompositingMode(false) |
| @@ -374,7 +366,7 @@ void RenderLayerCompositor::setNeedsCompositingUpdate(CompositingUpdateType upda |
| // FIXME: Ideally we'd be smarter about tracking dirtiness and wouldn't need a ForceUpdate here. |
| m_pendingUpdateType = GraphicsLayerUpdater::ForceUpdate; |
| // FIXME: Ideally we'd be smarter about tracking dirtiness and wouldn't need a ForceUpdate here. |
| - m_recomputeLayerBoundsUpdateType = ForceUpdate; |
| + m_pendingPropertyUpdateType = CompositingPropertyUpdater::ForceUpdate; |
| break; |
| case CompositingUpdateOnScroll: |
| m_needsToRecomputeCompositingRequirements = true; // Overlap can change with scrolling, so need to check for hierarchy updates. |
| @@ -382,14 +374,14 @@ void RenderLayerCompositor::setNeedsCompositingUpdate(CompositingUpdateType upda |
| // FIXME: Ideally we'd be smarter about tracking dirtiness and wouldn't need a ForceUpdate here. |
| m_pendingUpdateType = GraphicsLayerUpdater::ForceUpdate; |
| // FIXME: Ideally we'd be smarter about tracking dirtiness and wouldn't need a ForceUpdate here. |
| - m_recomputeLayerBoundsUpdateType = ForceUpdate; |
| + m_pendingPropertyUpdateType = CompositingPropertyUpdater::ForceUpdate; |
| break; |
| case CompositingUpdateOnCompositedScroll: |
| m_needsToUpdateLayerTreeGeometry = true; |
| // FIXME: Ideally we'd be smarter about tracking dirtiness and wouldn't need a ForceUpdate here. |
| m_pendingUpdateType = GraphicsLayerUpdater::ForceUpdate; |
| // FIXME: Ideally we'd be smarter about tracking dirtiness and wouldn't need a ForceUpdate here. |
| - m_recomputeLayerBoundsUpdateType = ForceUpdate; |
| + m_pendingPropertyUpdateType = CompositingPropertyUpdater::ForceUpdate; |
| break; |
| case CompositingUpdateAfterCanvasContextChange: |
| m_needsToUpdateLayerTreeGeometry = true; |
| @@ -492,10 +484,16 @@ void RenderLayerCompositor::updateCompositingLayersInternal() |
| if (needCompositingRequirementsUpdate) { |
| // Go through the layers in presentation order, so that we can compute which RenderLayers need compositing layers. |
| // FIXME: we could maybe do this and the hierarchy udpate in one pass, but the parenting logic would be more complex. |
| - CompositingRecursionData recursionData(updateRoot, 0, m_recomputeLayerBoundsUpdateType, true); |
| - m_recomputeLayerBoundsUpdateType = DoNotForceUpdate; |
| + CompositingRecursionData recursionData(updateRoot, 0, true); |
| bool layersChanged = false; |
| bool saw3DTransform = false; |
| + |
| + { |
| + TRACE_EVENT0("blink_rendering", "CompositingPropertyUpdater::updateAncestorDependentProperties"); |
| + CompositingPropertyUpdater().updateAncestorDependentProperties(updateRoot, m_pendingPropertyUpdateType); |
|
ojan
2014/03/27 01:06:42
Can we assert after this that all the dirty bits h
abarth-chromium
2014/03/27 01:40:11
Sure.
|
| + m_pendingPropertyUpdateType = CompositingPropertyUpdater::DoNotForceUpdate; |
| + } |
| + |
| { |
| TRACE_EVENT0("blink_rendering", "RenderLayerCompositor::computeCompositingRequirements"); |
| OverlapMap overlapTestRequestMap; |
| @@ -938,8 +936,6 @@ void RenderLayerCompositor::computeCompositingRequirements(RenderLayer* ancestor |
| { |
| layer->stackingNode()->updateLayerListsIfNeeded(); |
| - overlapMap.geometryMap().pushMappingsToAncestor(layer, ancestorLayer); |
| - |
| // Clear the flag |
| layer->setHasCompositingDescendant(false); |
| layer->setHasNonCompositedChild(false); |
| @@ -992,14 +988,7 @@ void RenderLayerCompositor::computeCompositingRequirements(RenderLayer* ancestor |
| IntRect absBounds; |
| 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())); |
| - layer->setAbsoluteBoundingBox(absBounds); |
| - } else { |
| - absBounds = layer->absoluteBoundingBox(); |
| - } |
| + absBounds = layer->ancestorDependentProperties().absoluteBoundingBox; |
| // Setting the absBounds to 1x1 instead of 0x0 makes very little sense, |
| // but removing this code will make JSGameBench sad. |
| // See https://codereview.chromium.org/13912020/ |
| @@ -1065,13 +1054,10 @@ void RenderLayerCompositor::computeCompositingRequirements(RenderLayer* ancestor |
| // 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. |
| - 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()); |
| + addToOverlapMap(overlapMap, curNode->layer(), curNode->layer()->ancestorDependentProperties().absoluteBoundingBox); |
| overlapMap.finishCurrentOverlapTestingContext(); |
| - overlapMap.geometryMap().popMappingsToAncestor(layer); |
| } |
| } |
| } |
| @@ -1142,7 +1128,6 @@ void RenderLayerCompositor::computeCompositingRequirements(RenderLayer* ancestor |
| if (layer->reflectionInfo()) { |
| // FIXME: Shouldn't we call computeCompositingRequirements to handle a reflection overlapping with another renderer? |
| RenderLayer* reflectionLayer = layer->reflectionInfo()->reflectionLayer(); |
| - reflectionLayer->clearNeedsToRecomputeBounds(); |
| CompositingReasons reflectionCompositingReason = willBeCompositedOrSquashed ? CompositingReasonReflectionOfCompositedParent : CompositingReasonNone; |
| reflectionLayer->setCompositingReasons(reflectionLayer->compositingReasons() | reflectionCompositingReason); |
| } |
| @@ -1190,7 +1175,6 @@ void RenderLayerCompositor::computeCompositingRequirements(RenderLayer* ancestor |
| layer->parent()->setHasNonCompositedChild(true); |
| descendantHas3DTransform |= anyDescendantHas3DTransform || layer->has3DTransform(); |
| - overlapMap.geometryMap().popMappingsToAncestor(ancestorLayer); |
| } |
| void RenderLayerCompositor::SquashingState::updateSquashingStateForNewMapping(CompositedLayerMappingPtr newCompositedLayerMapping, bool hasNewCompositedLayerMapping, LayoutPoint newOffsetFromAbsoluteForSquashingCLM, RenderLayer* newClippingAncestorForMostRecentMapping) |