Changeset 161194 in webkit


Ignore:
Timestamp:
Jan 1, 2014, 11:53:21 AM (12 years ago)
Author:
Simon Fraser
Message:

Updating the scrolling tree should use references to state nodes
https://bugs.webkit.org/show_bug.cgi?id=126360

Reviewed by Anders Carlsson.

Change functions related to ScrollingTreeNode updating to take
const references to state nodes rather than pointers.

  • page/scrolling/ScrollingStateNode.h:

(WebCore::ScrollingStateNode::hasChangedProperty):

  • page/scrolling/ScrollingTree.cpp:

(WebCore::ScrollingTree::commitNewTreeState):
(WebCore::ScrollingTree::updateTreeFromStateNode): The node can be nil so
this continues to take a pointer.
(WebCore::ScrollingTree::removeDestroyedNodes):

  • page/scrolling/ScrollingTree.h:
  • page/scrolling/ScrollingTreeNode.h:

(WebCore::ScrollingTreeNode::updateAfterChildren):

  • page/scrolling/ScrollingTreeScrollingNode.cpp:

(WebCore::ScrollingTreeScrollingNode::updateBeforeChildren):

  • page/scrolling/ScrollingTreeScrollingNode.h:
  • page/scrolling/mac/ScrollingTreeFixedNode.h:
  • page/scrolling/mac/ScrollingTreeFixedNode.mm:

(WebCore::ScrollingTreeFixedNode::updateBeforeChildren):

  • page/scrolling/mac/ScrollingTreeScrollingNodeMac.h:
  • page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:

(WebCore::ScrollingTreeScrollingNodeMac::updateBeforeChildren):
(WebCore::ScrollingTreeScrollingNodeMac::updateAfterChildren):

  • page/scrolling/mac/ScrollingTreeStickyNode.h:
  • page/scrolling/mac/ScrollingTreeStickyNode.mm:

(WebCore::ScrollingTreeStickyNode::updateBeforeChildren):

