Title: [99305] trunk/Source/WebCore
Revision
99305
Author
[email protected]
Date
2011-11-04 11:34:00 -0700 (Fri, 04 Nov 2011)

Log Message

Reduce refcount churn in ChildListMutationScope
https://bugs.webkit.org/show_bug.cgi?id=71527

Reviewed by Ryosuke Niwa.

Only the ChildListMutationAccumulator needs to hold a reference to the
target node, and the added/removed children only need be ref'd if a
ChildListMutationAccumulator exists (i.e., if there are interested
observers).

* dom/ChildListMutationScope.cpp:
(WebCore::MutationAccumulationRouter::ChildListMutationAccumulator::enqueueMutationRecord):
(WebCore::MutationAccumulationRouter::MutationAccumulationRouter::childAdded):
(WebCore::MutationAccumulationRouter::MutationAccumulationRouter::willRemoveChild):
(WebCore::ChildListMutationScope::ChildListMutationScope):
(WebCore::ChildListMutationScope::~ChildListMutationScope):
(WebCore::ChildListMutationScope::childAdded):
(WebCore::ChildListMutationScope::willRemoveChild):
* dom/ChildListMutationScope.h:
* dom/ContainerNode.cpp:
(WebCore::dispatchChildInsertionEvents):
(WebCore::dispatchChildRemovalEvents):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (99304 => 99305)


--- trunk/Source/WebCore/ChangeLog	2011-11-04 18:28:31 UTC (rev 99304)
+++ trunk/Source/WebCore/ChangeLog	2011-11-04 18:34:00 UTC (rev 99305)
@@ -1,3 +1,28 @@
+2011-11-04  Adam Klein  <[email protected]>
+
+        Reduce refcount churn in ChildListMutationScope
+        https://bugs.webkit.org/show_bug.cgi?id=71527
+
+        Reviewed by Ryosuke Niwa.
+
+        Only the ChildListMutationAccumulator needs to hold a reference to the
+        target node, and the added/removed children only need be ref'd if a
+        ChildListMutationAccumulator exists (i.e., if there are interested
+        observers).
+
+        * dom/ChildListMutationScope.cpp:
+        (WebCore::MutationAccumulationRouter::ChildListMutationAccumulator::enqueueMutationRecord):
+        (WebCore::MutationAccumulationRouter::MutationAccumulationRouter::childAdded):
+        (WebCore::MutationAccumulationRouter::MutationAccumulationRouter::willRemoveChild):
+        (WebCore::ChildListMutationScope::ChildListMutationScope):
+        (WebCore::ChildListMutationScope::~ChildListMutationScope):
+        (WebCore::ChildListMutationScope::childAdded):
+        (WebCore::ChildListMutationScope::willRemoveChild):
+        * dom/ChildListMutationScope.h:
+        * dom/ContainerNode.cpp:
+        (WebCore::dispatchChildInsertionEvents):
+        (WebCore::dispatchChildRemovalEvents):
+
 2011-11-04  Levi Weintraub  <[email protected]>
 
         Correct usage of LayoutUnits in RenderImage and SVGImage

Modified: trunk/Source/WebCore/dom/ChildListMutationScope.cpp (99304 => 99305)


--- trunk/Source/WebCore/dom/ChildListMutationScope.cpp	2011-11-04 18:28:31 UTC (rev 99304)
+++ trunk/Source/WebCore/dom/ChildListMutationScope.cpp	2011-11-04 18:34:00 UTC (rev 99305)
@@ -86,8 +86,8 @@
     void incrementScopingLevel(Node*);
     void decrementScopingLevel(Node*);
 
-    void childAdded(Node*, PassRefPtr<Node>);
-    void willRemoveChild(Node*, PassRefPtr<Node>);
+    void childAdded(Node* target, Node* child);
+    void willRemoveChild(Node* target, Node* child);
 
 private:
     MutationAccumulationRouter();
@@ -167,7 +167,7 @@
     }
 
     RefPtr<MutationRecord> mutation = MutationRecord::createChildList(
-        m_target, StaticNodeList::adopt(m_addedNodes), StaticNodeList::adopt(m_removedNodes), m_previousSibling, m_nextSibling);
+        m_target, StaticNodeList::adopt(m_addedNodes), StaticNodeList::adopt(m_removedNodes), m_previousSibling.release(), m_nextSibling.release());
 
     for (HashMap<WebKitMutationObserver*, MutationObserverOptions>::iterator iter = m_observers.begin(); iter != m_observers.end(); ++iter)
         iter->first->enqueueMutationRecord(mutation);
