- 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);