Changeset 283354 in webkit
- Timestamp:
- Sep 30, 2021, 6:23:14 PM (5 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 3 edited
-
ChangeLog (modified) (1 diff)
-
rendering/RenderLayer.cpp (modified) (3 diffs)
-
rendering/RenderLayer.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r283353 r283354 1 2021-09-30 Cathie Chen <cathiechen@igalia.com> 2 3 [Performance] Optimize RenderLayer::clipCrossesPaintingBoundary 4 https://bugs.webkit.org/show_bug.cgi?id=230885 5 6 Reviewed by Simon Fraser. 7 8 In RenderLayer::clipCrossesPaintingBoundary, to check if the layer and its parent layer are in the same 9 compositing layer, it calls enclosingCompositingLayerForRepaint() twice, which need to travel up the layer tree. 10 This patch adds RenderLayer::sharesCompositingLayerForRepaint, to check the repaintTargetForLayer and paintOrderParents. 11 12 * rendering/RenderLayer.cpp: 13 (WebCore::repaintTargetForLayer): 14 (WebCore::RenderLayer::enclosingCompositingLayerForRepaint const): 15 (WebCore::RenderLayer::sharesCompositingLayerForRepaint const): 16 (WebCore::RenderLayer::clipCrossesPaintingBoundary const): 17 * rendering/RenderLayer.h: 18 1 19 2021-09-30 Simon Fraser <simon.fraser@apple.com> 2 20 -
trunk/Source/WebCore/rendering/RenderLayer.cpp
r283340 r283354 1921 1921 } 1922 1922 1923 static RenderLayer* repaintTargetForLayer(const RenderLayer& layer) 1924 { 1925 if (compositedWithOwnBackingStore(layer)) 1926 return const_cast<RenderLayer*>(&layer); 1927 1928 if (layer.paintsIntoProvidedBacking()) 1929 return layer.backingProviderLayer(); 1930 1931 return nullptr; 1932 } 1933 1923 1934 RenderLayer* RenderLayer::enclosingCompositingLayerForRepaint(IncludeSelfOrNot includeSelf) const 1924 1935 { 1925 auto repaintTargetForLayer = [](const RenderLayer& layer) -> RenderLayer* {1926 if (compositedWithOwnBackingStore(layer))1927 return const_cast<RenderLayer*>(&layer);1928 1929 if (layer.paintsIntoProvidedBacking())1930 return layer.backingProviderLayer();1931 1932 return nullptr;1933 };1934 1935 1936 RenderLayer* repaintTarget = nullptr; 1936 1937 if (includeSelf == IncludeSelf && (repaintTarget = repaintTargetForLayer(*this))) … … 1943 1944 1944 1945 return nullptr; 1946 } 1947 1948 bool RenderLayer::sharesCompositingLayerForRepaint(const RenderLayer& otherLayer) const 1949 { 1950 if (repaintTargetForLayer(*this)) 1951 return false; 1952 1953 const RenderLayer* paintParent = paintOrderParent(); 1954 if (&otherLayer == paintParent) 1955 return true; 1956 auto* otherPaintParent = otherLayer.paintOrderParent(); 1957 return paintParent == otherPaintParent || this == otherPaintParent; 1945 1958 } 1946 1959 … … 4454 4467 bool RenderLayer::clipCrossesPaintingBoundary() const 4455 4468 { 4456 return parent()->enclosingPaginationLayer(IncludeCompositedPaginatedLayers) != enclosingPaginationLayer(IncludeCompositedPaginatedLayers) 4457 || parent()->enclosingCompositingLayerForRepaint() != enclosingCompositingLayerForRepaint(); 4469 auto* parentLayer = parent(); 4470 if (!sharesCompositingLayerForRepaint(*parentLayer)) 4471 return true; 4472 4473 return parentLayer->enclosingPaginationLayer(IncludeCompositedPaginatedLayers) != enclosingPaginationLayer(IncludeCompositedPaginatedLayers); 4458 4474 } 4459 4475 -
trunk/Source/WebCore/rendering/RenderLayer.h
r283340 r283354 588 588 RenderLayer* enclosingCompositingLayer(IncludeSelfOrNot = IncludeSelf) const; 589 589 RenderLayer* enclosingCompositingLayerForRepaint(IncludeSelfOrNot = IncludeSelf) const; 590 bool sharesCompositingLayerForRepaint(const RenderLayer& otherLayer) const; 590 591 // Ancestor compositing layer, excluding this. 591 592 RenderLayer* ancestorCompositingLayer() const { return enclosingCompositingLayer(ExcludeSelf); }
Note:
See TracChangeset
for help on using the changeset viewer.