@@ -218,7 +218,7 @@
     return s_instance;
 }
 
-void MutationAccumulationRouter::childAdded(Node* target, PassRefPtr<Node> child)
+void MutationAccumulationRouter::childAdded(Node* target, Node* child)
 {
     HashMap<Node*, RefPtr<ChildListMutationAccumulator> >::iterator iter = m_accumulations.find(target);
     ASSERT(iter != m_accumulations.end());
@@ -227,7 +227,7 @@
         iter->second->childAdded(child);
 }
 
-void MutationAccumulationRouter::willRemoveChild(Node* target, PassRefPtr<Node> child)
+void MutationAccumulationRouter::willRemoveChild(Node* target, Node* child)
 {
     HashMap<Node*, RefPtr<ChildListMutationAccumulator> >::iterator iter = m_accumulations.find(target);
     ASSERT(iter != m_accumulations.end());
@@ -270,25 +270,25 @@
 
 } // namespace
 
-ChildListMutationScope::ChildListMutationScope(PassRefPtr<Node> target)
+ChildListMutationScope::ChildListMutationScope(Node* target)
     : m_target(target)
 {
-    MutationAccumulationRouter::instance()->incrementScopingLevel(m_target.get());
+    MutationAccumulationRouter::instance()->incrementScopingLevel(m_target);
 }
 
 ChildListMutationScope::~ChildListMutationScope()
 {
-    MutationAccumulationRouter::instance()->decrementScopingLevel(m_target.get());
+    MutationAccumulationRouter::instance()->decrementScopingLevel(m_target);
 }
 
-void ChildListMutationScope::childAdded(PassRefPtr<Node> child)
+void ChildListMutationScope::childAdded(Node* child)
 {
-    MutationAccumulationRouter::instance()->childAdded(m_target.get(), child);
+    MutationAccumulationRouter::instance()->childAdded(m_target, child);
 }
 
-void ChildListMutationScope::willRemoveChild(PassRefPtr<Node> child)
+void ChildListMutationScope::willRemoveChild(Node* child)
 {
-    MutationAccumulationRouter::instance()->willRemoveChild(m_target.get(), child);
+    MutationAccumulationRouter::instance()->willRemoveChild(m_target, child);
 }
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/dom/ChildListMutationScope.h (99304 => 99305)


--- trunk/Source/WebCore/dom/ChildListMutationScope.h	2011-11-04 18:28:31 UTC (rev 99304)
+++ trunk/Source/WebCore/dom/ChildListMutationScope.h	2011-11-04 18:34:00 UTC (rev 99305)
@@ -34,8 +34,6 @@
 #if ENABLE(MUTATION_OBSERVERS)
 
 #include <wtf/Noncopyable.h>
-#include <wtf/PassRefPtr.h>
-#include <wtf/RefPtr.h>
 
 namespace WebCore {
 
@@ -44,14 +42,14 @@
 class ChildListMutationScope {
     WTF_MAKE_NONCOPYABLE(ChildListMutationScope);
 public:
-    ChildListMutationScope(PassRefPtr<Node> target);
+    ChildListMutationScope(Node* target);
     ~ChildListMutationScope();
 
-    void childAdded(PassRefPtr<Node>);
-    void willRemoveChild(PassRefPtr<Node>);
+    void childAdded(Node*);
+    void willRemoveChild(Node*);
 
 private:
-    RefPtr<Node> m_target;
+    Node* m_target;
 };
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/dom/ContainerNode.cpp (99304 => 99305)


--- trunk/Source/WebCore/dom/ContainerNode.cpp	2011-11-04 18:28:31 UTC (rev 99304)
+++ trunk/Source/WebCore/dom/ContainerNode.cpp	2011-11-04 18:34:00 UTC (rev 99305)
@@ -1115,7 +1115,7 @@
 #if ENABLE(MUTATION_OBSERVERS)
     if (c->parentNode()) {
         ChildListMutationScope mutation(c->parentNode());
-        mutation.childAdded(c);
+        mutation.childAdded(c.get());
     }
 #endif
 
@@ -1143,7 +1143,7 @@
 #if ENABLE(MUTATION_OBSERVERS)
     if (c->parentNode()) {
         ChildListMutationScope mutation(c->parentNode());
-        mutation.willRemoveChild(c);
+        mutation.willRemoveChild(c.get());
         c->notifyMutationObserversNodeWillDetach();
     }
 #endif
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to