Changeset 161194 in webkit
- Timestamp:
- Jan 1, 2014, 11:53:21 AM (12 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 13 edited
-
ChangeLog (modified) (1 diff)
-
page/scrolling/ScrollingStateNode.h (modified) (1 diff)
-
page/scrolling/ScrollingTree.cpp (modified) (5 diffs)
-
page/scrolling/ScrollingTree.h (modified) (1 diff)
-
page/scrolling/ScrollingTreeNode.h (modified) (1 diff)
-
page/scrolling/ScrollingTreeScrollingNode.cpp (modified) (1 diff)
-
page/scrolling/ScrollingTreeScrollingNode.h (modified) (1 diff)
-
page/scrolling/mac/ScrollingTreeFixedNode.h (modified) (1 diff)
-
page/scrolling/mac/ScrollingTreeFixedNode.mm (modified) (1 diff)
-
page/scrolling/mac/ScrollingTreeScrollingNodeMac.h (modified) (1 diff)
-
page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm (modified) (2 diffs)
-
page/scrolling/mac/ScrollingTreeStickyNode.h (modified) (1 diff)
-
page/scrolling/mac/ScrollingTreeStickyNode.mm (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r161192 r161194 1 2014-01-01 Simon Fraser <simon.fraser@apple.com> 2 3 Updating the scrolling tree should use references to state nodes 4 https://bugs.webkit.org/show_bug.cgi?id=126360 5 6 Reviewed by Anders Carlsson. 7 8 Change functions related to ScrollingTreeNode updating to take 9 const references to state nodes rather than pointers. 10 11 * page/scrolling/ScrollingStateNode.h: 12 (WebCore::ScrollingStateNode::hasChangedProperty): 13 * page/scrolling/ScrollingTree.cpp: 14 (WebCore::ScrollingTree::commitNewTreeState): 15 (WebCore::ScrollingTree::updateTreeFromStateNode): The node can be nil so 16 this continues to take a pointer. 17 (WebCore::ScrollingTree::removeDestroyedNodes): 18 * page/scrolling/ScrollingTree.h: 19 * page/scrolling/ScrollingTreeNode.h: 20 (WebCore::ScrollingTreeNode::updateAfterChildren): 21 * page/scrolling/ScrollingTreeScrollingNode.cpp: 22 (WebCore::ScrollingTreeScrollingNode::updateBeforeChildren): 23 * page/scrolling/ScrollingTreeScrollingNode.h: 24 * page/scrolling/mac/ScrollingTreeFixedNode.h: 25 * page/scrolling/mac/ScrollingTreeFixedNode.mm: 26 (WebCore::ScrollingTreeFixedNode::updateBeforeChildren): 27 * page/scrolling/mac/ScrollingTreeScrollingNodeMac.h: 28 * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm: 29 (WebCore::ScrollingTreeScrollingNodeMac::updateBeforeChildren): 30 (WebCore::ScrollingTreeScrollingNodeMac::updateAfterChildren): 31 * page/scrolling/mac/ScrollingTreeStickyNode.h: 32 * page/scrolling/mac/ScrollingTreeStickyNode.mm: 33 (WebCore::ScrollingTreeStickyNode::updateBeforeChildren): 34 1 35 2014-01-01 Simon Fraser <simon.fraser@apple.com> 2 36 -
trunk/Source/WebCore/page/scrolling/ScrollingStateNode.h
r161191 r161194 63 63 64 64 bool hasChangedProperties() const { return m_changedProperties; } 65 bool hasChangedProperty(unsigned propertyBit) { return m_changedProperties & (1 << propertyBit); }65 bool hasChangedProperty(unsigned propertyBit) const { return m_changedProperties & (1 << propertyBit); } 66 66 void resetChangedProperties() { m_changedProperties = 0; } 67 67 void setPropertyChanged(unsigned propertyBit) { m_changedProperties |= (1 << propertyBit); } -
trunk/Source/WebCore/page/scrolling/ScrollingTree.cpp
r161190 r161194 147 147 TemporaryChange<bool> changeHandlingProgrammaticScroll(m_isHandlingProgrammaticScroll, scrollRequestIsProgammatic); 148 148 149 removeDestroyedNodes( scrollingStateTree.get());149 removeDestroyedNodes(*scrollingStateTree); 150 150 updateTreeFromStateNode(rootNode); 151 151 } 152 152 153 void ScrollingTree::updateTreeFromStateNode( ScrollingStateNode* stateNode)153 void ScrollingTree::updateTreeFromStateNode(const ScrollingStateNode* stateNode) 154 154 { 155 155 if (!stateNode) { … … 166 166 if (it != m_nodeMap.end()) { 167 167 node = it->value; 168 node->updateBeforeChildren( stateNode);168 node->updateBeforeChildren(*stateNode); 169 169 } else { 170 170 // If the node isn't found, it's either new and needs to be added to the tree, or there is a new ID for our … … 177 177 m_rootNode = ScrollingTreeScrollingNode::create(*this, nodeID); 178 178 m_nodeMap.set(nodeID, m_rootNode.get()); 179 m_rootNode->updateBeforeChildren( stateNode);179 m_rootNode->updateBeforeChildren(*stateNode); 180 180 node = m_rootNode.get(); 181 181 } else { … … 202 202 parent->appendChild(newNode.release()); 203 203 } 204 node->updateBeforeChildren( stateNode);204 node->updateBeforeChildren(*stateNode); 205 205 } 206 206 } … … 213 213 updateTreeFromStateNode(stateNodeChildren->at(i).get()); 214 214 } 215 node->updateAfterChildren( stateNode);216 } 217 218 void ScrollingTree::removeDestroyedNodes( ScrollingStateTree*stateTree)219 { 220 const Vector<ScrollingNodeID>& removedNodes = stateTree ->removedNodes();215 node->updateAfterChildren(*stateNode); 216 } 217 218 void ScrollingTree::removeDestroyedNodes(const ScrollingStateTree& stateTree) 219 { 220 const Vector<ScrollingNodeID>& removedNodes = stateTree.removedNodes(); 221 221 size_t size = removedNodes.size(); 222 222 for (size_t i = 0; i < size; ++i) { -
trunk/Source/WebCore/page/scrolling/ScrollingTree.h
r160944 r161194 113 113 explicit ScrollingTree(ScrollingCoordinator*); 114 114 115 void removeDestroyedNodes( ScrollingStateTree*);116 void updateTreeFromStateNode( ScrollingStateNode*);115 void removeDestroyedNodes(const ScrollingStateTree&); 116 void updateTreeFromStateNode(const ScrollingStateNode*); 117 117 118 118 RefPtr<ScrollingCoordinator> m_scrollingCoordinator; -
trunk/Source/WebCore/page/scrolling/ScrollingTreeNode.h
r160944 r161194 44 44 virtual ~ScrollingTreeNode(); 45 45 46 virtual void updateBeforeChildren( ScrollingStateNode*) = 0;47 virtual void updateAfterChildren( ScrollingStateNode*) { }46 virtual void updateBeforeChildren(const ScrollingStateNode&) = 0; 47 virtual void updateAfterChildren(const ScrollingStateNode&) { } 48 48 49 49 virtual void parentScrollPositionDidChange(const IntRect& viewportRect, const FloatSize& cumulativeDelta) = 0; -
trunk/Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.cpp
r160944 r161194 48 48 } 49 49 50 void ScrollingTreeScrollingNode::updateBeforeChildren( ScrollingStateNode*stateNode)50 void ScrollingTreeScrollingNode::updateBeforeChildren(const ScrollingStateNode& stateNode) 51 51 { 52 ScrollingStateScrollingNode*state = toScrollingStateScrollingNode(stateNode);52 const ScrollingStateScrollingNode& state = toScrollingStateScrollingNode(stateNode); 53 53 54 if (state ->hasChangedProperty(ScrollingStateScrollingNode::ViewportRect))55 m_viewportRect = state ->viewportRect();54 if (state.hasChangedProperty(ScrollingStateScrollingNode::ViewportRect)) 55 m_viewportRect = state.viewportRect(); 56 56 57 if (state ->hasChangedProperty(ScrollingStateScrollingNode::TotalContentsSize)) {57 if (state.hasChangedProperty(ScrollingStateScrollingNode::TotalContentsSize)) { 58 58 if (scrollingTree().isRubberBandInProgress()) 59 59 m_totalContentsSizeForRubberBand = m_totalContentsSize; 60 60 else 61 m_totalContentsSizeForRubberBand = state ->totalContentsSize();62 m_totalContentsSize = state ->totalContentsSize();61 m_totalContentsSizeForRubberBand = state.totalContentsSize(); 62 m_totalContentsSize = state.totalContentsSize(); 63 63 } 64 64 65 if (state ->hasChangedProperty(ScrollingStateScrollingNode::ScrollOrigin))66 m_scrollOrigin = state ->scrollOrigin();65 if (state.hasChangedProperty(ScrollingStateScrollingNode::ScrollOrigin)) 66 m_scrollOrigin = state.scrollOrigin(); 67 67 68 if (state ->hasChangedProperty(ScrollingStateScrollingNode::ScrollableAreaParams))69 m_scrollableAreaParameters = state ->scrollableAreaParameters();68 if (state.hasChangedProperty(ScrollingStateScrollingNode::ScrollableAreaParams)) 69 m_scrollableAreaParameters = state.scrollableAreaParameters(); 70 70 71 if (state ->hasChangedProperty(ScrollingStateScrollingNode::FrameScaleFactor))72 m_frameScaleFactor = state ->frameScaleFactor();71 if (state.hasChangedProperty(ScrollingStateScrollingNode::FrameScaleFactor)) 72 m_frameScaleFactor = state.frameScaleFactor(); 73 73 74 if (state ->hasChangedProperty(ScrollingStateScrollingNode::ReasonsForSynchronousScrolling))75 m_synchronousScrollingReasons = state ->synchronousScrollingReasons();74 if (state.hasChangedProperty(ScrollingStateScrollingNode::ReasonsForSynchronousScrolling)) 75 m_synchronousScrollingReasons = state.synchronousScrollingReasons(); 76 76 77 if (state ->hasChangedProperty(ScrollingStateScrollingNode::HeaderHeight))78 m_headerHeight = state ->headerHeight();77 if (state.hasChangedProperty(ScrollingStateScrollingNode::HeaderHeight)) 78 m_headerHeight = state.headerHeight(); 79 79 80 if (state ->hasChangedProperty(ScrollingStateScrollingNode::FooterHeight))81 m_footerHeight = state ->footerHeight();80 if (state.hasChangedProperty(ScrollingStateScrollingNode::FooterHeight)) 81 m_footerHeight = state.footerHeight(); 82 82 83 if (state ->hasChangedProperty(ScrollingStateScrollingNode::BehaviorForFixedElements))84 m_behaviorForFixed = state ->scrollBehaviorForFixedElements();83 if (state.hasChangedProperty(ScrollingStateScrollingNode::BehaviorForFixedElements)) 84 m_behaviorForFixed = state.scrollBehaviorForFixedElements(); 85 85 } 86 86 -
trunk/Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.h
r160944 r161194 46 46 virtual ~ScrollingTreeScrollingNode(); 47 47 48 virtual void updateBeforeChildren( ScrollingStateNode*) OVERRIDE;48 virtual void updateBeforeChildren(const ScrollingStateNode&) OVERRIDE; 49 49 50 50 // FIXME: We should implement this when we support ScrollingTreeScrollingNodes as children. -
trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeFixedNode.h
r160944 r161194 48 48 ScrollingTreeFixedNode(ScrollingTree&, ScrollingNodeID); 49 49 50 virtual void updateBeforeChildren( ScrollingStateNode*) OVERRIDE;50 virtual void updateBeforeChildren(const ScrollingStateNode&) OVERRIDE; 51 51 virtual void parentScrollPositionDidChange(const IntRect& viewportRect, const FloatSize& cumulativeDelta) OVERRIDE; 52 52 -
trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeFixedNode.mm
r160944 r161194 48 48 } 49 49 50 void ScrollingTreeFixedNode::updateBeforeChildren( ScrollingStateNode*stateNode)50 void ScrollingTreeFixedNode::updateBeforeChildren(const ScrollingStateNode& stateNode) 51 51 { 52 ScrollingStateFixedNode*fixedStateNode = toScrollingStateFixedNode(stateNode);52 const ScrollingStateFixedNode& fixedStateNode = toScrollingStateFixedNode(stateNode); 53 53 54 if (fixedStateNode ->hasChangedProperty(ScrollingStateNode::ScrollLayer))55 m_layer = fixedStateNode ->platformScrollLayer();54 if (fixedStateNode.hasChangedProperty(ScrollingStateNode::ScrollLayer)) 55 m_layer = fixedStateNode.platformScrollLayer(); 56 56 57 if (stateNode ->hasChangedProperty(ScrollingStateFixedNode::ViewportConstraints))58 m_constraints = fixedStateNode ->viewportConstraints();57 if (stateNode.hasChangedProperty(ScrollingStateFixedNode::ViewportConstraints)) 58 m_constraints = fixedStateNode.viewportConstraints(); 59 59 } 60 60 -
trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.h
r160944 r161194 45 45 private: 46 46 // ScrollingTreeNode member functions. 47 virtual void updateBeforeChildren( ScrollingStateNode*) OVERRIDE;48 virtual void updateAfterChildren( ScrollingStateNode*) OVERRIDE;47 virtual void updateBeforeChildren(const ScrollingStateNode&) OVERRIDE; 48 virtual void updateAfterChildren(const ScrollingStateNode&) OVERRIDE; 49 49 virtual void handleWheelEvent(const PlatformWheelEvent&) OVERRIDE; 50 50 -
trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm
r160944 r161194 71 71 } 72 72 73 void ScrollingTreeScrollingNodeMac::updateBeforeChildren( ScrollingStateNode*stateNode)73 void ScrollingTreeScrollingNodeMac::updateBeforeChildren(const ScrollingStateNode& stateNode) 74 74 { 75 75 ScrollingTreeScrollingNode::updateBeforeChildren(stateNode); 76 ScrollingStateScrollingNode*scrollingStateNode = toScrollingStateScrollingNode(stateNode);77 78 if (scrollingStateNode ->hasChangedProperty(ScrollingStateNode::ScrollLayer))79 m_scrollLayer = scrollingStateNode ->platformScrollLayer();80 81 if (scrollingStateNode ->hasChangedProperty(ScrollingStateScrollingNode::CounterScrollingLayer))82 m_counterScrollingLayer = scrollingStateNode ->counterScrollingPlatformLayer();83 84 if (scrollingStateNode ->hasChangedProperty(ScrollingStateScrollingNode::HeaderLayer))85 m_headerLayer = scrollingStateNode ->headerPlatformLayer();86 87 if (scrollingStateNode ->hasChangedProperty(ScrollingStateScrollingNode::FooterLayer))88 m_footerLayer = scrollingStateNode ->footerPlatformLayer();89 90 if (scrollingStateNode ->hasChangedProperty(ScrollingStateScrollingNode::PainterForScrollbar)) {91 m_verticalScrollbarPainter = scrollingStateNode ->verticalScrollbarPainter();92 m_horizontalScrollbarPainter = scrollingStateNode ->horizontalScrollbarPainter();93 } 94 95 if (scrollingStateNode ->hasChangedProperty(ScrollingStateScrollingNode::ReasonsForSynchronousScrolling)) {76 const auto& scrollingStateNode = toScrollingStateScrollingNode(stateNode); 77 78 if (scrollingStateNode.hasChangedProperty(ScrollingStateNode::ScrollLayer)) 79 m_scrollLayer = scrollingStateNode.platformScrollLayer(); 80 81 if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::CounterScrollingLayer)) 82 m_counterScrollingLayer = scrollingStateNode.counterScrollingPlatformLayer(); 83 84 if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::HeaderLayer)) 85 m_headerLayer = scrollingStateNode.headerPlatformLayer(); 86 87 if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::FooterLayer)) 88 m_footerLayer = scrollingStateNode.footerPlatformLayer(); 89 90 if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::PainterForScrollbar)) { 91 m_verticalScrollbarPainter = scrollingStateNode.verticalScrollbarPainter(); 92 m_horizontalScrollbarPainter = scrollingStateNode.horizontalScrollbarPainter(); 93 } 94 95 if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ReasonsForSynchronousScrolling)) { 96 96 if (shouldUpdateScrollLayerPositionSynchronously()) { 97 97 // We're transitioning to the slow "update scroll layer position on the main thread" mode. 98 98 // Initialize the probable main thread scroll position with the current scroll layer position. 99 if (scrollingStateNode ->hasChangedProperty(ScrollingStateScrollingNode::RequestedScrollPosition))100 m_probableMainThreadScrollPosition = scrollingStateNode ->requestedScrollPosition();99 if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::RequestedScrollPosition)) 100 m_probableMainThreadScrollPosition = scrollingStateNode.requestedScrollPosition(); 101 101 else { 102 102 CGPoint scrollLayerPosition = m_scrollLayer.get().position; … … 109 109 } 110 110 111 if (scrollingStateNode ->hasChangedProperty(ScrollingStateScrollingNode::WheelEventHandlerCount)) {111 if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::WheelEventHandlerCount)) { 112 112 if (scrollingTree().scrollingPerformanceLoggingEnabled()) 113 logWheelEventHandlerCountChanged(scrollingStateNode ->wheelEventHandlerCount());114 } 115 } 116 117 void ScrollingTreeScrollingNodeMac::updateAfterChildren( ScrollingStateNode*stateNode)113 logWheelEventHandlerCountChanged(scrollingStateNode.wheelEventHandlerCount()); 114 } 115 } 116 117 void ScrollingTreeScrollingNodeMac::updateAfterChildren(const ScrollingStateNode& stateNode) 118 118 { 119 119 ScrollingTreeScrollingNode::updateAfterChildren(stateNode); 120 120 121 ScrollingStateScrollingNode*scrollingStateNode = toScrollingStateScrollingNode(stateNode);121 const auto& scrollingStateNode = toScrollingStateScrollingNode(stateNode); 122 122 123 123 // Update the scroll position after child nodes have been updated, because they need to have updated their constraints before any scrolling happens. 124 if (scrollingStateNode ->hasChangedProperty(ScrollingStateScrollingNode::RequestedScrollPosition))125 setScrollPosition(scrollingStateNode ->requestedScrollPosition());126 127 if (scrollingStateNode ->hasChangedProperty(ScrollingStateNode::ScrollLayer) || scrollingStateNode->hasChangedProperty(ScrollingStateScrollingNode::TotalContentsSize) || scrollingStateNode->hasChangedProperty(ScrollingStateScrollingNode::ViewportRect))124 if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::RequestedScrollPosition)) 125 setScrollPosition(scrollingStateNode.requestedScrollPosition()); 126 127 if (scrollingStateNode.hasChangedProperty(ScrollingStateNode::ScrollLayer) || scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::TotalContentsSize) || scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ViewportRect)) 128 128 updateMainFramePinState(scrollPosition()); 129 129 } -
trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeStickyNode.h
r160944 r161194 48 48 ScrollingTreeStickyNode(ScrollingTree&, ScrollingNodeID); 49 49 50 virtual void updateBeforeChildren( ScrollingStateNode*) OVERRIDE;50 virtual void updateBeforeChildren(const ScrollingStateNode&) OVERRIDE; 51 51 virtual void parentScrollPositionDidChange(const IntRect& viewportRect, const FloatSize& cumulativeDelta) OVERRIDE; 52 52 -
trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeStickyNode.mm
r160944 r161194 48 48 } 49 49 50 void ScrollingTreeStickyNode::updateBeforeChildren( ScrollingStateNode*stateNode)50 void ScrollingTreeStickyNode::updateBeforeChildren(const ScrollingStateNode& stateNode) 51 51 { 52 ScrollingStateStickyNode*stickyStateNode = toScrollingStateStickyNode(stateNode);52 const ScrollingStateStickyNode& stickyStateNode = toScrollingStateStickyNode(stateNode); 53 53 54 if (stickyStateNode ->hasChangedProperty(ScrollingStateNode::ScrollLayer))55 m_layer = stickyStateNode ->platformScrollLayer();54 if (stickyStateNode.hasChangedProperty(ScrollingStateNode::ScrollLayer)) 55 m_layer = stickyStateNode.platformScrollLayer(); 56 56 57 if (stateNode ->hasChangedProperty(ScrollingStateStickyNode::ViewportConstraints))58 m_constraints = stickyStateNode ->viewportConstraints();57 if (stateNode.hasChangedProperty(ScrollingStateStickyNode::ViewportConstraints)) 58 m_constraints = stickyStateNode.viewportConstraints(); 59 59 } 60 60
Note:
See TracChangeset
for help on using the changeset viewer.