Title: [249080] trunk/Source/WebCore
Revision
249080
Author
simon.fra...@apple.com
Date
2019-08-23 20:31:55 -0700 (Fri, 23 Aug 2019)

Log Message

RenderLayerModelObject should not call private RenderLayer functions
https://bugs.webkit.org/show_bug.cgi?id=201111

Reviewed by Zalan Bujtas.

Make RenderLayerModelObject no longer a friend class of RenderLayer, giving it a public
willRemoveChildWithBlendMode() function to call. Also make the UpdateLayerPositionsFlag
enum private, providing a updateLayerPositionsAfterStyleChange() for RenderLayerModelObject,
and changing the arguments of updateLayerPositionsAfterLayout() for FrameView.

No behavior change.

* page/FrameView.cpp:
(WebCore::FrameView::didLayout):
(WebCore::updateLayerPositionFlags): Deleted.
* rendering/RenderLayer.cpp:
(WebCore::RenderLayer::updateLayerPositionsAfterStyleChange):
(WebCore::RenderLayer::updateLayerPositionsAfterLayout):
(WebCore::RenderLayer::willRemoveChildWithBlendMode):
* rendering/RenderLayer.h:
* rendering/RenderLayerModelObject.cpp:
(WebCore::RenderLayerModelObject::styleDidChange):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (249079 => 249080)


--- trunk/Source/WebCore/ChangeLog	2019-08-24 02:22:28 UTC (rev 249079)
+++ trunk/Source/WebCore/ChangeLog	2019-08-24 03:31:55 UTC (rev 249080)
@@ -1,3 +1,28 @@
+2019-08-23  Simon Fraser  <simon.fra...@apple.com>
+
+        RenderLayerModelObject should not call private RenderLayer functions
+        https://bugs.webkit.org/show_bug.cgi?id=201111
+
+        Reviewed by Zalan Bujtas.
+
+        Make RenderLayerModelObject no longer a friend class of RenderLayer, giving it a public
+        willRemoveChildWithBlendMode() function to call. Also make the UpdateLayerPositionsFlag
+        enum private, providing a updateLayerPositionsAfterStyleChange() for RenderLayerModelObject,
+        and changing the arguments of updateLayerPositionsAfterLayout() for FrameView.
+
+        No behavior change.
+
+        * page/FrameView.cpp:
+        (WebCore::FrameView::didLayout):
+        (WebCore::updateLayerPositionFlags): Deleted.
+        * rendering/RenderLayer.cpp:
+        (WebCore::RenderLayer::updateLayerPositionsAfterStyleChange):
+        (WebCore::RenderLayer::updateLayerPositionsAfterLayout):
+        (WebCore::RenderLayer::willRemoveChildWithBlendMode):
+        * rendering/RenderLayer.h:
+        * rendering/RenderLayerModelObject.cpp:
+        (WebCore::RenderLayerModelObject::styleDidChange):
+
 2019-08-22  Ryosuke Niwa  <rn...@webkit.org>
 
         Implement StaticRange constructor

Modified: trunk/Source/WebCore/page/FrameView.cpp (249079 => 249080)


--- trunk/Source/WebCore/page/FrameView.cpp	2019-08-24 02:22:28 UTC (rev 249079)
+++ trunk/Source/WebCore/page/FrameView.cpp	2019-08-24 03:31:55 UTC (rev 249080)
@@ -145,18 +145,6 @@
 static constexpr unsigned mainArticleSignificantRenderedTextCharacterThreshold = 1500;
 static constexpr float mainArticleSignificantRenderedTextMeanLength = 25;
 
