Changeset 142505 in webkit
- Timestamp:
- Feb 11, 2013 1:28:18 PM (11 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r142504 r142505 1 2013-02-11 Simon Fraser <simon.fraser@apple.com> 2 3 ScrollingTree node maps keep getting larger 4 https://bugs.webkit.org/show_bug.cgi?id=109348 5 6 Reviewed by Sam Weinig. 7 8 When navigating between pages, nodes would get left in the ScrollingTree's 9 node map, and the ScrollingStateTree's node map, so these would get larger 10 and larger as you browse. 11 12 Simplify map maintenance by clearing the map when setting a new root node 13 (which happens on the first commit of a new page). Also, don't keep root nodes 14 around, but create them afresh for each page, which simplifies their ID 15 management. 16 17 This is closer to the original behavior; keeping the root nodes around was 18 a fix for bug 99668, but we avoid regressing that fix by bailing early 19 from frameViewLayoutUpdated() if there is no root state node (we'll get 20 called again anyway). 21 22 This now allows state nodeIDs to be purely read-only. 23 24 * page/scrolling/ScrollingStateNode.h: 25 * page/scrolling/ScrollingStateTree.cpp: 26 (WebCore::ScrollingStateTree::ScrollingStateTree): 27 (WebCore::ScrollingStateTree::attachNode): 28 (WebCore::ScrollingStateTree::clear): 29 (WebCore::ScrollingStateTree::removeNode): 30 * page/scrolling/ScrollingTree.cpp: 31 (WebCore::ScrollingTree::updateTreeFromStateNode): 32 * page/scrolling/mac/ScrollingCoordinatorMac.mm: 33 (WebCore::ScrollingCoordinatorMac::frameViewLayoutUpdated): 34 1 35 2013-02-11 Simon Fraser <simon.fraser@apple.com> 2 36 -
trunk/Source/WebCore/page/scrolling/ScrollingStateNode.h
r141704 r142505 80 80 81 81 ScrollingNodeID scrollingNodeID() const { return m_nodeID; } 82 void setScrollingNodeID(ScrollingNodeID nodeID) { m_nodeID = nodeID; }83 82 84 83 ScrollingStateNode* parent() const { return m_parent; } -
trunk/Source/WebCore/page/scrolling/ScrollingStateTree.cpp
r142504 r142505 42 42 43 43 ScrollingStateTree::ScrollingStateTree() 44 : m_rootStateNode(ScrollingStateScrollingNode::create(this, 0)) 45 , m_hasChangedProperties(false) 44 : m_hasChangedProperties(false) 46 45 { 47 46 } … … 71 70 clear(); 72 71 73 rootStateNode()->setScrollingNodeID(newNodeID);72 setRootStateNode(ScrollingStateScrollingNode::create(this, newNodeID)); 74 73 newNode = rootStateNode(); 75 74 } else { … … 121 120 { 122 121 removeNode(rootStateNode()); 122 m_stateNodeMap.clear(); 123 123 } 124 124 … … 141 141 void ScrollingStateTree::removeNode(ScrollingStateNode* node) 142 142 { 143 if (!node) 144 return; 145 146 if (node == m_rootStateNode) { 147 didRemoveNode(node->scrollingNodeID()); 148 m_rootStateNode = nullptr; 149 return; 150 } 151 143 152 ASSERT(m_rootStateNode); 144 153 m_rootStateNode->removeChild(node); -
trunk/Source/WebCore/page/scrolling/ScrollingTree.cpp
r141704 r142505 160 160 ScrollingNodeID nodeID = stateNode->scrollingNodeID(); 161 161 if (!stateNode->parent()) { 162 // This is the root node. 163 if (!m_rootNode)164 m_rootNode = ScrollingTreeScrollingNode::create(this, nodeID); 165 162 // This is the root node. Nuke the node map. 163 m_nodeMap.clear(); 164 165 m_rootNode = ScrollingTreeScrollingNode::create(this, nodeID); 166 166 m_nodeMap.set(nodeID, m_rootNode.get()); 167 167 m_rootNode->update(stateNode); -
trunk/Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.mm
r142504 r142505 108 108 ASSERT(m_page); 109 109 110 // If there isn't a root node yet, don't do anything. We'll be called again after creating one. 111 if (!m_scrollingStateTree->rootStateNode()) 112 return; 113 110 114 // Compute the region of the page that we can't do fast scrolling for. This currently includes 111 115 // all scrollable areas, such as subframes, overflow divs and list boxes. We need to do this even if the
Note: See TracChangeset
for help on using the changeset viewer.