Location:
trunk/Source/WebCore
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r161192 r161194  
     12014-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
    1352014-01-01  Simon Fraser  <simon.fraser@apple.com>
    236
  • trunk/Source/WebCore/page/scrolling/ScrollingStateNode.h

    r161191 r161194  
    6363
    6464    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); }
    6666    void resetChangedProperties() { m_changedProperties = 0; }
    6767    void setPropertyChanged(unsigned propertyBit) { m_changedProperties |= (1 << propertyBit); }
  • trunk/Source/WebCore/page/scrolling/ScrollingTree.cpp

    r161190 r161194  
    147147    TemporaryChange<bool> changeHandlingProgrammaticScroll(m_isHandlingProgrammaticScroll, scrollRequestIsProgammatic);
    148148
    149     removeDestroyedNodes(scrollingStateTree.get());
     149    removeDestroyedNodes(*scrollingStateTree);
    150150    updateTreeFromStateNode(rootNode);
    151151}
    152152
    153 void ScrollingTree::updateTreeFromStateNode(ScrollingStateNode* stateNode)
     153void ScrollingTree::updateTreeFromStateNode(const ScrollingStateNode* stateNode)
    154154{
    155155    if (!stateNode) {
     
    166166    if (it != m_nodeMap.end()) {
    167167        node = it->value;
    168         node->updateBeforeChildren(stateNode);
     168        node->updateBeforeChildren(*stateNode);
    169169    } else {
    170170        // 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
     
    177177            m_rootNode = ScrollingTreeScrollingNode::create(*this, nodeID);
    178178            m_nodeMap.set(nodeID, m_rootNode.get());
    179             m_rootNode->updateBeforeChildren(stateNode);
     179            m_rootNode->updateBeforeChildren(*stateNode);
    180180            node = m_rootNode.get();
    181181        } else {
     
    202202                parent->appendChild(newNode.release());
    203203            }
    204             node->updateBeforeChildren(stateNode);
     204            node->updateBeforeChildren(*stateNode);
    205205        }
    206206    }
     
    213213            updateTreeFromStateNode(stateNodeChildren->at(i).get());
    214214    }
    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
     218void ScrollingTree::removeDestroyedNodes(const ScrollingStateTree& stateTree)
     219{
     220    const Vector<ScrollingNodeID>& removedNodes = stateTree.removedNodes();
    221221    size_t size = removedNodes.size();
    222222    for (size_t i = 0; i < size; ++i) {
  • trunk/Source/WebCore/page/scrolling/ScrollingTree.h

    r160944 r161194  
    113113    explicit ScrollingTree(ScrollingCoordinator*);
    114114
    115     void removeDestroyedNodes(ScrollingStateTree*);
    116     void updateTreeFromStateNode(ScrollingStateNode*);
     115    void removeDestroyedNodes(const ScrollingStateTree&);
     116    void updateTreeFromStateNode(const ScrollingStateNode*);
    117117
    118118    RefPtr<ScrollingCoordinator> m_scrollingCoordinator;
  • trunk/Source/WebCore/page/scrolling/ScrollingTreeNode.h

    r160944 r161194  
    4444    virtual ~ScrollingTreeNode();
    4545
    46     virtual void updateBeforeChildren(ScrollingStateNode*) = 0;
    47     virtual void updateAfterChildren(ScrollingStateNode*) { }
     46    virtual void updateBeforeChildren(const ScrollingStateNode&) = 0;
     47    virtual void updateAfterChildren(const ScrollingStateNode&) { }
    4848
    4949    virtual void parentScrollPositionDidChange(const IntRect& viewportRect, const FloatSize& cumulativeDelta) = 0;
  • trunk/Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.cpp

    r160944 r161194  
    4848}
    4949
    50 void ScrollingTreeScrollingNode::updateBeforeChildren(ScrollingStateNode* stateNode)
     50void ScrollingTreeScrollingNode::updateBeforeChildren(const ScrollingStateNode& stateNode)
    5151{
    52     ScrollingStateScrollingNode* state = toScrollingStateScrollingNode(stateNode);
     52    const ScrollingStateScrollingNode& state = toScrollingStateScrollingNode(stateNode);
    5353
    54     if (state->hasChangedProperty(ScrollingStateScrollingNode::ViewportRect))
    55         m_viewportRect = state->viewportRect();
     54    if (state.hasChangedProperty(ScrollingStateScrollingNode::ViewportRect))
     55        m_viewportRect = state.viewportRect();
    5656
    57     if (state->hasChangedProperty(ScrollingStateScrollingNode::TotalContentsSize)) {
     57    if (state.hasChangedProperty(ScrollingStateScrollingNode::TotalContentsSize)) {
    5858        if (scrollingTree().isRubberBandInProgress())
    5959            m_totalContentsSizeForRubberBand = m_totalContentsSize;
    6060        else
    61             m_totalContentsSizeForRubberBand = state->totalContentsSize();
    62         m_totalContentsSize = state->totalContentsSize();
     61            m_totalContentsSizeForRubberBand = state.totalContentsSize();
     62        m_totalContentsSize = state.totalContentsSize();
    6363    }
    6464
    65     if (state->hasChangedProperty(ScrollingStateScrollingNode::ScrollOrigin))
    66         m_scrollOrigin = state->scrollOrigin();
     65    if (state.hasChangedProperty(ScrollingStateScrollingNode::ScrollOrigin))
     66        m_scrollOrigin = state.scrollOrigin();
    6767
    68     if (state->hasChangedProperty(ScrollingStateScrollingNode::ScrollableAreaParams))
    69         m_scrollableAreaParameters = state->scrollableAreaParameters();
     68    if (state.hasChangedProperty(ScrollingStateScrollingNode::ScrollableAreaParams))
     69        m_scrollableAreaParameters = state.scrollableAreaParameters();
    7070
    71     if (state->hasChangedProperty(ScrollingStateScrollingNode::FrameScaleFactor))
    72         m_frameScaleFactor = state->frameScaleFactor();
     71    if (state.hasChangedProperty(ScrollingStateScrollingNode::FrameScaleFactor))
     72        m_frameScaleFactor = state.frameScaleFactor();
    7373
    74     if (state->hasChangedProperty(ScrollingStateScrollingNode::ReasonsForSynchronousScrolling))
    75         m_synchronousScrollingReasons = state->synchronousScrollingReasons();
     74    if (state.hasChangedProperty(ScrollingStateScrollingNode::ReasonsForSynchronousScrolling))
     75        m_synchronousScrollingReasons = state.synchronousScrollingReasons();
    7676
    77     if (state->hasChangedProperty(ScrollingStateScrollingNode::HeaderHeight))
    78         m_headerHeight = state->headerHeight();
     77    if (state.hasChangedProperty(ScrollingStateScrollingNode::HeaderHeight))
     78        m_headerHeight = state.headerHeight();
    7979
    80     if (state->hasChangedProperty(ScrollingStateScrollingNode::FooterHeight))
    81         m_footerHeight = state->footerHeight();
     80    if (state.hasChangedProperty(ScrollingStateScrollingNode::FooterHeight))
     81        m_footerHeight = state.footerHeight();
    8282
    83     if (state->hasChangedProperty(ScrollingStateScrollingNode::BehaviorForFixedElements))
    84         m_behaviorForFixed = state->scrollBehaviorForFixedElements();
     83    if (state.hasChangedProperty(ScrollingStateScrollingNode::BehaviorForFixedElements))
     84        m_behaviorForFixed = state.scrollBehaviorForFixedElements();
    8585}
    8686
  • trunk/Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.h

    r160944 r161194  
    4646    virtual ~ScrollingTreeScrollingNode();
    4747
    48     virtual void updateBeforeChildren(ScrollingStateNode*) OVERRIDE;
     48    virtual void updateBeforeChildren(const ScrollingStateNode&) OVERRIDE;
    4949
    5050    // FIXME: We should implement this when we support ScrollingTreeScrollingNodes as children.
  • trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeFixedNode.h

    r160944 r161194  
    4848    ScrollingTreeFixedNode(ScrollingTree&, ScrollingNodeID);
    4949
    50     virtual void updateBeforeChildren(ScrollingStateNode*) OVERRIDE;
     50    virtual void updateBeforeChildren(const ScrollingStateNode&) OVERRIDE;
    5151    virtual void parentScrollPositionDidChange(const IntRect& viewportRect, const FloatSize& cumulativeDelta) OVERRIDE;
    5252
  • trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeFixedNode.mm

    r160944 r161194  
    4848}
    4949
    50 void ScrollingTreeFixedNode::updateBeforeChildren(ScrollingStateNode* stateNode)
     50void ScrollingTreeFixedNode::updateBeforeChildren(const ScrollingStateNode& stateNode)
    5151{
    52     ScrollingStateFixedNode* fixedStateNode = toScrollingStateFixedNode(stateNode);
     52    const ScrollingStateFixedNode& fixedStateNode = toScrollingStateFixedNode(stateNode);
    5353
    54     if (fixedStateNode->hasChangedProperty(ScrollingStateNode::ScrollLayer))
    55         m_layer = fixedStateNode->platformScrollLayer();
     54    if (fixedStateNode.hasChangedProperty(ScrollingStateNode::ScrollLayer))
     55        m_layer = fixedStateNode.platformScrollLayer();
    5656
    57     if (stateNode->hasChangedProperty(ScrollingStateFixedNode::ViewportConstraints))
    58         m_constraints = fixedStateNode->viewportConstraints();
     57    if (stateNode.hasChangedProperty(ScrollingStateFixedNode::ViewportConstraints))
     58        m_constraints = fixedStateNode.viewportConstraints();
    5959}
    6060
  • trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.h

    r160944 r161194  
    4545private:
    4646    // 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;
    4949    virtual void handleWheelEvent(const PlatformWheelEvent&) OVERRIDE;
    5050
  • trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm

    r160944 r161194  
    7171}
    7272
    73 void ScrollingTreeScrollingNodeMac::updateBeforeChildren(ScrollingStateNode* stateNode)
     73void ScrollingTreeScrollingNodeMac::updateBeforeChildren(const ScrollingStateNode& stateNode)
    7474{
    7575    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)) {
    9696        if (shouldUpdateScrollLayerPositionSynchronously()) {
    9797            // We're transitioning to the slow "update scroll layer position on the main thread" mode.
    9898            // 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();
    101101            else {
    102102                CGPoint scrollLayerPosition = m_scrollLayer.get().position;
     
    109109    }
    110110
    111     if (scrollingStateNode->hasChangedProperty(ScrollingStateScrollingNode::WheelEventHandlerCount)) {
     111    if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::WheelEventHandlerCount)) {
    112112        if (scrollingTree().scrollingPerformanceLoggingEnabled())
    113             logWheelEventHandlerCountChanged(scrollingStateNode->wheelEventHandlerCount());
    114     }
    115 }
    116 
    117 void ScrollingTreeScrollingNodeMac::updateAfterChildren(ScrollingStateNode* stateNode)
     113            logWheelEventHandlerCountChanged(scrollingStateNode.wheelEventHandlerCount());
     114    }
     115}
     116
     117void ScrollingTreeScrollingNodeMac::updateAfterChildren(const ScrollingStateNode& stateNode)
    118118{
    119119    ScrollingTreeScrollingNode::updateAfterChildren(stateNode);
    120120
    121     ScrollingStateScrollingNode* scrollingStateNode = toScrollingStateScrollingNode(stateNode);
     121    const auto& scrollingStateNode = toScrollingStateScrollingNode(stateNode);
    122122
    123123    // 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))
    128128        updateMainFramePinState(scrollPosition());
    129129}
  • trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeStickyNode.h

    r160944 r161194  
    4848    ScrollingTreeStickyNode(ScrollingTree&, ScrollingNodeID);
    4949
    50     virtual void updateBeforeChildren(ScrollingStateNode*) OVERRIDE;
     50    virtual void updateBeforeChildren(const ScrollingStateNode&) OVERRIDE;
    5151    virtual void parentScrollPositionDidChange(const IntRect& viewportRect, const FloatSize& cumulativeDelta) OVERRIDE;
    5252
  • trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeStickyNode.mm

    r160944 r161194  
    4848}
    4949
    50 void ScrollingTreeStickyNode::updateBeforeChildren(ScrollingStateNode* stateNode)
     50void ScrollingTreeStickyNode::updateBeforeChildren(const ScrollingStateNode& stateNode)
    5151{
    52     ScrollingStateStickyNode* stickyStateNode = toScrollingStateStickyNode(stateNode);
     52    const ScrollingStateStickyNode& stickyStateNode = toScrollingStateStickyNode(stateNode);
    5353
    54     if (stickyStateNode->hasChangedProperty(ScrollingStateNode::ScrollLayer))
    55         m_layer = stickyStateNode->platformScrollLayer();
     54    if (stickyStateNode.hasChangedProperty(ScrollingStateNode::ScrollLayer))
     55        m_layer = stickyStateNode.platformScrollLayer();
    5656
    57     if (stateNode->hasChangedProperty(ScrollingStateStickyNode::ViewportConstraints))
    58         m_constraints = stickyStateNode->viewportConstraints();
     57    if (stateNode.hasChangedProperty(ScrollingStateStickyNode::ViewportConstraints))
     58        m_constraints = stickyStateNode.viewportConstraints();
    5959}
    6060
Note: See TracChangeset for help on using the changeset viewer.