-static OptionSet<RenderLayer::UpdateLayerPositionsFlag> updateLayerPositionFlags(RenderLayer* layer, bool isRelayoutingSubtree, bool didFullRepaint)
-{
-    auto flags = RenderLayer::updateLayerPositionsDefaultFlags();
-    if (didFullRepaint) {
-        flags.remove(RenderLayer::CheckForRepaint);
-        flags.add(RenderLayer::NeedsFullRepaintInBacking);
-    }
-    if (isRelayoutingSubtree && layer->enclosingPaginationLayer(RenderLayer::IncludeCompositedPaginatedLayers))
-        flags.add(RenderLayer::UpdatePagination);
-    return flags;
-}
-
 Pagination::Mode paginationModeForRenderStyle(const RenderStyle& style)
 {
     Overflow overflow = style.overflowY();
@@ -1245,7 +1233,7 @@
 {
     renderView()->releaseProtectedRenderWidgets();
     auto* layoutRootEnclosingLayer = layoutRoot->enclosingLayer();
-    layoutRootEnclosingLayer->updateLayerPositionsAfterLayout(renderView()->layer(), updateLayerPositionFlags(layoutRootEnclosingLayer, !is<RenderView>(*layoutRoot), layoutContext().needsFullRepaint()));
+    layoutRootEnclosingLayer->updateLayerPositionsAfterLayout(!is<RenderView>(*layoutRoot), layoutContext().needsFullRepaint());
 
     updateCompositingLayersAfterLayout();
 

Modified: trunk/Source/WebCore/rendering/RenderLayer.cpp (249079 => 249080)


--- trunk/Source/WebCore/rendering/RenderLayer.cpp	2019-08-24 02:22:28 UTC (rev 249079)
+++ trunk/Source/WebCore/rendering/RenderLayer.cpp	2019-08-24 03:31:55 UTC (rev 249080)
@@ -875,13 +875,30 @@
     return m_filters && m_filters->hasFilterThatMovesPixels();
 }
 
-void RenderLayer::updateLayerPositionsAfterLayout(const RenderLayer* rootLayer, OptionSet<UpdateLayerPositionsFlag> flags)
+void RenderLayer::updateLayerPositionsAfterStyleChange()
 {
+    updateLayerPositions(nullptr, RenderLayer::updateLayerPositionsDefaultFlags());
+}
+
+void RenderLayer::updateLayerPositionsAfterLayout(bool isRelayoutingSubtree, bool didFullRepaint)
+{
+    auto updateLayerPositionFlags = [&](bool isRelayoutingSubtree, bool didFullRepaint) {
+        auto flags = RenderLayer::updateLayerPositionsDefaultFlags();
+        if (didFullRepaint) {
+            flags.remove(RenderLayer::CheckForRepaint);
+            flags.add(RenderLayer::NeedsFullRepaintInBacking);
+        }
+        if (isRelayoutingSubtree && enclosingPaginationLayer(RenderLayer::IncludeCompositedPaginatedLayers))
+            flags.add(RenderLayer::UpdatePagination);
+        return flags;
+    };
+
     LOG(Compositing, "RenderLayer %p updateLayerPositionsAfterLayout", this);
     RenderGeometryMap geometryMap(UseTransforms);
-    if (this != rootLayer)
+    if (!isRenderViewLayer())
         geometryMap.pushMappingsToAncestor(parent(), nullptr);
-    updateLayerPositions(&geometryMap, flags);
+
+    updateLayerPositions(&geometryMap, updateLayerPositionFlags(isRelayoutingSubtree, didFullRepaint));
 }
 
 void RenderLayer::updateLayerPositions(RenderGeometryMap* geometryMap, OptionSet<UpdateLayerPositionsFlag> flags)
@@ -1170,6 +1187,11 @@
         m_blendMode = static_cast<unsigned>(newBlendMode);
 }
 
