Index: third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.cpp |
diff --git a/third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.cpp b/third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.cpp |
index 1ff1e8c85c2f33a64943b6c2fa0a2e7927690f05..0b22def19b99aaf6fb57189ab576f162ebd46589 100644 |
--- a/third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.cpp |
+++ b/third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.cpp |
@@ -353,6 +353,16 @@ static void forceRecomputeVisualRectsIncludingNonCompositingDescendants( |
} |
} |
+GraphicsLayer* PaintLayerCompositor::parentForContentLayers() const { |
+ if (m_rootContentLayer) |
+ return m_rootContentLayer.get(); |
+ |
+ DCHECK(RuntimeEnabledFeatures::rootLayerScrollingEnabled()); |
+ // Iframe content layers will be connected by the parent frame using |
+ // attachFrameContentLayersToIframeLayer. |
+ return isMainFrame() ? visualViewport().scrollLayer() : nullptr; |
+} |
+ |
void PaintLayerCompositor::updateIfNeeded() { |
CompositingUpdateType updateType = m_pendingUpdateType; |
m_pendingUpdateType = CompositingUpdateNone; |
@@ -444,8 +454,9 @@ void PaintLayerCompositor::updateIfNeeded() { |
} |
if (!childList.isEmpty()) { |
- CHECK(m_rootContentLayer && m_compositing); |
- m_rootContentLayer->setChildren(childList); |
+ CHECK(m_compositing); |
+ if (GraphicsLayer* contentParent = parentForContentLayers()) |
+ contentParent->setChildren(childList); |
} |
applyOverlayFullscreenVideoAdjustmentIfNeeded(); |
@@ -691,7 +702,7 @@ void PaintLayerCompositor::frameViewScrollbarsExistenceDidChange() { |
} |
void PaintLayerCompositor::rootFixedBackgroundsChanged() { |
- if (!supportsFixedRootBackgroundCompositing()) |
+ if (!supportsFixedRootBackgroundCompositing() || !m_containerLayer) |
return; |
// To avoid having to make the fixed root background layer fixed positioned to |
@@ -723,13 +734,16 @@ std::unique_ptr<JSONObject> PaintLayerCompositor::layerTreeAsJSON( |
ASSERT(lifecycle().state() >= DocumentLifecycle::PaintInvalidationClean || |
m_layoutView.frameView()->shouldThrottleRendering()); |
- if (!m_rootContentLayer) |
- return nullptr; |
- |
// We skip dumping the scroll and clip layers to keep layerTreeAsText output |
// similar between platforms (unless we explicitly request dumping from the |
// root. |
GraphicsLayer* rootLayer = m_rootContentLayer.get(); |
+ if (!rootLayer) |
+ rootLayer = rootGraphicsLayer(); |
+ |
+ if (!rootLayer) |
+ return nullptr; |
+ |
if (flags & LayerTreeIncludesRootLayer) { |
if (isMainFrame()) { |
while (rootLayer->parent()) |
@@ -767,6 +781,7 @@ bool PaintLayerCompositor::attachFrameContentLayersToIframeLayer( |
if (!layer->hasCompositedLayerMapping()) |
return false; |
+ DisableCompositingQueryAsserts disabler; |
layer->compositedLayerMapping()->setSublayers( |
GraphicsLayerVector(1, innerCompositor->rootGraphicsLayer())); |
return true; |
@@ -795,11 +810,11 @@ PaintLayer* PaintLayerCompositor::rootLayer() const { |
} |
GraphicsLayer* PaintLayerCompositor::rootGraphicsLayer() const { |
- return m_overflowControlsHostLayer.get(); |
-} |
- |
-GraphicsLayer* PaintLayerCompositor::frameScrollLayer() const { |
- return m_scrollLayer.get(); |
+ if (m_overflowControlsHostLayer) |
+ return m_overflowControlsHostLayer.get(); |
+ if (CompositedLayerMapping* clm = rootLayer()->compositedLayerMapping()) |
+ return clm->childForSuperlayers(); |
+ return nullptr; |
} |
GraphicsLayer* PaintLayerCompositor::scrollLayer() const { |
@@ -809,14 +824,6 @@ GraphicsLayer* PaintLayerCompositor::scrollLayer() const { |
return nullptr; |
} |
-GraphicsLayer* PaintLayerCompositor::containerLayer() const { |
- return m_containerLayer.get(); |
-} |
- |
-GraphicsLayer* PaintLayerCompositor::rootContentLayer() const { |
- return m_rootContentLayer.get(); |
-} |
- |
void PaintLayerCompositor::setIsInWindow(bool isInWindow) { |
if (!staleInCompositingMode()) |
return; |
@@ -1121,7 +1128,11 @@ void PaintLayerCompositor::ensureRootLayer() { |
if (isMainFrame()) |
visualViewport().createLayerTree(); |
- if (!m_rootContentLayer) { |
+ // When RLS is enabled, none of the PLC GraphicsLayers exist. |
+ bool shouldCreateOwnLayers = |
+ !RuntimeEnabledFeatures::rootLayerScrollingEnabled(); |
+ |
+ if (shouldCreateOwnLayers && !m_rootContentLayer) { |
m_rootContentLayer = GraphicsLayer::create(this); |
IntRect overflowRect = m_layoutView.pixelSnappedLayoutOverflowRect(); |
m_rootContentLayer->setSize( |
@@ -1131,7 +1142,7 @@ void PaintLayerCompositor::ensureRootLayer() { |
DOMNodeIds::idForNode(m_layoutView.node())); |
} |
- if (!m_overflowControlsHostLayer) { |
+ if (shouldCreateOwnLayers && !m_overflowControlsHostLayer) { |
ASSERT(!m_scrollLayer); |
ASSERT(!m_containerLayer); |
@@ -1140,9 +1151,6 @@ void PaintLayerCompositor::ensureRootLayer() { |
// in updateClippingOnCompositorLayers. |
m_overflowControlsHostLayer = GraphicsLayer::create(this); |
m_containerLayer = GraphicsLayer::create(this); |
- |
- // TODO(skobes): When root layer scrolling is enabled, we should not even |
- // create m_scrollLayer or most of the layers in PLC. |
m_scrollLayer = GraphicsLayer::create(this); |
if (ScrollingCoordinator* scrollingCoordinator = |
this->scrollingCoordinator()) |
@@ -1170,9 +1178,6 @@ void PaintLayerCompositor::ensureRootLayer() { |
} |
void PaintLayerCompositor::destroyRootLayer() { |
- if (!m_rootContentLayer) |
- return; |
- |
detachRootLayer(); |
if (m_layerForHorizontalScrollbar) { |
@@ -1212,9 +1217,6 @@ void PaintLayerCompositor::destroyRootLayer() { |
} |
void PaintLayerCompositor::attachRootLayer() { |
- if (!m_rootContentLayer) |
- return; |
- |
// In Slimming Paint v2, PaintArtifactCompositor is responsible for the root |
// layer. |
if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) |
@@ -1234,7 +1236,7 @@ void PaintLayerCompositor::attachRootLayer() { |
} |
void PaintLayerCompositor::detachRootLayer() { |
- if (!m_rootContentLayer || m_rootLayerAttachment == RootLayerUnattached) |
+ if (m_rootLayerAttachment == RootLayerUnattached) |
return; |
switch (m_rootLayerAttachment) { |
@@ -1244,8 +1246,6 @@ void PaintLayerCompositor::detachRootLayer() { |
// frame's layoutObject in the parent document. |
if (m_overflowControlsHostLayer) |
m_overflowControlsHostLayer->removeFromParent(); |
- else |
- m_rootContentLayer->removeFromParent(); |
if (HTMLFrameOwnerElement* ownerElement = |
m_layoutView.document().localOwner()) |