⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 249080 in webkit


Ignore:
Timestamp:
Aug 23, 2019, 8:31:55 PM (7 years ago)
Author:
Simon Fraser
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):

Location:
trunk/Source/WebCore
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r249079 r249080  
     12019-08-23  Simon Fraser  <simon.fraser@apple.com>
     2
     3        RenderLayerModelObject should not call private RenderLayer functions
     4        https://bugs.webkit.org/show_bug.cgi?id=201111
     5
     6        Reviewed by Zalan Bujtas.
     7
     8        Make RenderLayerModelObject no longer a friend class of RenderLayer, giving it a public
     9        willRemoveChildWithBlendMode() function to call. Also make the UpdateLayerPositionsFlag
     10        enum private, providing a updateLayerPositionsAfterStyleChange() for RenderLayerModelObject,
     11        and changing the arguments of updateLayerPositionsAfterLayout() for FrameView.
     12
     13        No behavior change.
     14
     15        * page/FrameView.cpp:
     16        (WebCore::FrameView::didLayout):
     17        (WebCore::updateLayerPositionFlags): Deleted.
     18        * rendering/RenderLayer.cpp:
     19        (WebCore::RenderLayer::updateLayerPositionsAfterStyleChange):
     20        (WebCore::RenderLayer::updateLayerPositionsAfterLayout):
     21        (WebCore::RenderLayer::willRemoveChildWithBlendMode):
     22        * rendering/RenderLayer.h:
     23        * rendering/RenderLayerModelObject.cpp:
     24        (WebCore::RenderLayerModelObject::styleDidChange):
     25
    1262019-08-22  Ryosuke Niwa  <rniwa@webkit.org>
    227
  • trunk/Source/WebCore/page/FrameView.cpp

    r248846 r249080  
    146146static constexpr float mainArticleSignificantRenderedTextMeanLength = 25;
    147147
    148 static OptionSet<RenderLayer::UpdateLayerPositionsFlag> updateLayerPositionFlags(RenderLayer* layer, bool isRelayoutingSubtree, bool didFullRepaint)
    149 {
    150     auto flags = RenderLayer::updateLayerPositionsDefaultFlags();
    151     if (didFullRepaint) {
    152         flags.remove(RenderLayer::CheckForRepaint);
    153         flags.add(RenderLayer::NeedsFullRepaintInBacking);
    154     }
    155     if (isRelayoutingSubtree && layer->enclosingPaginationLayer(RenderLayer::IncludeCompositedPaginatedLayers))
    156         flags.add(RenderLayer::UpdatePagination);
    157     return flags;
    158 }
    159 
    160148Pagination::Mode paginationModeForRenderStyle(const RenderStyle& style)
    161149{
     
    12461234    renderView()->releaseProtectedRenderWidgets();
    12471235    auto* layoutRootEnclosingLayer = layoutRoot->enclosingLayer();
    1248     layoutRootEnclosingLayer->updateLayerPositionsAfterLayout(renderView()->layer(), updateLayerPositionFlags(layoutRootEnclosingLayer, !is<RenderView>(*layoutRoot), layoutContext().needsFullRepaint()));
     1236    layoutRootEnclosingLayer->updateLayerPositionsAfterLayout(!is<RenderView>(*layoutRoot), layoutContext().needsFullRepaint());
    12491237
    12501238    updateCompositingLayersAfterLayout();
  • trunk/Source/WebCore/rendering/RenderLayer.cpp

    r249045 r249080  
    876876}
    877877
    878 void RenderLayer::updateLayerPositionsAfterLayout(const RenderLayer* rootLayer, OptionSet<UpdateLayerPositionsFlag> flags)
    879 {
     878void RenderLayer::updateLayerPositionsAfterStyleChange()
     879{
     880    updateLayerPositions(nullptr, RenderLayer::updateLayerPositionsDefaultFlags());
     881}
     882
     883void RenderLayer::updateLayerPositionsAfterLayout(bool isRelayoutingSubtree, bool didFullRepaint)
     884{
     885    auto updateLayerPositionFlags = [&](bool isRelayoutingSubtree, bool didFullRepaint) {
     886        auto flags = RenderLayer::updateLayerPositionsDefaultFlags();
     887        if (didFullRepaint) {
     888            flags.remove(RenderLayer::CheckForRepaint);
     889            flags.add(RenderLayer::NeedsFullRepaintInBacking);
     890        }
     891        if (isRelayoutingSubtree && enclosingPaginationLayer(RenderLayer::IncludeCompositedPaginatedLayers))
     892            flags.add(RenderLayer::UpdatePagination);
     893        return flags;
     894    };
     895
    880896    LOG(Compositing, "RenderLayer %p updateLayerPositionsAfterLayout", this);
    881897    RenderGeometryMap geometryMap(UseTransforms);
    882     if (this != rootLayer)
     898    if (!isRenderViewLayer())
    883899        geometryMap.pushMappingsToAncestor(parent(), nullptr);
    884     updateLayerPositions(&geometryMap, flags);
     900
     901    updateLayerPositions(&geometryMap, updateLayerPositionFlags(isRelayoutingSubtree, didFullRepaint));
    885902}
    886903
     
    11691186    if (newBlendMode != static_cast<BlendMode>(m_blendMode))
    11701187        m_blendMode = static_cast<unsigned>(newBlendMode);
     1188}
     1189
     1190void RenderLayer::willRemoveChildWithBlendMode()
     1191{
     1192    parent()->dirtyAncestorChainHasBlendingDescendants();
    11711193}
    11721194
  • trunk/Source/WebCore/rendering/RenderLayer.h

    r249045 r249080  
    141141    friend class RenderReplica;
    142142    friend class RenderLayerFilters;
     143    friend class RenderLayerBacking;
     144    friend class RenderLayerCompositor;
    143145
    144146    explicit RenderLayer(RenderLayerModelObject&);
     
    530532    bool canRender3DTransforms() const;
    531533
    532     enum UpdateLayerPositionsFlag {
    533         CheckForRepaint                     = 1 << 0,
    534         NeedsFullRepaintInBacking           = 1 << 1,
    535         ContainingClippingLayerChangedSize  = 1 << 2,
    536         UpdatePagination                    = 1 << 3,
    537         SeenFixedLayer                      = 1 << 4,
    538         SeenTransformedLayer                = 1 << 5,
    539         Seen3DTransformedLayer              = 1 << 6,
    540         SeenCompositedScrollingLayer        = 1 << 7,
    541     };
    542     static constexpr OptionSet<UpdateLayerPositionsFlag> updateLayerPositionsDefaultFlags() { return { CheckForRepaint }; }
    543 
    544     void updateLayerPositionsAfterLayout(const RenderLayer* rootLayer, OptionSet<UpdateLayerPositionsFlag>);
     534    void updateLayerPositionsAfterStyleChange();
     535    void updateLayerPositionsAfterLayout(bool isRelayoutingSubtree, bool didFullRepaint);
    545536
    546537    void updateLayerPositionsAfterOverflowScroll();
     
    560551#if ENABLE(CSS_COMPOSITING)
    561552    void updateBlendMode();
     553    void willRemoveChildWithBlendMode();
    562554#endif
    563555
     
    987979    void updateScrollbarsAfterLayout();
    988980
     981    enum UpdateLayerPositionsFlag {
     982        CheckForRepaint                     = 1 << 0,
     983        NeedsFullRepaintInBacking           = 1 << 1,
     984        ContainingClippingLayerChangedSize  = 1 << 2,
     985        UpdatePagination                    = 1 << 3,
     986        SeenFixedLayer                      = 1 << 4,
     987        SeenTransformedLayer                = 1 << 5,
     988        Seen3DTransformedLayer              = 1 << 6,
     989        SeenCompositedScrollingLayer        = 1 << 7,
     990    };
     991    static constexpr OptionSet<UpdateLayerPositionsFlag> updateLayerPositionsDefaultFlags() { return { CheckForRepaint }; }
     992
    989993    // Returns true if the position changed.
    990994    bool updateLayerPosition(OptionSet<UpdateLayerPositionsFlag>* = nullptr);
     
    11721176    bool mustCompositeForIndirectReasons() const { return m_indirectCompositingReason; }
    11731177
    1174     friend class RenderLayerBacking;
    1175     friend class RenderLayerCompositor;
    1176     friend class RenderLayerModelObject;
    1177 
    11781178    LayoutUnit overflowTop() const;
    11791179    LayoutUnit overflowBottom() const;
  • trunk/Source/WebCore/rendering/RenderLayerModelObject.cpp

    r248846 r249080  
    172172            if (parent() && !needsLayout() && containingBlock()) {
    173173                layer()->setRepaintStatus(NeedsFullRepaint);
    174                 layer()->updateLayerPositions();
     174                layer()->updateLayerPositionsAfterStyleChange();
    175175            }
    176176        }
     
    178178#if ENABLE(CSS_COMPOSITING)
    179179        if (oldStyle->hasBlendMode())
    180             layer()->parent()->dirtyAncestorChainHasBlendingDescendants();
     180            layer()->willRemoveChildWithBlendMode();
    181181#endif
    182182        setHasTransformRelatedProperty(false); // All transform-related propeties force layers, so we know we don't have one or the object doesn't support them.
Note: See TracChangeset for help on using the changeset viewer.