+void RenderLayer::willRemoveChildWithBlendMode()
+{
+    parent()->dirtyAncestorChainHasBlendingDescendants();
+}
+
 void RenderLayer::updateAncestorChainHasBlendingDescendants()
 {
     for (auto* layer = this; layer; layer = layer->parent()) {

Modified: trunk/Source/WebCore/rendering/RenderLayer.h (249079 => 249080)


--- trunk/Source/WebCore/rendering/RenderLayer.h	2019-08-24 02:22:28 UTC (rev 249079)
+++ trunk/Source/WebCore/rendering/RenderLayer.h	2019-08-24 03:31:55 UTC (rev 249080)
@@ -140,6 +140,8 @@
 public:
     friend class RenderReplica;
     friend class RenderLayerFilters;
+    friend class RenderLayerBacking;
+    friend class RenderLayerCompositor;
 
     explicit RenderLayer(RenderLayerModelObject&);
     virtual ~RenderLayer();
@@ -529,20 +531,9 @@
 
     bool canRender3DTransforms() const;
 
-    enum UpdateLayerPositionsFlag {
-        CheckForRepaint                     = 1 << 0,
-        NeedsFullRepaintInBacking           = 1 << 1,
-        ContainingClippingLayerChangedSize  = 1 << 2,
-        UpdatePagination                    = 1 << 3,
-        SeenFixedLayer                      = 1 << 4,
-        SeenTransformedLayer                = 1 << 5,
-        Seen3DTransformedLayer              = 1 << 6,
-        SeenCompositedScrollingLayer        = 1 << 7,
-    };
-    static constexpr OptionSet<UpdateLayerPositionsFlag> updateLayerPositionsDefaultFlags() { return { CheckForRepaint }; }
+    void updateLayerPositionsAfterStyleChange();
+    void updateLayerPositionsAfterLayout(bool isRelayoutingSubtree, bool didFullRepaint);
 
-    void updateLayerPositionsAfterLayout(const RenderLayer* rootLayer, OptionSet<UpdateLayerPositionsFlag>);
-
     void updateLayerPositionsAfterOverflowScroll();
     void updateLayerPositionsAfterDocumentScroll();
 
@@ -559,6 +550,7 @@
     
 #if ENABLE(CSS_COMPOSITING)
     void updateBlendMode();
+    void willRemoveChildWithBlendMode();
 #endif
 
     const LayoutSize& offsetForInFlowPosition() const { return m_offsetForInFlowPosition; }
@@ -986,6 +978,18 @@
     void updateScrollbarsAfterStyleChange(const RenderStyle* oldStyle);
     void updateScrollbarsAfterLayout();
 
+    enum UpdateLayerPositionsFlag {
+        CheckForRepaint                     = 1 << 0,
+        NeedsFullRepaintInBacking           = 1 << 1,
+        ContainingClippingLayerChangedSize  = 1 << 2,
+        UpdatePagination                    = 1 << 3,
+        SeenFixedLayer                      = 1 << 4,
+        SeenTransformedLayer                = 1 << 5,
+        Seen3DTransformedLayer              = 1 << 6,
+        SeenCompositedScrollingLayer        = 1 << 7,
+    };
+    static constexpr OptionSet<UpdateLayerPositionsFlag> updateLayerPositionsDefaultFlags() { return { CheckForRepaint }; }
+
     // Returns true if the position changed.
     bool updateLayerPosition(OptionSet<UpdateLayerPositionsFlag>* = nullptr);
 
@@ -1171,10 +1175,6 @@
     void setIndirectCompositingReason(IndirectCompositingReason reason) { m_indirectCompositingReason = static_cast<unsigned>(reason); }
     bool mustCompositeForIndirectReasons() const { return m_indirectCompositingReason; }
 
-    friend class RenderLayerBacking;
-    friend class RenderLayerCompositor;
-    friend class RenderLayerModelObject;
-
     LayoutUnit overflowTop() const;
     LayoutUnit overflowBottom() const;
     LayoutUnit overflowLeft() const;

Modified: trunk/Source/WebCore/rendering/RenderLayerModelObject.cpp (249079 => 249080)


--- trunk/Source/WebCore/rendering/RenderLayerModelObject.cpp	2019-08-24 02:22:28 UTC (rev 249079)
+++ trunk/Source/WebCore/rendering/RenderLayerModelObject.cpp	2019-08-24 03:31:55 UTC (rev 249080)
@@ -171,13 +171,13 @@
             createLayer();
             if (parent() && !needsLayout() && containingBlock()) {
                 layer()->setRepaintStatus(NeedsFullRepaint);
-                layer()->updateLayerPositions();
+                layer()->updateLayerPositionsAfterStyleChange();
             }
         }
     } else if (layer() && layer()->parent()) {
 #if ENABLE(CSS_COMPOSITING)
         if (oldStyle->hasBlendMode())
-            layer()->parent()->dirtyAncestorChainHasBlendingDescendants();
+            layer()->willRemoveChildWithBlendMode();
 #endif
         setHasTransformRelatedProperty(false); // All transform-related propeties force layers, so we know we don't have one or the object doesn't support them.
         setHasReflection(false);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to