Modified: trunk/Source/WebCore/ChangeLog (238353 => 238354)
--- trunk/Source/WebCore/ChangeLog 2018-11-17 22:06:56 UTC (rev 238353)
+++ trunk/Source/WebCore/ChangeLog 2018-11-17 22:12:30 UTC (rev 238354)
@@ -1,5 +1,29 @@
2018-11-17 Simon Fraser <simon.fra...@apple.com>
+ Clarify RenderLayerCompositor::hasAnyAdditionalCompositedLayers() and related code.
+ https://bugs.webkit.org/show_bug.cgi?id=191810
+
+ Reviewed by Zalan Bujtas.
+
+ Rename m_compositedLayerCount to m_contentLayersCount and have it track layers other
+ than the RenderView's layer.
+
+ hasAnyAdditionalCompositedLayers() is really about whether we can drop out of compositing
+ because no content layer is composited, and overlays don't require compositing, so
+ rename it.
+
+ * rendering/RenderLayerCompositor.cpp:
+ (WebCore::RenderLayerCompositor::updateCompositingLayers):
+ (WebCore::RenderLayerCompositor::computeCompositingRequirements):
+ (WebCore::RenderLayerCompositor::needsCompositingForContentOrOverlays const):
+ (WebCore::RenderLayerCompositor::layerBecameComposited):
+ (WebCore::RenderLayerCompositor::layerBecameNonComposited):
+ (WebCore::RenderLayerCompositor::layerTreeAsText):
+ (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers const): Deleted.
+ * rendering/RenderLayerCompositor.h:
+
+2018-11-17 Simon Fraser <simon.fra...@apple.com>
+
Rename RenderLayerCompositor::inCompositingMode() to usesCompositing()
https://bugs.webkit.org/show_bug.cgi?id=191808
Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (238353 => 238354)
--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp 2018-11-17 22:06:56 UTC (rev 238353)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp 2018-11-17 22:12:30 UTC (rev 238354)
@@ -632,12 +632,6 @@
updateCompositingLayers(CompositingUpdateType::AfterLayout);
}
-bool RenderLayerCompositor::hasAnyAdditionalCompositedLayers(const RenderLayer& rootLayer) const
-{
- int layerCount = m_compositedLayerCount + page().pageOverlayController().overlayCount();
- return layerCount > (rootLayer.isComposited() ? 1 : 0);
-}
-
void RenderLayerCompositor::cancelCompositingLayerUpdate()
{
m_updateCompositingLayersTimer.stop();
@@ -646,7 +640,7 @@
// Returns true on a successful update.
bool RenderLayerCompositor::updateCompositingLayers(CompositingUpdateType updateType, RenderLayer* updateRoot)
{
- LOG_WITH_STREAM(Compositing, stream << "RenderLayerCompositor " << this << " updateCompositingLayers " << updateType << " root " << updateRoot);
+ LOG_WITH_STREAM(Compositing, stream << "RenderLayerCompositor " << this << " updateCompositingLayers " << updateType << " contentLayersCount " << m_contentLayersCount);
#if ENABLE(TREE_DEBUGGING)
if (compositingLogEnabled())
@@ -739,7 +733,7 @@
appendDocumentOverlayLayers(childList);
// Even when childList is empty, don't drop out of compositing mode if there are
// composited layers that we didn't hit in our traversal (e.g. because of visibility:hidden).
- if (childList.isEmpty() && !hasAnyAdditionalCompositedLayers(*updateRoot))
+ if (childList.isEmpty() && !needsCompositingForContentOrOverlays())
destroyRootLayer();
else if (m_rootContentLayer)
m_rootContentLayer->setChildren(WTFMove(childList));
@@ -766,7 +760,7 @@
if (compositingLogEnabled()) {
LOG(Compositing, "RenderLayerCompositor::updateCompositingLayers - post");
showPaintOrderTree(m_renderView.layer());
- LOG(Compositing, "RenderLayerCompositor::updateCompositingLayers - GraphicsLayers post");
+ LOG(Compositing, "RenderLayerCompositor::updateCompositingLayers - GraphicsLayers post, contentLayersCount %d", m_contentLayersCount);
showGraphicsLayerTree(m_rootContentLayer.get());
}
#endif
@@ -967,7 +961,7 @@
// to be composited, then we can drop out of compositing mode altogether. However, don't drop out of compositing mode
// if there are composited layers that we didn't hit in our traversal (e.g. because of visibility:hidden).
RequiresCompositingData rootLayerQueryData;
- if (layer.isRenderViewLayer() && !childState.subtreeIsCompositing && !requiresCompositingLayer(layer, rootLayerQueryData) && !m_forceCompositingMode && !hasAnyAdditionalCompositedLayers(layer)) {
+ if (layer.isRenderViewLayer() && !childState.subtreeIsCompositing && !requiresCompositingLayer(layer, rootLayerQueryData) && !m_forceCompositingMode && !needsCompositingForContentOrOverlays()) {
// Don't drop out of compositing on iOS, because we may flash. See <rdar://problem/8348337>.
#if !PLATFORM(IOS_FAMILY)
enableCompositingMode(false);
@@ -1240,13 +1234,27 @@
childList.append(WTFMove(overlayHost));
}
+bool RenderLayerCompositor::needsCompositingForContentOrOverlays() const
+{
+ return m_contentLayersCount + page().pageOverlayController().overlayCount();
+}
+
+void RenderLayerCompositor::layerBecameComposited(const RenderLayer& layer)
+{
+ if (&layer != m_renderView.layer())
+ ++m_contentLayersCount;
+}
+
void RenderLayerCompositor::layerBecameNonComposited(const RenderLayer& layer)
{
// Inform the inspector that the given RenderLayer was destroyed.
+ // FIXME: "destroyed" is a misnomer.
InspectorInstrumentation::renderLayerDestroyed(&page(), layer);
- ASSERT(m_compositedLayerCount > 0);
- --m_compositedLayerCount;
+ if (&layer == m_renderView.layer()) {
+ ASSERT(m_contentLayersCount > 0);
+ --m_contentLayersCount;
+ }
}
#if !LOG_DISABLED
@@ -1907,7 +1915,7 @@
// Dump an empty layer tree only if the only composited layer is the main frame's tiled backing,
// so that tests expecting us to drop out of accelerated compositing when there are no layers succeed.
- if (!hasAnyAdditionalCompositedLayers(rootRenderLayer()) && documentUsesTiledBacking() && !(layerTreeBehavior & LayerTreeAsTextIncludeTileCaches))
+ if (!hasContentCompositingLayers() && documentUsesTiledBacking() && !(layerTreeBehavior & LayerTreeAsTextIncludeTileCaches))
layerTreeText = emptyString();
// The true root layer is not included in the dump, so if we want to report
Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.h (238353 => 238354)
--- trunk/Source/WebCore/rendering/RenderLayerCompositor.h 2018-11-17 22:06:56 UTC (rev 238353)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.h 2018-11-17 22:12:30 UTC (rev 238354)
@@ -105,6 +105,9 @@
bool inForcedCompositingMode() const { return m_forceCompositingMode; }
+ // True when some content element other than the root is composited.
+ bool hasContentCompositingLayers() const { return m_contentLayersCount; }
+
// Returns true if the accelerated compositing is enabled
bool hasAcceleratedCompositing() const { return m_hasAcceleratedCompositing; }
@@ -216,7 +219,7 @@
void clearBackingForAllLayers();
- void layerBecameComposited(const RenderLayer&) { ++m_compositedLayerCount; }
+ void layerBecameComposited(const RenderLayer&);
void layerBecameNonComposited(const RenderLayer&);
#if ENABLE(VIDEO)
@@ -386,8 +389,9 @@
bool isRunningTransformAnimation(RenderLayerModelObject&) const;
void appendDocumentOverlayLayers(Vector<Ref<GraphicsLayer>>&);
- bool hasAnyAdditionalCompositedLayers(const RenderLayer& rootLayer) const;
+ bool needsCompositingForContentOrOverlays() const;
+
void ensureRootLayer();
void destroyRootLayer();
@@ -505,7 +509,7 @@
bool m_isTrackingRepaints { false }; // Used for testing.
- int m_compositedLayerCount { 0 };
+ unsigned m_contentLayersCount { 0 };
unsigned m_layersWithTiledBackingCount { 0 };
unsigned m_layerFlushCount { 0 };
unsigned m_compositingUpdateCount { 0 };