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) |