Changeset 99305 in webkit
- Timestamp:
- Nov 4, 2011 11:34:00 AM (12 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r99303 r99305 1 2011-11-04 Adam Klein <adamk@chromium.org> 2 3 Reduce refcount churn in ChildListMutationScope 4 https://bugs.webkit.org/show_bug.cgi?id=71527 5 6 Reviewed by Ryosuke Niwa. 7 8 Only the ChildListMutationAccumulator needs to hold a reference to the 9 target node, and the added/removed children only need be ref'd if a 10 ChildListMutationAccumulator exists (i.e., if there are interested 11 observers). 12 13 * dom/ChildListMutationScope.cpp: 14 (WebCore::MutationAccumulationRouter::ChildListMutationAccumulator::enqueueMutationRecord): 15 (WebCore::MutationAccumulationRouter::MutationAccumulationRouter::childAdded): 16 (WebCore::MutationAccumulationRouter::MutationAccumulationRouter::willRemoveChild): 17 (WebCore::ChildListMutationScope::ChildListMutationScope): 18 (WebCore::ChildListMutationScope::~ChildListMutationScope): 19 (WebCore::ChildListMutationScope::childAdded): 20 (WebCore::ChildListMutationScope::willRemoveChild): 21 * dom/ChildListMutationScope.h: 22 * dom/ContainerNode.cpp: 23 (WebCore::dispatchChildInsertionEvents): 24 (WebCore::dispatchChildRemovalEvents): 25 1 26 2011-11-04 Levi Weintraub <leviw@chromium.org> 2 27 -
trunk/Source/WebCore/dom/ChildListMutationScope.cpp
r98659 r99305 87 87 void decrementScopingLevel(Node*); 88 88 89 void childAdded(Node* , PassRefPtr<Node>);90 void willRemoveChild(Node* , PassRefPtr<Node>);89 void childAdded(Node* target, Node* child); 90 void willRemoveChild(Node* target, Node* child); 91 91 92 92 private: … … 168 168 169 169 RefPtr<MutationRecord> mutation = MutationRecord::createChildList( 170 m_target, StaticNodeList::adopt(m_addedNodes), StaticNodeList::adopt(m_removedNodes), m_previousSibling , m_nextSibling);170 m_target, StaticNodeList::adopt(m_addedNodes), StaticNodeList::adopt(m_removedNodes), m_previousSibling.release(), m_nextSibling.release()); 171 171 172 172 for (HashMap<WebKitMutationObserver*, MutationObserverOptions>::iterator iter = m_observers.begin(); iter != m_observers.end(); ++iter) … … 219 219 } 220 220 221 void MutationAccumulationRouter::childAdded(Node* target, PassRefPtr<Node>child)221 void MutationAccumulationRouter::childAdded(Node* target, Node* child) 222 222 { 223 223 HashMap<Node*, RefPtr<ChildListMutationAccumulator> >::iterator iter = m_accumulations.find(target); … … 228 228 } 229 229 230 void MutationAccumulationRouter::willRemoveChild(Node* target, PassRefPtr<Node>child)230 void MutationAccumulationRouter::willRemoveChild(Node* target, Node* child) 231 231 { 232 232 HashMap<Node*, RefPtr<ChildListMutationAccumulator> >::iterator iter = m_accumulations.find(target); … … 271 271 } // namespace 272 272 273 ChildListMutationScope::ChildListMutationScope( PassRefPtr<Node>target)273 ChildListMutationScope::ChildListMutationScope(Node* target) 274 274 : m_target(target) 275 275 { 276 MutationAccumulationRouter::instance()->incrementScopingLevel(m_target .get());276 MutationAccumulationRouter::instance()->incrementScopingLevel(m_target); 277 277 } 278 278 279 279 ChildListMutationScope::~ChildListMutationScope() 280 280 { 281 MutationAccumulationRouter::instance()->decrementScopingLevel(m_target .get());282 } 283 284 void ChildListMutationScope::childAdded( PassRefPtr<Node>child)285 { 286 MutationAccumulationRouter::instance()->childAdded(m_target .get(), child);287 } 288 289 void ChildListMutationScope::willRemoveChild( PassRefPtr<Node>child)290 { 291 MutationAccumulationRouter::instance()->willRemoveChild(m_target .get(), child);281 MutationAccumulationRouter::instance()->decrementScopingLevel(m_target); 282 } 283 284 void ChildListMutationScope::childAdded(Node* child) 285 { 286 MutationAccumulationRouter::instance()->childAdded(m_target, child); 287 } 288 289 void ChildListMutationScope::willRemoveChild(Node* child) 290 { 291 MutationAccumulationRouter::instance()->willRemoveChild(m_target, child); 292 292 } 293 293 -
trunk/Source/WebCore/dom/ChildListMutationScope.h
r98121 r99305 35 35 36 36 #include <wtf/Noncopyable.h> 37 #include <wtf/PassRefPtr.h>38 #include <wtf/RefPtr.h>39 37 40 38 namespace WebCore { … … 45 43 WTF_MAKE_NONCOPYABLE(ChildListMutationScope); 46 44 public: 47 ChildListMutationScope( PassRefPtr<Node>target);45 ChildListMutationScope(Node* target); 48 46 ~ChildListMutationScope(); 49 47 50 void childAdded( PassRefPtr<Node>);51 void willRemoveChild( PassRefPtr<Node>);48 void childAdded(Node*); 49 void willRemoveChild(Node*); 52 50 53 51 private: 54 RefPtr<Node>m_target;52 Node* m_target; 55 53 }; 56 54 -
trunk/Source/WebCore/dom/ContainerNode.cpp
r98659 r99305 1116 1116 if (c->parentNode()) { 1117 1117 ChildListMutationScope mutation(c->parentNode()); 1118 mutation.childAdded(c );1118 mutation.childAdded(c.get()); 1119 1119 } 1120 1120 #endif … … 1144 1144 if (c->parentNode()) { 1145 1145 ChildListMutationScope mutation(c->parentNode()); 1146 mutation.willRemoveChild(c );1146 mutation.willRemoveChild(c.get()); 1147 1147 c->notifyMutationObserversNodeWillDetach(); 1148 1148 }
Note: See TracChangeset
for help on using the changeset viewer.