Changeset 244209 in webkit
- Timestamp:
- Apr 11, 2019 10:28:50 PM (5 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r244208 r244209 1 2019-04-11 Simon Fraser <simon.fraser@apple.com> 2 3 Avoid doing positioned scrolling tree node work for layers not inside overflow:scroll 4 https://bugs.webkit.org/show_bug.cgi?id=196848 5 6 Reviewed by Zalan Bujtas. 7 8 Maintain a bit on RenderLayer which says if a layer has a composited scrolling ancestor 9 in the layer tree. We only need to do work related to making positioned scrolling tree nodes 10 for layers which are layer tree descendants of overflow:scroll. 11 12 * rendering/RenderLayer.cpp: 13 (WebCore::RenderLayer::RenderLayer): 14 (WebCore::RenderLayer::updateLayerPositions): 15 (WebCore::outputPaintOrderTreeLegend): 16 (WebCore::outputPaintOrderTreeRecursive): 17 * rendering/RenderLayer.h: 18 * rendering/RenderLayerCompositor.cpp: 19 (WebCore::RenderLayerCompositor::requiresCompositingForPosition const): 20 (WebCore::RenderLayerCompositor::requiresCompositingForIndirectReason const): 21 (WebCore::RenderLayerCompositor::isViewportConstrainedFixedOrStickyLayer const): 22 (WebCore::RenderLayerCompositor::fixedLayerIntersectsViewport const): 23 (WebCore::RenderLayerCompositor::computeCoordinatedPositioningForLayer const): 24 1 25 2019-04-11 Zalan Bujtas <zalan@apple.com> 2 26 -
trunk/Source/WebCore/rendering/RenderLayer.cpp
r244141 r244209 292 292 , m_has3DTransformedDescendant(false) 293 293 , m_hasCompositingDescendant(false) 294 , m_hasCompositedScrollingAncestor(false) 294 295 , m_hasTransformedAncestor(false) 295 296 , m_has3DTransformedAncestor(false) … … 912 913 m_hasTransformedAncestor = flags.contains(SeenTransformedLayer); 913 914 m_has3DTransformedAncestor = flags.contains(Seen3DTransformedLayer); 915 setHasCompositedScrollingAncestor(flags.contains(SeenCompositedScrollingLayer)); 914 916 915 917 // Update the reflection's position and size. … … 927 929 flags.add(Seen3DTransformedLayer); 928 930 } 931 932 if (hasCompositedScrollableOverflow()) 933 flags.add(SeenCompositedScrollingLayer); 929 934 930 935 for (RenderLayer* child = firstChild(); child; child = child->nextSibling()) … … 940 945 } 941 946 942 if (renderer().is OutOfFlowPositioned() && renderer().style().position() == PositionType::Fixed&& renderer().settings().acceleratedCompositingForFixedPositionEnabled()) {947 if (renderer().isFixedPositioned() && renderer().settings().acceleratedCompositingForFixedPositionEnabled()) { 943 948 bool intersectsViewport = compositor().fixedLayerIntersectsViewport(*this); 944 949 if (intersectsViewport != m_isFixedIntersectingViewport) { … … 6751 6756 { 6752 6757 stream.nextLine(); 6753 stream << "(S)tacking Context, (N)ormal flow only, (O)verflow clip, (A)lpha (opacity or mask), has (B)lend mode, (I)solates blending, (T)ransform-ish, (F)ilter, Fi(X)ed position, (C)omposited, (c)omposited descendant \n"6758 stream << "(S)tacking Context, (N)ormal flow only, (O)verflow clip, (A)lpha (opacity or mask), has (B)lend mode, (I)solates blending, (T)ransform-ish, (F)ilter, Fi(X)ed position, (C)omposited, (c)omposited descendant, (s)scrolling ancestor\n" 6754 6759 "Dirty (z)-lists, Dirty (n)ormal flow lists\n" 6755 6760 "Traversal needs: requirements (t)raversal on descendants, (b)acking or hierarchy traversal on descendants, (r)equirements traversal on all descendants, requirements traversal on all (s)ubsequent layers, (h)ierarchy traversal on all descendants, update of paint (o)rder children\n" … … 6778 6783 stream << (layer.isComposited() ? "C" : "-"); 6779 6784 stream << (layer.hasCompositingDescendant() ? "c" : "-"); 6785 stream << (layer.hasCompositedScrollingAncestor() ? "s" : "-"); 6780 6786 6781 6787 stream << " "; -
trunk/Source/WebCore/rendering/RenderLayer.h
r243962 r244209 517 517 SeenTransformedLayer = 1 << 4, 518 518 Seen3DTransformedLayer = 1 << 5, 519 SeenCompositedScrollingLayer = 1 << 6, 519 520 }; 520 521 static constexpr OptionSet<UpdateLayerPositionsFlag> updateLayerPositionsDefaultFlags() { return { CheckForRepaint }; } … … 815 816 bool usesAsyncScrolling() const override; 816 817 818 bool hasCompositedScrollingAncestor() const { return m_hasCompositedScrollingAncestor; } 819 void setHasCompositedScrollingAncestor(bool hasCompositedScrollingAncestor) { m_hasCompositedScrollingAncestor = hasCompositedScrollingAncestor; } 820 817 821 bool paintsWithTransparency(OptionSet<PaintBehavior> paintBehavior) const 818 822 { … … 1202 1206 bool m_hasCompositingDescendant : 1; // In the z-order tree. 1203 1207 1208 bool m_hasCompositedScrollingAncestor : 1; // In the layer-order tree. 1209 1204 1210 bool m_hasTransformedAncestor : 1; 1205 1211 bool m_has3DTransformedAncestor : 1; -
trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp
r244182 r244209 2716 2716 2717 2717 auto position = renderer.style().position(); 2718 bool isFixed = renderer.is OutOfFlowPositioned() && position == PositionType::Fixed;2718 bool isFixed = renderer.isFixedPositioned(); 2719 2719 if (isFixed && !layer.isStackingContext()) 2720 2720 return false; … … 2801 2801 } 2802 2802 2803 if (renderer.isAbsolutelyPositioned() && compositingAncestor ) {2803 if (renderer.isAbsolutelyPositioned() && compositingAncestor && layer.hasCompositedScrollingAncestor()) { 2804 2804 if (layerContainingBlockCrossesCoordinatedScrollingBoundary(layer, *compositingAncestor)) { 2805 2805 reason = RenderLayer::IndirectCompositingReason::OverflowScrollPositioning; … … 2863 2863 return isAsyncScrollableStickyLayer(layer); 2864 2864 2865 if ( layer.renderer().style().position() != PositionType::Fixed)2865 if (!layer.renderer().isFixedPositioned()) 2866 2866 return false; 2867 2867 … … 2877 2877 bool RenderLayerCompositor::fixedLayerIntersectsViewport(const RenderLayer& layer) const 2878 2878 { 2879 ASSERT(layer.renderer(). style().position() == PositionType::Fixed);2879 ASSERT(layer.renderer().isFixedPositioned()); 2880 2880 2881 2881 // Fixed position elements that are invisible in the current view don't get their own layer. … … 2947 2947 2948 2948 if (layer.renderer().isFixedPositioned()) 2949 return ScrollPositioningBehavior::None; 2950 2951 if (!layer.hasCompositedScrollingAncestor()) 2949 2952 return ScrollPositioningBehavior::None; 2950 2953
Note: See TracChangeset
for help on using the changeset viewer.