Chromium Code Reviews| Index: Source/core/rendering/RenderLayerBacking.cpp |
| diff --git a/Source/core/rendering/RenderLayerBacking.cpp b/Source/core/rendering/RenderLayerBacking.cpp |
| index 7423b135b4a0d022eb141a62b2df1e6a896f805d..efe780700c9bfe5a8c4ce21709030a5b02e34f94 100644 |
| --- a/Source/core/rendering/RenderLayerBacking.cpp |
| +++ b/Source/core/rendering/RenderLayerBacking.cpp |
| @@ -50,6 +50,7 @@ |
| #include "core/rendering/RenderEmbeddedObject.h" |
| #include "core/rendering/RenderIFrame.h" |
| #include "core/rendering/RenderImage.h" |
| +#include "core/rendering/RenderLayer.h" |
| #include "core/rendering/RenderLayerCompositor.h" |
| #include "core/rendering/RenderVideo.h" |
| #include "core/rendering/RenderView.h" |
| @@ -122,7 +123,7 @@ RenderLayerBacking::~RenderLayerBacking() |
| destroyGraphicsLayers(); |
| } |
| -PassOwnPtr<GraphicsLayer> RenderLayerBacking::createGraphicsLayer(const String& name) |
| +PassOwnPtr<GraphicsLayer> RenderLayerBacking::createGraphicsLayer(const String& name, CompositingReasons reasons) |
| { |
| GraphicsLayerFactory* graphicsLayerFactory = 0; |
| if (Page* page = renderer()->frame()->page()) |
| @@ -135,7 +136,9 @@ PassOwnPtr<GraphicsLayer> RenderLayerBacking::createGraphicsLayer(const String& |
| #else |
| UNUSED_PARAM(name); |
| #endif |
| - |
| + |
| + graphicsLayer->setCompositingReasons(reasons); |
| + |
| return graphicsLayer.release(); |
| } |
| @@ -190,7 +193,7 @@ void RenderLayerBacking::createPrimaryGraphicsLayer() |
| layerName = m_owningLayer->debugName(); |
| #endif |
| - m_graphicsLayer = createGraphicsLayer(layerName); |
| + m_graphicsLayer = createGraphicsLayer(layerName, m_owningLayer->compositingReasons()); |
| if (m_isMainFrameRenderViewLayer) |
| m_graphicsLayer->setContentsOpaque(true); |
| @@ -346,6 +349,13 @@ void RenderLayerBacking::updateAfterWidgetResize() |
| } |
| } |
| +void RenderLayerBacking::updateCompositingReasons() |
| +{ |
| + // All other layers owned by this backing will have the same compositing reason |
| + // for their lifetime, so they are initialized only when created. |
| + m_graphicsLayer->setCompositingReasons(m_owningLayer->compositingReasons()); |
| +} |
| + |
| void RenderLayerBacking::updateAfterLayout(UpdateAfterLayoutFlags flags) |
| { |
| RenderLayerCompositor* layerCompositor = compositor(); |
| @@ -718,6 +728,8 @@ void RenderLayerBacking::updateGraphicsLayerGeometry() |
| updateDrawsContent(isSimpleContainer); |
| updateAfterWidgetResize(); |
| registerScrollingLayers(); |
| + |
| + updateCompositingReasons(); |
| } |
| void RenderLayerBacking::registerScrollingLayers() |
| @@ -837,7 +849,7 @@ bool RenderLayerBacking::updateClippingLayers(bool needsAncestorClip, bool needs |
| if (needsAncestorClip) { |
| if (!m_ancestorClippingLayer) { |
| - m_ancestorClippingLayer = createGraphicsLayer("Ancestor clipping Layer"); |
| + m_ancestorClippingLayer = createGraphicsLayer("Ancestor clipping Layer", CompositingReasonLayerForClip); |
| m_ancestorClippingLayer->setMasksToBounds(true); |
| layersChanged = true; |
| } |
| @@ -849,7 +861,7 @@ bool RenderLayerBacking::updateClippingLayers(bool needsAncestorClip, bool needs |
| if (needsDescendantClip) { |
| if (!m_childContainmentLayer) { |
| - m_childContainmentLayer = createGraphicsLayer("Child clipping Layer"); |
| + m_childContainmentLayer = createGraphicsLayer("Child clipping Layer", CompositingReasonNone); |
|
enne (OOO)
2013/05/22 00:53:47
CompositingReasonLayerForClip?
|
| m_childContainmentLayer->setMasksToBounds(true); |
| layersChanged = true; |
| } |
| @@ -872,7 +884,7 @@ bool RenderLayerBacking::updateOverflowControlsLayers(bool needsHorizontalScroll |
| bool horizontalScrollbarLayerChanged = false; |
| if (needsHorizontalScrollbarLayer) { |
| if (!m_layerForHorizontalScrollbar) { |
| - m_layerForHorizontalScrollbar = createGraphicsLayer("horizontal scrollbar"); |
| + m_layerForHorizontalScrollbar = createGraphicsLayer("horizontal scrollbar", CompositingReasonLayerForScrollbar); |
| horizontalScrollbarLayerChanged = true; |
| } |
| } else if (m_layerForHorizontalScrollbar) { |
| @@ -883,7 +895,7 @@ bool RenderLayerBacking::updateOverflowControlsLayers(bool needsHorizontalScroll |
| bool verticalScrollbarLayerChanged = false; |
| if (needsVerticalScrollbarLayer) { |
| if (!m_layerForVerticalScrollbar) { |
| - m_layerForVerticalScrollbar = createGraphicsLayer("vertical scrollbar"); |
| + m_layerForVerticalScrollbar = createGraphicsLayer("vertical scrollbar", CompositingReasonLayerForScrollbar); |
| verticalScrollbarLayerChanged = true; |
| } |
| } else if (m_layerForVerticalScrollbar) { |
| @@ -894,7 +906,7 @@ bool RenderLayerBacking::updateOverflowControlsLayers(bool needsHorizontalScroll |
| bool scrollCornerLayerChanged = false; |
| if (needsScrollCornerLayer) { |
| if (!m_layerForScrollCorner) { |
| - m_layerForScrollCorner = createGraphicsLayer("scroll corner"); |
| + m_layerForScrollCorner = createGraphicsLayer("scroll corner", CompositingReasonLayerForScrollbar); |
| scrollCornerLayerChanged = true; |
| } |
| } else if (m_layerForScrollCorner) { |
| @@ -971,7 +983,7 @@ bool RenderLayerBacking::updateForegroundLayer(bool needsForegroundLayer) |
| #ifndef NDEBUG |
| layerName = m_owningLayer->debugName() + " (foreground)"; |
| #endif |
| - m_foregroundLayer = createGraphicsLayer(layerName); |
| + m_foregroundLayer = createGraphicsLayer(layerName, CompositingReasonLayerForForeground); |
| m_foregroundLayer->setDrawsContent(true); |
| m_foregroundLayer->setPaintingPhase(GraphicsLayerPaintForeground); |
| layerChanged = true; |
| @@ -997,7 +1009,7 @@ bool RenderLayerBacking::updateBackgroundLayer(bool needsBackgroundLayer) |
| #ifndef NDEBUG |
| layerName = m_owningLayer->debugName() + " (background)"; |
| #endif |
| - m_backgroundLayer = createGraphicsLayer(layerName); |
| + m_backgroundLayer = createGraphicsLayer(layerName, CompositingReasonNone); |
|
enne (OOO)
2013/05/22 00:53:47
Is there a better reason than None here?
|
| m_backgroundLayer->setDrawsContent(true); |
| m_backgroundLayer->setAnchorPoint(FloatPoint3D()); |
| m_backgroundLayer->setPaintingPhase(GraphicsLayerPaintBackground); |
| @@ -1009,7 +1021,7 @@ bool RenderLayerBacking::updateBackgroundLayer(bool needsBackgroundLayer) |
| #ifndef NDEBUG |
| layerName = m_owningLayer->debugName() + " (contents containment)"; |
| #endif |
| - m_contentsContainmentLayer = createGraphicsLayer(layerName); |
| + m_contentsContainmentLayer = createGraphicsLayer(layerName, CompositingReasonNone); |
|
enne (OOO)
2013/05/22 00:53:47
CompositingReasonLayerForClip?
|
| layerChanged = true; |
| } |
| } else { |
| @@ -1033,7 +1045,7 @@ bool RenderLayerBacking::updateMaskLayer(bool needsMaskLayer) |
| bool layerChanged = false; |
| if (needsMaskLayer) { |
| if (!m_maskLayer) { |
| - m_maskLayer = createGraphicsLayer("Mask"); |
| + m_maskLayer = createGraphicsLayer("Mask", CompositingReasonNone); |
|
enne (OOO)
2013/05/22 00:53:47
Is there a better reason than None here?
|
| m_maskLayer->setDrawsContent(true); |
| m_maskLayer->setPaintingPhase(GraphicsLayerPaintMask); |
| layerChanged = true; |
| @@ -1057,12 +1069,12 @@ bool RenderLayerBacking::updateScrollingLayers(bool needsScrollingLayers) |
| if (needsScrollingLayers) { |
| if (!m_scrollingLayer) { |
| // Outer layer which corresponds with the scroll view. |
| - m_scrollingLayer = createGraphicsLayer("Scrolling container"); |
| + m_scrollingLayer = createGraphicsLayer("Scrolling container", CompositingReasonLayerForDescendantClip); |
| m_scrollingLayer->setDrawsContent(false); |
| m_scrollingLayer->setMasksToBounds(true); |
| // Inner layer which renders the content that scrolls. |
| - m_scrollingContentsLayer = createGraphicsLayer("Scrolled Contents"); |
| + m_scrollingContentsLayer = createGraphicsLayer("Scrolled Contents", CompositingReasonLayerForScrollingContainer); |
| m_scrollingContentsLayer->setDrawsContent(true); |
| GraphicsLayerPaintingPhase paintPhase = GraphicsLayerPaintOverflowContents | GraphicsLayerPaintCompositedScroll; |
| if (!m_foregroundLayer) |