WebKit Bugzilla
Attachment 360869 Details for
Bug 194160
: Don't use base layer() as the scroll layer in scrolling tree.
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
patch
scrolling-tree-scrolling-layer-2.patch (text/plain), 48.22 KB, created by
Antti Koivisto
on 2019-02-01 09:48:15 PST
(
hide
)
Description:
patch
Filename:
MIME Type:
Creator:
Antti Koivisto
Created:
2019-02-01 09:48:15 PST
Size:
48.22 KB
patch
obsolete
>Index: Source/WebCore/ChangeLog >=================================================================== >--- Source/WebCore/ChangeLog (revision 240855) >+++ Source/WebCore/ChangeLog (working copy) >@@ -1,3 +1,68 @@ >+2019-02-01 Antti Koivisto <antti@apple.com> >+ >+ Don't use base layer() as the scroll layer in scrolling tree. >+ https://bugs.webkit.org/show_bug.cgi?id=194160 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Maintain scrollContainerLayer() and scrolledContestsLayer() separately in ScrollingTreeScrollingNode. >+ >+ * page/scrolling/AsyncScrollingCoordinator.cpp: >+ (WebCore::AsyncScrollingCoordinator::frameViewRootLayerDidChange): >+ (WebCore::AsyncScrollingCoordinator::setNodeLayers): >+ * page/scrolling/AsyncScrollingCoordinator.h: >+ * page/scrolling/ScrollingCoordinator.h: >+ (WebCore::ScrollingCoordinator::setNodeLayers): >+ >+ Turn the long layer parameter list into a struct. >+ >+ * page/scrolling/ScrollingStateNode.cpp: >+ (WebCore::ScrollingStateNode::ScrollingStateNode): >+ (WebCore::ScrollingStateNode::setAllPropertiesChanged): >+ (WebCore::ScrollingStateNode::setLayer): >+ * page/scrolling/ScrollingStateNode.h: >+ * page/scrolling/ScrollingStateScrollingNode.cpp: >+ (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode): >+ (WebCore::ScrollingStateScrollingNode::setAllPropertiesChanged): >+ (WebCore::ScrollingStateScrollingNode::setScrollContainerLayer): >+ (WebCore::ScrollingStateScrollingNode::dumpProperties const): >+ * page/scrolling/ScrollingStateScrollingNode.h: >+ (WebCore::ScrollingStateScrollingNode::scrollContainerLayer const): >+ * page/scrolling/ScrollingTree.cpp: >+ (WebCore::ScrollingTree::commitTreeState): >+ * page/scrolling/ScrollingTreeScrollingNode.cpp: >+ (WebCore::ScrollingTreeScrollingNode::commitStateBeforeChildren): >+ * page/scrolling/ScrollingTreeScrollingNode.h: >+ (WebCore::ScrollingTreeScrollingNode::scrollContainerLayer const): >+ (WebCore::ScrollingTreeScrollingNode::scrolledContentsLayer const): >+ * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.h: >+ * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.mm: >+ (WebCore::ScrollingTreeFrameScrollingNodeIOS::commitStateBeforeChildren): >+ (WebCore::ScrollingTreeFrameScrollingNodeIOS::scrollPosition const): >+ (WebCore::ScrollingTreeFrameScrollingNodeIOS::setScrollLayerPosition): >+ (WebCore::ScrollingTreeFrameScrollingNodeIOS::scrollLayer const): Deleted. >+ * page/scrolling/mac/ScrollingTreeFixedNode.mm: >+ (WebCore::ScrollingTreeFixedNode::commitStateBeforeChildren): >+ * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h: >+ * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm: >+ (WebCore::ScrollingTreeFrameScrollingNodeMac::commitStateBeforeChildren): >+ (WebCore::ScrollingTreeFrameScrollingNodeMac::commitStateAfterChildren): >+ (WebCore::ScrollingTreeFrameScrollingNodeMac::scrollPosition const): >+ (WebCore::ScrollingTreeFrameScrollingNodeMac::setScrollLayerPosition): >+ (WebCore::ScrollingTreeFrameScrollingNodeMac::exposedUnfilledArea const): >+ * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.h: >+ * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm: >+ (WebCore::ScrollingTreeOverflowScrollingNodeMac::commitStateBeforeChildren): >+ (WebCore::ScrollingTreeOverflowScrollingNodeMac::scrollPosition const): >+ (WebCore::ScrollingTreeOverflowScrollingNodeMac::setScrollLayerPosition): >+ * page/scrolling/mac/ScrollingTreeStickyNode.mm: >+ (WebCore::ScrollingTreeStickyNode::commitStateBeforeChildren): >+ * rendering/RenderLayerCompositor.cpp: >+ (WebCore::RenderLayerCompositor::didChangePlatformLayerForLayer): >+ (WebCore::RenderLayerCompositor::updateScrollingNodeForViewportConstrainedRole): >+ (WebCore::RenderLayerCompositor::updateScrollingNodeForScrollingRole): >+ (WebCore::RenderLayerCompositor::updateScrollingNodeForFrameHostingRole): >+ > 2019-02-01 Simon Fraser <simon.fraser@apple.com> > > REGRESSION (r240698): fast/scrolling/sticky-to-fixed.html can cause a crash >Index: Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp >=================================================================== >--- Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp (revision 240855) >+++ Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp (working copy) >@@ -226,7 +226,7 @@ void AsyncScrollingCoordinator::frameVie > ScrollingCoordinator::frameViewRootLayerDidChange(frameView); > > auto* node = downcast<ScrollingStateFrameScrollingNode>(m_scrollingStateTree->stateNodeForID(frameView.scrollingNodeID())); >- node->setLayer(scrollLayerForFrameView(frameView)); >+ node->setScrolledContentsLayer(scrollLayerForFrameView(frameView)); > node->setRootContentsLayer(rootContentsLayerForFrameView(frameView)); > node->setCounterScrollingLayer(counterScrollingLayerForFrameView(frameView)); > node->setInsetClipLayer(insetClipLayerForFrameView(frameView)); >@@ -573,25 +573,25 @@ void AsyncScrollingCoordinator::ensureRo > insertNode(ScrollingNodeType::MainFrame, frameView.scrollingNodeID(), 0, 0); > } > >-void AsyncScrollingCoordinator::setNodeLayers(ScrollingNodeID nodeID, GraphicsLayer* layer, GraphicsLayer* scrolledContentsLayer, GraphicsLayer* counterScrollingLayer, GraphicsLayer* insetClipLayer, GraphicsLayer* rootContentsLayer) >+void AsyncScrollingCoordinator::setNodeLayers(ScrollingNodeID nodeID, const NodeLayers& nodeLayers) > { > auto* node = m_scrollingStateTree->stateNodeForID(nodeID); > ASSERT(node); > if (!node) > return; > >- node->setLayer(layer); >+ node->setLayer(nodeLayers.layer); > > if (is<ScrollingStateScrollingNode>(node)) { > auto& scrollingNode = downcast<ScrollingStateScrollingNode>(*node); >- // FIXME: Currently unused. >- scrollingNode.setScrolledContentsLayer(scrolledContentsLayer); >+ scrollingNode.setScrollContainerLayer(nodeLayers.scrollContainerLayer); >+ scrollingNode.setScrolledContentsLayer(nodeLayers.scrolledContentsLayer); > > if (is<ScrollingStateFrameScrollingNode>(node)) { > auto& frameScrollingNode = downcast<ScrollingStateFrameScrollingNode>(*node); >- frameScrollingNode.setInsetClipLayer(insetClipLayer); >- frameScrollingNode.setCounterScrollingLayer(counterScrollingLayer); >- frameScrollingNode.setRootContentsLayer(rootContentsLayer); >+ frameScrollingNode.setInsetClipLayer(nodeLayers.insetClipLayer); >+ frameScrollingNode.setCounterScrollingLayer(nodeLayers.counterScrollingLayer); >+ frameScrollingNode.setRootContentsLayer(nodeLayers.rootContentsLayer); > } > } > } >Index: Source/WebCore/page/scrolling/AsyncScrollingCoordinator.h >=================================================================== >--- Source/WebCore/page/scrolling/AsyncScrollingCoordinator.h (revision 240855) >+++ Source/WebCore/page/scrolling/AsyncScrollingCoordinator.h (working copy) >@@ -108,7 +108,7 @@ private: > WEBCORE_EXPORT ScrollingNodeID parentOfNode(ScrollingNodeID) const override; > WEBCORE_EXPORT Vector<ScrollingNodeID> childrenOfNode(ScrollingNodeID) const override; > >- WEBCORE_EXPORT void setNodeLayers(ScrollingNodeID, GraphicsLayer* /*layer*/, GraphicsLayer* /*scrolledContentsLayer*/ = nullptr, GraphicsLayer* /*counterScrollingLayer*/ = nullptr, GraphicsLayer* /*insetClipLayer*/ = nullptr, GraphicsLayer* /*rootContentsLayer*/ = nullptr) override; >+ WEBCORE_EXPORT void setNodeLayers(ScrollingNodeID, const NodeLayers&) override; > WEBCORE_EXPORT void setScrollingNodeGeometry(ScrollingNodeID, const ScrollingGeometry&) override; > WEBCORE_EXPORT void setViewportConstraintedNodeGeometry(ScrollingNodeID, const ViewportConstraints&) override; > >Index: Source/WebCore/page/scrolling/ScrollingCoordinator.h >=================================================================== >--- Source/WebCore/page/scrolling/ScrollingCoordinator.h (revision 240855) >+++ Source/WebCore/page/scrolling/ScrollingCoordinator.h (working copy) >@@ -129,7 +129,15 @@ public: > virtual ScrollingNodeID parentOfNode(ScrollingNodeID) const { return 0; } > virtual Vector<ScrollingNodeID> childrenOfNode(ScrollingNodeID) const { return { }; } > >- virtual void setNodeLayers(ScrollingNodeID, GraphicsLayer* /*layer*/, GraphicsLayer* /*scrolledContentsLayer*/ = nullptr, GraphicsLayer* /*counterScrollingLayer*/ = nullptr, GraphicsLayer* /*insetClipLayer*/ = nullptr, GraphicsLayer* /*rootContentsLayer*/ = nullptr) { } >+ struct NodeLayers { >+ GraphicsLayer* layer { nullptr }; >+ GraphicsLayer* scrollContainerLayer { nullptr }; >+ GraphicsLayer* scrolledContentsLayer { nullptr }; >+ GraphicsLayer* counterScrollingLayer { nullptr }; >+ GraphicsLayer* insetClipLayer { nullptr }; >+ GraphicsLayer* rootContentsLayer { nullptr }; >+ }; >+ virtual void setNodeLayers(ScrollingNodeID, const NodeLayers&) { } > > struct ScrollingGeometry { > LayoutRect parentRelativeScrollableRect; >Index: Source/WebCore/page/scrolling/ScrollingStateNode.cpp >=================================================================== >--- Source/WebCore/page/scrolling/ScrollingStateNode.cpp (revision 240855) >+++ Source/WebCore/page/scrolling/ScrollingStateNode.cpp (working copy) >@@ -51,7 +51,7 @@ ScrollingStateNode::ScrollingStateNode(c > , m_changedProperties(stateNode.changedProperties()) > , m_scrollingStateTree(adoptiveTree) > { >- if (hasChangedProperty(ScrollLayer)) >+ if (hasChangedProperty(Layer)) > setLayer(stateNode.layer().toRepresentation(adoptiveTree.preferredLayerRepresentation())); > scrollingStateTree().addNode(*this); > } >@@ -69,7 +69,7 @@ void ScrollingStateNode::setPropertyChan > > void ScrollingStateNode::setAllPropertiesChanged() > { >- setPropertyChangedBit(ScrollLayer); >+ setPropertyChangedBit(Layer); > setPropertyChangedBit(ChildNodes); > m_scrollingStateTree.setHasChangedProperties(); > } >@@ -167,7 +167,7 @@ void ScrollingStateNode::setLayer(const > > m_layer = layerRepresentation; > >- setPropertyChanged(ScrollLayer); >+ setPropertyChanged(Layer); > } > > void ScrollingStateNode::dumpProperties(TextStream& ts, ScrollingStateTreeAsTextBehavior behavior) const >Index: Source/WebCore/page/scrolling/ScrollingStateNode.h >=================================================================== >--- Source/WebCore/page/scrolling/ScrollingStateNode.h (revision 240855) >+++ Source/WebCore/page/scrolling/ScrollingStateNode.h (working copy) >@@ -209,7 +209,7 @@ public: > > // FIXME: using an OptionSet<> for these and derived class bits would simplify code. > enum { >- ScrollLayer = 0, >+ Layer = 0, > ChildNodes, > NumStateNodeBits // This must remain at the last position. > }; >Index: Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp >=================================================================== >--- Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp (revision 240855) >+++ Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp (working copy) >@@ -54,6 +54,8 @@ ScrollingStateScrollingNode::ScrollingSt > , m_requestedScrollPositionRepresentsProgrammaticScroll(stateNode.requestedScrollPositionRepresentsProgrammaticScroll()) > , m_expectsWheelEventTestTrigger(stateNode.expectsWheelEventTestTrigger()) > { >+ if (hasChangedProperty(ScrollContainerLayer)) >+ setScrollContainerLayer(stateNode.scrollContainerLayer().toRepresentation(adoptiveTree.preferredLayerRepresentation())); > if (hasChangedProperty(ScrolledContentsLayer)) > setScrolledContentsLayer(stateNode.scrolledContentsLayer().toRepresentation(adoptiveTree.preferredLayerRepresentation())); > } >@@ -79,6 +81,7 @@ void ScrollingStateScrollingNode::setAll > setPropertyChangedBit(CurrentVerticalSnapOffsetIndex); > #endif > setPropertyChangedBit(ExpectsWheelEventTestTrigger); >+ setPropertyChangedBit(ScrollContainerLayer); > setPropertyChangedBit(ScrolledContentsLayer); > > ScrollingStateNode::setAllPropertiesChanged(); >@@ -219,6 +222,15 @@ void ScrollingStateScrollingNode::setExp > setPropertyChanged(ExpectsWheelEventTestTrigger); > } > >+void ScrollingStateScrollingNode::setScrollContainerLayer(const LayerRepresentation& layerRepresentation) >+{ >+ if (layerRepresentation == m_scrollContainerLayer) >+ return; >+ >+ m_scrollContainerLayer = layerRepresentation; >+ setPropertyChanged(ScrollContainerLayer); >+} >+ > void ScrollingStateScrollingNode::setScrolledContentsLayer(const LayerRepresentation& layerRepresentation) > { > if (layerRepresentation == m_scrolledContentsLayer) >@@ -290,8 +302,12 @@ void ScrollingStateScrollingNode::dumpPr > if (m_expectsWheelEventTestTrigger) > ts.dumpProperty("expects wheel event test trigger", m_expectsWheelEventTestTrigger); > >- if ((behavior & ScrollingStateTreeAsTextBehaviorIncludeLayerIDs) && m_scrolledContentsLayer.layerID()) >- ts.dumpProperty("scrolled contents layer", m_scrolledContentsLayer.layerID()); >+ if (behavior & ScrollingStateTreeAsTextBehaviorIncludeLayerIDs) { >+ if (m_scrollContainerLayer.layerID()) >+ ts.dumpProperty("scroll container layer", m_scrollContainerLayer.layerID()); >+ if (m_scrolledContentsLayer.layerID()) >+ ts.dumpProperty("scrolled contents layer", m_scrolledContentsLayer.layerID()); >+ } > } > > } // namespace WebCore >Index: Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h >=================================================================== >--- Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h (revision 240855) >+++ Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h (working copy) >@@ -56,6 +56,7 @@ public: > CurrentVerticalSnapOffsetIndex, > #endif > ExpectsWheelEventTestTrigger, >+ ScrollContainerLayer, > ScrolledContentsLayer, > NumScrollingStateNodeBits // This must remain at the last position. > }; >@@ -108,6 +109,9 @@ public: > bool expectsWheelEventTestTrigger() const { return m_expectsWheelEventTestTrigger; } > WEBCORE_EXPORT void setExpectsWheelEventTestTrigger(bool); > >+ const LayerRepresentation& scrollContainerLayer() const { return m_scrollContainerLayer; } >+ WEBCORE_EXPORT void setScrollContainerLayer(const LayerRepresentation&); >+ > // This is a layer with the contents that move. > const LayerRepresentation& scrolledContentsLayer() const { return m_scrolledContentsLayer; } > WEBCORE_EXPORT void setScrolledContentsLayer(const LayerRepresentation&); >@@ -134,6 +138,7 @@ private: > unsigned m_currentVerticalSnapPointIndex { 0 }; > #endif > ScrollableAreaParameters m_scrollableAreaParameters; >+ LayerRepresentation m_scrollContainerLayer; > LayerRepresentation m_scrolledContentsLayer; > bool m_requestedScrollPositionRepresentsProgrammaticScroll { false }; > bool m_expectsWheelEventTestTrigger { false }; >Index: Source/WebCore/page/scrolling/ScrollingTree.cpp >=================================================================== >--- Source/WebCore/page/scrolling/ScrollingTree.cpp (revision 240855) >+++ Source/WebCore/page/scrolling/ScrollingTree.cpp (working copy) >@@ -154,12 +154,12 @@ void ScrollingTree::commitTreeState(std: > if (rootNode > && (rootStateNodeChanged > || rootNode->hasChangedProperty(ScrollingStateFrameScrollingNode::EventTrackingRegion) >- || rootNode->hasChangedProperty(ScrollingStateNode::ScrollLayer) >+ || rootNode->hasChangedProperty(ScrollingStateScrollingNode::ScrolledContentsLayer) > || rootNode->hasChangedProperty(ScrollingStateFrameScrollingNode::VisualViewportEnabled) > || rootNode->hasChangedProperty(ScrollingStateFrameScrollingNode::AsyncFrameOrOverflowScrollingEnabled))) { > LockHolder lock(m_mutex); > >- if (rootStateNodeChanged || rootNode->hasChangedProperty(ScrollingStateNode::ScrollLayer)) >+ if (rootStateNodeChanged || rootNode->hasChangedProperty(ScrollingStateScrollingNode::ScrolledContentsLayer)) > m_mainFrameScrollPosition = FloatPoint(); > > if (rootStateNodeChanged || rootNode->hasChangedProperty(ScrollingStateFrameScrollingNode::EventTrackingRegion)) >Index: Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.cpp >=================================================================== >--- Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.cpp (revision 240855) >+++ Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.cpp (working copy) >@@ -96,6 +96,14 @@ void ScrollingTreeScrollingNode::commitS > > if (state.hasChangedProperty(ScrollingStateScrollingNode::ExpectsWheelEventTestTrigger)) > m_expectsWheelEventTestTrigger = state.expectsWheelEventTestTrigger(); >+ >+#if PLATFORM(COCOA) >+ if (state.hasChangedProperty(ScrollingStateScrollingNode::ScrollContainerLayer)) >+ m_scrollContainerLayer = state.scrollContainerLayer(); >+ >+ if (state.hasChangedProperty(ScrollingStateScrollingNode::ScrolledContentsLayer)) >+ m_scrolledContentsLayer = state.scrolledContentsLayer(); >+#endif > } > > void ScrollingTreeScrollingNode::commitStateAfterChildren(const ScrollingStateNode& stateNode) >Index: Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.h >=================================================================== >--- Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.h (revision 240855) >+++ Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.h (working copy) >@@ -111,6 +111,11 @@ protected: > > bool expectsWheelEventTestTrigger() const { return m_expectsWheelEventTestTrigger; } > >+#if PLATFORM(COCOA) >+ CALayer *scrollContainerLayer() const { return m_scrollContainerLayer.get(); } >+ CALayer *scrolledContentsLayer() const { return m_scrolledContentsLayer.get(); } >+#endif >+ > WEBCORE_EXPORT LayoutPoint parentToLocalPoint(LayoutPoint) const override; > WEBCORE_EXPORT LayoutPoint localToContentsPoint(LayoutPoint) const override; > >@@ -131,6 +136,11 @@ private: > #endif > ScrollableAreaParameters m_scrollableAreaParameters; > bool m_expectsWheelEventTestTrigger { false }; >+ >+#if PLATFORM(COCOA) >+ RetainPtr<CALayer> m_scrollContainerLayer; >+ RetainPtr<CALayer> m_scrolledContentsLayer; >+#endif > }; > > } // namespace WebCore >Index: Source/WebCore/page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.h >=================================================================== >--- Source/WebCore/page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.h (revision 240855) >+++ Source/WebCore/page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.h (working copy) >@@ -61,12 +61,9 @@ protected: > FloatPoint minimumScrollPosition() const override; > FloatPoint maximumScrollPosition() const override; > >- CALayer *scrollLayer() const; >- > private: > void updateChildNodesAfterScroll(const FloatPoint&); > >- RetainPtr<CALayer> m_scrollLayer; > RetainPtr<CALayer> m_counterScrollingLayer; > RetainPtr<CALayer> m_headerLayer; > RetainPtr<CALayer> m_footerLayer; >Index: Source/WebCore/page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.mm >=================================================================== >--- Source/WebCore/page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.mm (revision 240855) >+++ Source/WebCore/page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.mm (working copy) >@@ -59,9 +59,6 @@ void ScrollingTreeFrameScrollingNodeIOS: > > const auto& scrollingStateNode = downcast<ScrollingStateFrameScrollingNode>(stateNode); > >- if (scrollingStateNode.hasChangedProperty(ScrollingStateNode::ScrollLayer)) >- m_scrollLayer = scrollingStateNode.layer(); >- > if (scrollingStateNode.hasChangedProperty(ScrollingStateFrameScrollingNode::CounterScrollingLayer)) > m_counterScrollingLayer = scrollingStateNode.counterScrollingLayer(); > >@@ -78,7 +75,7 @@ void ScrollingTreeFrameScrollingNodeIOS: > if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::RequestedScrollPosition)) > m_probableMainThreadScrollPosition = scrollingStateNode.requestedScrollPosition(); > else { >- CGPoint scrollLayerPosition = m_scrollLayer.get().position; >+ CGPoint scrollLayerPosition = scrolledContentsLayer().position; > m_probableMainThreadScrollPosition = IntPoint(-scrollLayerPosition.x, -scrollLayerPosition.y); > } > } >@@ -106,7 +103,7 @@ FloatPoint ScrollingTreeFrameScrollingNo > if (shouldUpdateScrollLayerPositionSynchronously()) > return m_probableMainThreadScrollPosition; > >- return -m_scrollLayer.get().position; >+ return -scrolledContentsLayer().position; > } > > void ScrollingTreeFrameScrollingNodeIOS::setScrollPosition(const FloatPoint& scrollPosition) >@@ -130,7 +127,7 @@ void ScrollingTreeFrameScrollingNodeIOS: > void ScrollingTreeFrameScrollingNodeIOS::setScrollLayerPosition(const FloatPoint& scrollPosition, const FloatRect&) > { > ASSERT(!shouldUpdateScrollLayerPositionSynchronously()); >- [m_scrollLayer setPosition:-scrollPosition]; >+ [scrolledContentsLayer() setPosition:-scrollPosition]; > > updateChildNodesAfterScroll(scrollPosition); > } >@@ -220,11 +217,6 @@ FloatPoint ScrollingTreeFrameScrollingNo > return position; > } > >-CALayer *ScrollingTreeFrameScrollingNodeIOS::scrollLayer() const >-{ >- return m_scrollLayer.get(); >-} >- > } // namespace WebCore > > #endif // ENABLE(ASYNC_SCROLLING) && PLATFORM(IOS_FAMILY) >Index: Source/WebCore/page/scrolling/mac/ScrollingTreeFixedNode.mm >=================================================================== >--- Source/WebCore/page/scrolling/mac/ScrollingTreeFixedNode.mm (revision 240855) >+++ Source/WebCore/page/scrolling/mac/ScrollingTreeFixedNode.mm (working copy) >@@ -56,7 +56,7 @@ void ScrollingTreeFixedNode::commitState > { > const ScrollingStateFixedNode& fixedStateNode = downcast<ScrollingStateFixedNode>(stateNode); > >- if (fixedStateNode.hasChangedProperty(ScrollingStateNode::ScrollLayer)) >+ if (fixedStateNode.hasChangedProperty(ScrollingStateNode::Layer)) > m_layer = fixedStateNode.layer(); > > if (stateNode.hasChangedProperty(ScrollingStateFixedNode::ViewportConstraints)) >Index: Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h >=================================================================== >--- Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h (revision 240855) >+++ Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h (working copy) >@@ -69,7 +69,6 @@ protected: > unsigned exposedUnfilledArea() const; > > private: >- RetainPtr<CALayer> m_scrollLayer; > RetainPtr<CALayer> m_rootContentsLayer; > RetainPtr<CALayer> m_counterScrollingLayer; > RetainPtr<CALayer> m_insetClipLayer; >Index: Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm >=================================================================== >--- Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm (revision 240855) >+++ Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm (working copy) >@@ -100,9 +100,6 @@ void ScrollingTreeFrameScrollingNodeMac: > ScrollingTreeFrameScrollingNode::commitStateBeforeChildren(stateNode); > const auto& scrollingStateNode = downcast<ScrollingStateFrameScrollingNode>(stateNode); > >- if (scrollingStateNode.hasChangedProperty(ScrollingStateNode::ScrollLayer)) >- m_scrollLayer = scrollingStateNode.layer(); >- > if (scrollingStateNode.hasChangedProperty(ScrollingStateFrameScrollingNode::RootContentsLayer)) > m_rootContentsLayer = scrollingStateNode.rootContentsLayer(); > >@@ -135,7 +132,7 @@ void ScrollingTreeFrameScrollingNodeMac: > if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::RequestedScrollPosition)) > m_probableMainThreadScrollPosition = scrollingStateNode.requestedScrollPosition(); > else { >- CGPoint scrollLayerPosition = m_scrollLayer.get().position; >+ CGPoint scrollLayerPosition = scrolledContentsLayer().position; > m_probableMainThreadScrollPosition = FloatPoint(-scrollLayerPosition.x, -scrollLayerPosition.y); > } > } >@@ -173,7 +170,7 @@ void ScrollingTreeFrameScrollingNodeMac: > if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::RequestedScrollPosition)) > setScrollPosition(scrollingStateNode.requestedScrollPosition()); > >- if (scrollingStateNode.hasChangedProperty(ScrollingStateNode::ScrollLayer) >+ if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrolledContentsLayer) > || scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::TotalContentsSize) > || scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrollableAreaSize)) > updateMainFramePinState(scrollPosition()); >@@ -221,7 +218,7 @@ FloatPoint ScrollingTreeFrameScrollingNo > if (shouldUpdateScrollLayerPositionSynchronously()) > return m_probableMainThreadScrollPosition; > >- return -m_scrollLayer.get().position; >+ return -scrolledContentsLayer().position; > } > > void ScrollingTreeFrameScrollingNodeMac::setScrollPosition(const FloatPoint& scrollPosition) >@@ -269,7 +266,7 @@ void ScrollingTreeFrameScrollingNodeMac: > { > ASSERT(!shouldUpdateScrollLayerPositionSynchronously()); > >- m_scrollLayer.get().position = -position; >+ scrolledContentsLayer().position = -position; > > FloatRect visibleContentRect(position, scrollableAreaSize()); > FloatRect fixedPositionRect; >@@ -384,7 +381,7 @@ unsigned ScrollingTreeFrameScrollingNode > Region paintedVisibleTiles; > > Deque<CALayer*> layerQueue; >- layerQueue.append(m_scrollLayer.get()); >+ layerQueue.append(scrolledContentsLayer()); > PlatformLayerList tiles; > > while (!layerQueue.isEmpty() && tiles.isEmpty()) { >Index: Source/WebCore/page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.h >=================================================================== >--- Source/WebCore/page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.h (revision 240855) >+++ Source/WebCore/page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.h (working copy) >@@ -58,11 +58,6 @@ private: > > ScrollingEventResult handleWheelEvent(const PlatformWheelEvent&) override; > >- >- RetainPtr<CALayer> m_scrollLayer; >- RetainPtr<CALayer> m_scrolledContentsLayer; >- >- > ScrollingTreeScrollingNodeDelegateMac m_delegate; > > }; >Index: Source/WebCore/page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm >=================================================================== >--- Source/WebCore/page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm (revision 240855) >+++ Source/WebCore/page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm (working copy) >@@ -54,13 +54,7 @@ void ScrollingTreeOverflowScrollingNodeM > { > ScrollingTreeOverflowScrollingNode::commitStateBeforeChildren(stateNode); > const auto& scrollingStateNode = downcast<ScrollingStateOverflowScrollingNode>(stateNode); >- >- if (scrollingStateNode.hasChangedProperty(ScrollingStateNode::ScrollLayer)) >- m_scrollLayer = scrollingStateNode.layer(); >- >- if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrolledContentsLayer)) >- m_scrolledContentsLayer = scrollingStateNode.scrolledContentsLayer(); >- >+ UNUSED_PARAM(scrollingStateNode); > // FIXME: Scroll snap data. > } > >@@ -108,7 +102,7 @@ void ScrollingTreeOverflowScrollingNodeM > > FloatPoint ScrollingTreeOverflowScrollingNodeMac::scrollPosition() const > { >- return -m_scrolledContentsLayer.get().position; >+ return -scrolledContentsLayer().position; > } > > void ScrollingTreeOverflowScrollingNodeMac::setScrollPosition(const FloatPoint& scrollPosition) >@@ -130,7 +124,7 @@ void ScrollingTreeOverflowScrollingNodeM > > void ScrollingTreeOverflowScrollingNodeMac::setScrollLayerPosition(const FloatPoint& scrollPosition, const FloatRect& fixedPositionRect) > { >- m_scrolledContentsLayer.get().position = -scrollPosition; >+ scrolledContentsLayer().position = -scrollPosition; > if (!m_children) > return; > >Index: Source/WebCore/page/scrolling/mac/ScrollingTreeStickyNode.mm >=================================================================== >--- Source/WebCore/page/scrolling/mac/ScrollingTreeStickyNode.mm (revision 240855) >+++ Source/WebCore/page/scrolling/mac/ScrollingTreeStickyNode.mm (working copy) >@@ -58,7 +58,7 @@ void ScrollingTreeStickyNode::commitStat > { > const ScrollingStateStickyNode& stickyStateNode = downcast<ScrollingStateStickyNode>(stateNode); > >- if (stickyStateNode.hasChangedProperty(ScrollingStateNode::ScrollLayer)) >+ if (stickyStateNode.hasChangedProperty(ScrollingStateNode::Layer)) > m_layer = stickyStateNode.layer(); > > if (stateNode.hasChangedProperty(ScrollingStateStickyNode::ViewportConstraints)) >Index: Source/WebCore/rendering/RenderLayerCompositor.cpp >=================================================================== >--- Source/WebCore/rendering/RenderLayerCompositor.cpp (revision 240855) >+++ Source/WebCore/rendering/RenderLayerCompositor.cpp (working copy) >@@ -544,19 +544,22 @@ void RenderLayerCompositor::didChangePla > > auto* backing = layer.backing(); > if (auto nodeID = backing->scrollingNodeIDForRole(ScrollCoordinationRole::ViewportConstrained)) >- scrollingCoordinator->setNodeLayers(nodeID, backing->graphicsLayer()); >+ scrollingCoordinator->setNodeLayers(nodeID, { backing->graphicsLayer() }); > > if (auto nodeID = backing->scrollingNodeIDForRole(ScrollCoordinationRole::Scrolling)) { > // FIXME: would be nice to not have to special-case the root. >+ ScrollingCoordinator::NodeLayers nodeLayers; > if (layer.isRenderViewLayer()) { >- // FIXME: Reorganize the layers and pass the scrolledContentsLayer. >- scrollingCoordinator->setNodeLayers(nodeID, m_scrollLayer.get(), nullptr, fixedRootBackgroundLayer(), clipLayer(), m_rootContentsLayer.get()); >+ // FIXME: Reorganize the layers and pass the scrollContainerLayer. >+ nodeLayers = { nullptr, nullptr, m_scrollLayer.get(), fixedRootBackgroundLayer(), clipLayer(), m_rootContentsLayer.get() }; > } else >- scrollingCoordinator->setNodeLayers(nodeID, backing->scrollingLayer(), backing->scrollingContentsLayer()); >+ nodeLayers = { layer.backing()->graphicsLayer(), backing->scrollingLayer(), backing->scrollingContentsLayer() }; >+ >+ scrollingCoordinator->setNodeLayers(nodeID, nodeLayers); > } > > if (auto nodeID = backing->scrollingNodeIDForRole(ScrollCoordinationRole::FrameHosting)) >- scrollingCoordinator->setNodeLayers(nodeID, backing->graphicsLayer()); >+ scrollingCoordinator->setNodeLayers(nodeID, { backing->graphicsLayer() }); > } > > void RenderLayerCompositor::didPaintBacking(RenderLayerBacking*) >@@ -3905,7 +3908,7 @@ ScrollingNodeID RenderLayerCompositor::u > LOG_WITH_STREAM(Compositing, stream << "Registering ViewportConstrained " << nodeType << " node " << newNodeID << " (layer " << layer.backing()->graphicsLayer()->primaryLayerID() << ") as child of " << treeState.parentNodeID.valueOr(0)); > > if (changes & ScrollingNodeChangeFlags::Layer) >- scrollingCoordinator->setNodeLayers(newNodeID, layer.backing()->graphicsLayer()); >+ scrollingCoordinator->setNodeLayers(newNodeID, { layer.backing()->graphicsLayer() }); > > if (changes & ScrollingNodeChangeFlags::LayerGeometry) { > switch (nodeType) { >@@ -4009,7 +4012,7 @@ ScrollingNodeID RenderLayerCompositor::u > } > > if (changes & ScrollingNodeChangeFlags::Layer) >- scrollingCoordinator->setNodeLayers(newNodeID, m_scrollLayer.get(), nullptr, fixedRootBackgroundLayer(), clipLayer(), m_rootContentsLayer.get()); >+ scrollingCoordinator->setNodeLayers(newNodeID, { nullptr, nullptr, m_scrollLayer.get(), fixedRootBackgroundLayer(), clipLayer(), m_rootContentsLayer.get() }); > > if (changes & ScrollingNodeChangeFlags::LayerGeometry) { > ScrollingCoordinator::ScrollingGeometry scrollingGeometry; >@@ -4024,7 +4027,7 @@ ScrollingNodeID RenderLayerCompositor::u > } > > if (changes & ScrollingNodeChangeFlags::Layer) >- scrollingCoordinator->setNodeLayers(newNodeID, layer.backing()->scrollingLayer(), layer.backing()->scrollingContentsLayer()); >+ scrollingCoordinator->setNodeLayers(newNodeID, { layer.backing()->graphicsLayer(), layer.backing()->scrollingLayer(), layer.backing()->scrollingContentsLayer() }); > > if (changes & ScrollingNodeChangeFlags::LayerGeometry && treeState.parentNodeID) { > RenderLayer* scrollingAncestorLayer = m_scrollingNodeToLayerMap.get(treeState.parentNodeID.value()); >@@ -4048,7 +4051,7 @@ ScrollingNodeID RenderLayerCompositor::u > } > > if (changes & ScrollingNodeChangeFlags::Layer) >- scrollingCoordinator->setNodeLayers(newNodeID, layer.backing()->graphicsLayer()); >+ scrollingCoordinator->setNodeLayers(newNodeID, { layer.backing()->graphicsLayer() }); > > if (changes & ScrollingNodeChangeFlags::LayerGeometry && treeState.parentNodeID) { > RenderLayer* scrollingAncestorLayer = m_scrollingNodeToLayerMap.get(treeState.parentNodeID.value()); >Index: Source/WebKit/ChangeLog >=================================================================== >--- Source/WebKit/ChangeLog (revision 240855) >+++ Source/WebKit/ChangeLog (working copy) >@@ -1,3 +1,28 @@ >+2019-02-01 Antti Koivisto <antti@apple.com> >+ >+ Don't use base layer() as the scroll layer in scrolling tree. >+ https://bugs.webkit.org/show_bug.cgi?id=194160 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp: >+ (ArgumentCoder<ScrollingStateNode>::encode): >+ (ArgumentCoder<ScrollingStateNode>::decode): >+ (ArgumentCoder<ScrollingStateScrollingNode>::encode): >+ (ArgumentCoder<ScrollingStateScrollingNode>::decode): >+ (WebKit::dump): >+ * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp: >+ (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers): >+ * UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm: >+ (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers): >+ * UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.mm: >+ (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::commitStateBeforeChildren): >+ * UIProcess/RemoteLayerTree/ios/ScrollingTreeOverflowScrollingNodeIOS.mm: >+ (WebKit::ScrollingTreeOverflowScrollingNodeIOS::commitStateBeforeChildren): >+ * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm: >+ (WebKit::ScrollingTreeScrollingNodeDelegateIOS::commitStateBeforeChildren): >+ (WebKit::ScrollingTreeScrollingNodeDelegateIOS::commitStateAfterChildren): >+ > 2019-02-01 Michael Catanzaro <mcatanzaro@igalia.com> > > [SOUP] Improve use of PAL::SessionID in WebKitCookieManager >Index: Source/WebKit/Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp >=================================================================== >--- Source/WebKit/Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp (revision 240855) >+++ Source/WebKit/Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp (working copy) >@@ -90,7 +90,7 @@ void ArgumentCoder<ScrollingStateNode>:: > encoder << node.parentNodeID(); > encoder << node.changedProperties(); > >- if (node.hasChangedProperty(ScrollingStateNode::ScrollLayer)) >+ if (node.hasChangedProperty(ScrollingStateNode::Layer)) > encoder << static_cast<GraphicsLayer::PlatformLayerID>(node.layer()); > } > >@@ -102,7 +102,7 @@ bool ArgumentCoder<ScrollingStateNode>:: > return false; > > node.setChangedProperties(changedProperties); >- if (node.hasChangedProperty(ScrollingStateNode::ScrollLayer)) { >+ if (node.hasChangedProperty(ScrollingStateNode::Layer)) { > GraphicsLayer::PlatformLayerID layerID; > if (!decoder.decode(layerID)) > return false; >@@ -141,6 +141,8 @@ void ArgumentCoder<ScrollingStateScrolli > SCROLLING_NODE_ENCODE(ScrollingStateScrollingNode::RequestedScrollPosition, requestedScrollPosition) > SCROLLING_NODE_ENCODE(ScrollingStateScrollingNode::RequestedScrollPosition, requestedScrollPositionRepresentsProgrammaticScroll) > >+ if (node.hasChangedProperty(ScrollingStateScrollingNode::ScrollContainerLayer)) >+ encoder << static_cast<GraphicsLayer::PlatformLayerID>(node.scrollContainerLayer()); > if (node.hasChangedProperty(ScrollingStateScrollingNode::ScrolledContentsLayer)) > encoder << static_cast<GraphicsLayer::PlatformLayerID>(node.scrolledContentsLayer()); > } >@@ -238,6 +240,13 @@ bool ArgumentCoder<ScrollingStateScrolli > node.setRequestedScrollPosition(scrollPosition, representsProgrammaticScroll); > } > >+ if (node.hasChangedProperty(ScrollingStateScrollingNode::ScrollContainerLayer)) { >+ GraphicsLayer::PlatformLayerID layerID; >+ if (!decoder.decode(layerID)) >+ return false; >+ node.setScrollContainerLayer(layerID); >+ } >+ > if (node.hasChangedProperty(ScrollingStateScrollingNode::ScrolledContentsLayer)) { > GraphicsLayer::PlatformLayerID layerID; > if (!decoder.decode(layerID)) >@@ -514,6 +523,9 @@ static void dump(TextStream& ts, const S > ts.dumpProperty("requested-scroll-position-is-programatic", node.requestedScrollPositionRepresentsProgrammaticScroll()); > } > >+ if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateScrollingNode::ScrollContainerLayer)) >+ ts.dumpProperty("scroll-container-layer", static_cast<GraphicsLayer::PlatformLayerID>(node.scrollContainerLayer())); >+ > if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateScrollingNode::ScrolledContentsLayer)) > ts.dumpProperty("scrolled-contents-layer", static_cast<GraphicsLayer::PlatformLayerID>(node.scrolledContentsLayer())); > } >@@ -601,7 +613,7 @@ static void dump(TextStream& ts, const S > { > ts.dumpProperty("type", node.nodeType()); > >- if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateNode::ScrollLayer)) >+ if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateNode::Layer)) > ts.dumpProperty("layer", static_cast<GraphicsLayer::PlatformLayerID>(node.layer())); > > switch (node.nodeType()) { >Index: Source/WebKit/UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp >=================================================================== >--- Source/WebKit/UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp (revision 240855) >+++ Source/WebKit/UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp (working copy) >@@ -99,7 +99,7 @@ void RemoteScrollingCoordinatorProxy::co > void RemoteScrollingCoordinatorProxy::connectStateNodeLayers(ScrollingStateTree& stateTree, const RemoteLayerTreeHost& layerTreeHost) > { > for (auto& currNode : stateTree.nodeMap().values()) { >- if (currNode->hasChangedProperty(ScrollingStateNode::ScrollLayer)) >+ if (currNode->hasChangedProperty(ScrollingStateNode::Layer)) > currNode->setLayer(layerTreeHost.layerForID(currNode->layer())); > > switch (currNode->nodeType()) { >@@ -107,6 +107,9 @@ void RemoteScrollingCoordinatorProxy::co > case ScrollingNodeType::Subframe: { > ScrollingStateFrameScrollingNode& scrollingStateNode = downcast<ScrollingStateFrameScrollingNode>(*currNode); > >+ if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrollContainerLayer)) >+ scrollingStateNode.setScrollContainerLayer(layerTreeHost.layerForID(scrollingStateNode.scrollContainerLayer())); >+ > if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrolledContentsLayer)) > scrollingStateNode.setScrolledContentsLayer(layerTreeHost.layerForID(scrollingStateNode.scrolledContentsLayer())); > >@@ -135,6 +138,8 @@ void RemoteScrollingCoordinatorProxy::co > } > case ScrollingNodeType::Overflow: { > ScrollingStateOverflowScrollingNode& scrollingStateNode = downcast<ScrollingStateOverflowScrollingNode>(*currNode); >+ if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrollContainerLayer)) >+ scrollingStateNode.setScrollContainerLayer(layerTreeHost.layerForID(scrollingStateNode.scrollContainerLayer())); > > if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrolledContentsLayer)) > scrollingStateNode.setScrolledContentsLayer(layerTreeHost.layerForID(scrollingStateNode.scrolledContentsLayer())); >Index: Source/WebKit/UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm >=================================================================== >--- Source/WebKit/UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm (revision 240855) >+++ Source/WebKit/UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm (working copy) >@@ -50,13 +50,16 @@ using namespace WebCore; > void RemoteScrollingCoordinatorProxy::connectStateNodeLayers(ScrollingStateTree& stateTree, const RemoteLayerTreeHost& layerTreeHost) > { > for (auto& currNode : stateTree.nodeMap().values()) { >+ if (currNode->hasChangedProperty(ScrollingStateNode::Layer)) >+ currNode->setLayer(layerTreeHost.layerForID(currNode->layer())); >+ > switch (currNode->nodeType()) { > case ScrollingNodeType::Overflow: { > ScrollingStateOverflowScrollingNode& scrollingStateNode = downcast<ScrollingStateOverflowScrollingNode>(*currNode); >- >- if (scrollingStateNode.hasChangedProperty(ScrollingStateNode::ScrollLayer)) >- scrollingStateNode.setLayer(layerTreeHost.layerForID(scrollingStateNode.layer())); >- >+ >+ if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrollContainerLayer)) >+ scrollingStateNode.setScrollContainerLayer(layerTreeHost.layerForID(scrollingStateNode.scrollContainerLayer())); >+ > if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrolledContentsLayer)) > scrollingStateNode.setScrolledContentsLayer(layerTreeHost.layerForID(scrollingStateNode.scrolledContentsLayer())); > break; >@@ -64,9 +67,9 @@ void RemoteScrollingCoordinatorProxy::co > case ScrollingNodeType::MainFrame: > case ScrollingNodeType::Subframe: { > ScrollingStateFrameScrollingNode& scrollingStateNode = downcast<ScrollingStateFrameScrollingNode>(*currNode); >- >- if (scrollingStateNode.hasChangedProperty(ScrollingStateNode::ScrollLayer)) >- scrollingStateNode.setLayer(layerTreeHost.layerForID(scrollingStateNode.layer())); >+ >+ if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrollContainerLayer)) >+ scrollingStateNode.setScrollContainerLayer(layerTreeHost.layerForID(scrollingStateNode.scrollContainerLayer())); > > if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrolledContentsLayer)) > scrollingStateNode.setScrolledContentsLayer(layerTreeHost.layerForID(scrollingStateNode.scrolledContentsLayer())); >@@ -85,8 +88,6 @@ void RemoteScrollingCoordinatorProxy::co > case ScrollingNodeType::Fixed: > case ScrollingNodeType::Sticky: > case ScrollingNodeType::FrameHosting: >- if (currNode->hasChangedProperty(ScrollingStateNode::ScrollLayer)) >- currNode->setLayer(layerTreeHost.layerForID(currNode->layer())); > break; > } > } >Index: Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.mm >=================================================================== >--- Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.mm (revision 240855) >+++ Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.mm (working copy) >@@ -52,8 +52,9 @@ void ScrollingTreeFrameScrollingNodeRemo > { > ScrollingTreeFrameScrollingNodeIOS::commitStateBeforeChildren(stateNode); > >- if (stateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrollLayer)) { >- if (scrollLayer() && [[scrollLayer() delegate] isKindOfClass:[UIScrollView self]]) >+ // FIXME: Should be ScrollContainerLayer. >+ if (stateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrolledContentsLayer)) { >+ if (scrolledContentsLayer() && [[scrolledContentsLayer() delegate] isKindOfClass:[UIScrollView self]]) > m_scrollingNodeDelegate = std::make_unique<ScrollingTreeScrollingNodeDelegateIOS>(*this); > else > m_scrollingNodeDelegate = nullptr; >Index: Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeOverflowScrollingNodeIOS.mm >=================================================================== >--- Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeOverflowScrollingNodeIOS.mm (revision 240855) >+++ Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeOverflowScrollingNodeIOS.mm (working copy) >@@ -53,7 +53,7 @@ ScrollingTreeOverflowScrollingNodeIOS::~ > > void ScrollingTreeOverflowScrollingNodeIOS::commitStateBeforeChildren(const WebCore::ScrollingStateNode& stateNode) > { >- if (stateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrollLayer)) >+ if (stateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrollContainerLayer)) > m_scrollingNodeDelegate->resetScrollViewDelegate(); > > ScrollingTreeOverflowScrollingNode::commitStateBeforeChildren(stateNode); >Index: Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm >=================================================================== >--- Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm (revision 240855) >+++ Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm (working copy) >@@ -194,17 +194,27 @@ void ScrollingTreeScrollingNodeDelegateI > > void ScrollingTreeScrollingNodeDelegateIOS::commitStateBeforeChildren(const ScrollingStateScrollingNode& scrollingStateNode) > { >- if (scrollingStateNode.hasChangedProperty(ScrollingStateNode::ScrollLayer)) >- m_scrollLayer = scrollingStateNode.layer(); >+ if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrollContainerLayer)) { >+ RetainPtr<CALayer> layer; >+ layer = scrollingStateNode.scrollContainerLayer(); >+ if ([[layer delegate] isKindOfClass:[UIScrollView self]]) >+ m_scrollLayer = layer; >+ } > >- if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrolledContentsLayer)) >- m_scrolledContentsLayer = scrollingStateNode.scrolledContentsLayer(); >+ // FIMXE: ScrollContainerLayer should always be the UIScrollView layer. >+ if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrolledContentsLayer)) { >+ RetainPtr<CALayer> layer; >+ layer = scrollingStateNode.scrolledContentsLayer(); >+ if ([[layer delegate] isKindOfClass:[UIScrollView self]]) >+ m_scrollLayer = layer; >+ } > } > > void ScrollingTreeScrollingNodeDelegateIOS::commitStateAfterChildren(const ScrollingStateScrollingNode& scrollingStateNode) > { > SetForScope<bool> updatingChange(m_updatingFromStateNode, true); >- if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrollLayer) >+ if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrollContainerLayer) >+ || scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrolledContentsLayer) > || scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::TotalContentsSize) > || scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ReachableContentsSize) > || scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrollPosition) >@@ -213,7 +223,8 @@ void ScrollingTreeScrollingNodeDelegateI > UIScrollView *scrollView = (UIScrollView *)[scrollLayer() delegate]; > ASSERT([scrollView isKindOfClass:[UIScrollView self]]); > >- if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrollLayer)) { >+ if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrollContainerLayer) >+ || scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrolledContentsLayer)) { > if (!m_scrollViewDelegate) > m_scrollViewDelegate = adoptNS([[WKScrollingNodeScrollViewDelegate alloc] initWithScrollingTreeNodeDelegate:this]); >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
simon.fraser
:
review+
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 194160
:
360864
|
360869
|
360876
|
360878