Chromium Code Reviews| Index: Source/core/rendering/RenderLayerCompositor.cpp |
| diff --git a/Source/core/rendering/RenderLayerCompositor.cpp b/Source/core/rendering/RenderLayerCompositor.cpp |
| index 8dfcfe82615d49e2c7f06891b70e7eb740f02b28..3fb29cc28f77e51984e60f9802f347c6b62d04d6 100644 |
| --- a/Source/core/rendering/RenderLayerCompositor.cpp |
| +++ b/Source/core/rendering/RenderLayerCompositor.cpp |
| @@ -1087,6 +1087,22 @@ void RenderLayerCompositor::rebuildCompositingLayerTree(RenderLayer* layer, Vect |
| // If a negative z-order child is compositing, we get a foreground layer which needs to get parented. |
| if (layerBacking && layerBacking->foregroundLayer()) |
| childList.append(layerBacking->foregroundLayer()); |
| + |
| + // To avoid having to make the fixed root background layer fixed positioned to |
| + // stay put, we position it in the layer tree as follows: |
| + // |
| + // + Overflow controls host |
| + // + Frame clip |
| + // + (Fixed root background) <-- Here. |
| + // + Frame scroll |
| + // + Root content layer |
| + // + Scrollbars |
| + // |
| + // That is, it needs to be the first child of the frame clip, the sibling of |
| + // the frame scroll layer. The compositor does not own the background layer, it |
| + // just positions it (like the foreground layer above). |
| + if (layerBacking && layerBacking->backgroundLayer()) |
| + m_clipLayer->addChildBelow(layerBacking->backgroundLayer(), m_scrollLayer.get()); |
|
jamesr
2013/06/13 19:48:47
why is this here? the code above and below this po
|
| } |
| if (Vector<RenderLayer*>* normalFlowList = layer->normalFlowList()) { |
| @@ -1183,9 +1199,6 @@ void RenderLayerCompositor::frameViewDidScroll() |
| } |
| m_scrollLayer->setPosition(FloatPoint(-scrollPosition.x(), -scrollPosition.y())); |
| - |
| - if (GraphicsLayer* fixedBackgroundLayer = fixedRootBackgroundLayer()) |
| - fixedBackgroundLayer->setPosition(IntPoint(frameView->scrollOffsetForFixedPosition())); |
| } |
| void RenderLayerCompositor::frameViewDidLayout() |
| @@ -1194,7 +1207,8 @@ void RenderLayerCompositor::frameViewDidLayout() |
| void RenderLayerCompositor::rootFixedBackgroundsChanged() |
| { |
| - // FIXME: Implement when root fixed background layer is implemented. |
| + if (supportsFixedRootBackgroundCompositing()) |
| + setCompositingLayersNeedRebuild(); |
|
jamesr
2013/06/13 19:48:47
this seems really heavyweight. does promoting due
|
| } |
| void RenderLayerCompositor::scrollingLayerDidChange(RenderLayer* layer) |
| @@ -1220,9 +1234,13 @@ String RenderLayerCompositor::layerTreeAsText(LayerTreeFlags flags) |
| if (flags & LayerTreeFlagsIncludePaintingPhases) |
| layerTreeBehavior |= LayerTreeAsTextIncludePaintingPhases; |
| + GraphicsLayer* rootLayer = m_rootContentLayer.get(); |
| + if (flags & LayerTreeFlagsIncludeRootLayer) |
| + rootLayer = rootGraphicsLayer(); |
| + |
| // We skip dumping the scroll and clip layers to keep layerTreeAsText output |
| // similar between platforms. |
| - String layerTreeText = m_rootContentLayer->layerTreeAsText(layerTreeBehavior); |
| + String layerTreeText = rootLayer->layerTreeAsText(layerTreeBehavior); |
| // The true root layer is not included in the dump, so if we want to report |
| // its repaint rects, they must be included here. |
| @@ -2101,7 +2119,10 @@ void RenderLayerCompositor::paintContents(const GraphicsLayer* graphicsLayer, Gr |
| bool RenderLayerCompositor::supportsFixedRootBackgroundCompositing() const |
| { |
| - return false; // FIXME: Return true if this is supported when implemented. |
| + return m_renderView->layer() |
| + && m_renderView->layer()->backing() |
| + && m_renderView->document()->settings() |
| + && m_renderView->document()->settings()->acceleratedCompositingForFixedRootBackgroundEnabled(); |
|
jamesr
2013/06/13 19:48:47
why isn't this setting stashed along with the othe
|
| } |
| bool RenderLayerCompositor::needsFixedRootBackgroundLayer(const RenderLayer* layer) const |
| @@ -2112,19 +2133,6 @@ bool RenderLayerCompositor::needsFixedRootBackgroundLayer(const RenderLayer* lay |
| return supportsFixedRootBackgroundCompositing() && m_renderView->rootBackgroundIsEntirelyFixed(); |
| } |
| -GraphicsLayer* RenderLayerCompositor::fixedRootBackgroundLayer() const |
| -{ |
| - // Get the fixed root background from the RenderView layer's backing. |
| - RenderLayer* viewLayer = m_renderView->layer(); |
| - if (!viewLayer) |
| - return 0; |
| - |
| - if (viewLayer->isComposited() && viewLayer->backing()->backgroundLayerPaintsFixedRootBackground()) |
| - return viewLayer->backing()->backgroundLayer(); |
| - |
| - return 0; |
| -} |
| - |
| static void resetTrackedRepaintRectsRecursive(GraphicsLayer* graphicsLayer) |
| { |
| if (!graphicsLayer) |