Title: [245375] trunk/Source/WebCore
- Revision
- 245375
- Author
- [email protected]
- Date
- 2019-05-15 22:41:08 -0700 (Wed, 15 May 2019)
Log Message
Avoid a recursive descendants layer walk sometimes
https://bugs.webkit.org/show_bug.cgi?id=197939
Reviewed by Zalan Bujtas.
If a layer got composited post-descendants because it needs to clip, for example, we'd do a recursive
descendant tree walk to add layers to the overlap map. However, all the descendants would already
have contributed to the overlap map if some non-root ancestor was already composited. So we can
skip the addDescendantsToOverlapMapRecursive() if we know, before descendants, whether there's
a non-root composited ancestor.
* rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::CompositingState::hasNonRootCompositedAncestor const):
(WebCore::RenderLayerCompositor::computeCompositingRequirements):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (245374 => 245375)
--- trunk/Source/WebCore/ChangeLog 2019-05-16 05:09:36 UTC (rev 245374)
+++ trunk/Source/WebCore/ChangeLog 2019-05-16 05:41:08 UTC (rev 245375)
@@ -1,5 +1,22 @@
2019-05-15 Simon Fraser <[email protected]>
+ Avoid a recursive descendants layer walk sometimes
+ https://bugs.webkit.org/show_bug.cgi?id=197939
+
+ Reviewed by Zalan Bujtas.
+
+ If a layer got composited post-descendants because it needs to clip, for example, we'd do a recursive
+ descendant tree walk to add layers to the overlap map. However, all the descendants would already
+ have contributed to the overlap map if some non-root ancestor was already composited. So we can
+ skip the addDescendantsToOverlapMapRecursive() if we know, before descendants, whether there's
+ a non-root composited ancestor.
+
+ * rendering/RenderLayerCompositor.cpp:
+ (WebCore::RenderLayerCompositor::CompositingState::hasNonRootCompositedAncestor const):
+ (WebCore::RenderLayerCompositor::computeCompositingRequirements):
+
+2019-05-15 Simon Fraser <[email protected]>
+
Clean up code related to compositing overlap map maintenance
https://bugs.webkit.org/show_bug.cgi?id=197936
Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (245374 => 245375)
--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp 2019-05-16 05:09:36 UTC (rev 245374)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp 2019-05-16 05:41:08 UTC (rev 245375)
@@ -175,6 +175,11 @@
#endif
}
+ bool hasNonRootCompositedAncestor() const
+ {
+ return compositingAncestor && !compositingAncestor->isRenderViewLayer();
+ }
+
RenderLayer* compositingAncestor;
RenderLayer* backingSharingAncestor { nullptr };
RenderLayer* stackingContextAncestor { nullptr };
@@ -855,6 +860,7 @@
RequiresCompositingData queryData;
bool willBeComposited = layer.isComposited();
bool becameCompositedAfterDescendantTraversal = false;
+
if (layer.needsPostLayoutCompositingUpdate() || compositingState.fullPaintOrderTraversalRequired || compositingState.descendantsRequireCompositingUpdate) {
layer.setIndirectCompositingReason(RenderLayer::IndirectCompositingReason::None);
willBeComposited = needsToBeComposited(layer, queryData);
@@ -951,6 +957,7 @@
#endif
bool anyDescendantHas3DTransform = false;
+ bool descendantsAddedToOverlap = currentState.hasNonRootCompositedAncestor();
for (auto* childLayer : layer.negativeZOrderLayers()) {
computeCompositingRequirements(&layer, *childLayer, overlapMap, currentState, backingSharingState, anyDescendantHas3DTransform);
@@ -1048,7 +1055,7 @@
compositingState.updateWithDescendantStateAndLayer(currentState, layer, layerExtent);
bool layerContributesToOverlap = currentState.compositingAncestor && !currentState.compositingAncestor->isRenderViewLayer();
- updateOverlapMap(overlapMap, layer, layerExtent, layerContributesToOverlap, becameCompositedAfterDescendantTraversal);
+ updateOverlapMap(overlapMap, layer, layerExtent, layerContributesToOverlap, becameCompositedAfterDescendantTraversal && !descendantsAddedToOverlap);
// Pop backing/overlap sharing state.
if ((willBeComposited && !layer.isRenderViewLayer()) || currentState.backingSharingAncestor == &layer) {
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes