Changeset 99305 in webkit


Ignore:
Timestamp:
Nov 4, 2011 11:34:00 AM (12 years ago)
Author:
adamk@chromium.org
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):

Location:
trunk/Source/WebCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r99303 r99305  
     12011-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
    1262011-11-04  Levi Weintraub  <leviw@chromium.org>
    227
  • trunk/Source/WebCore/dom/ChildListMutationScope.cpp

    r98659 r99305  
    8787    void decrementScopingLevel(Node*);
    8888
    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);
    9191
    9292private:
     
    168168
    169169    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());
    171171
    172172    for (HashMap<WebKitMutationObserver*, MutationObserverOptions>::iterator iter = m_observers.begin(); iter != m_observers.end(); ++iter)
     
    219219}
    220220
    221 void MutationAccumulationRouter::childAdded(Node* target, PassRefPtr<Node> child)
     221void MutationAccumulationRouter::childAdded(Node* target, Node* child)
    222222{
    223223    HashMap<Node*, RefPtr<ChildListMutationAccumulator> >::iterator iter = m_accumulations.find(target);
     
    228228}
    229229
    230 void MutationAccumulationRouter::willRemoveChild(Node* target, PassRefPtr<Node> child)
     230void MutationAccumulationRouter::willRemoveChild(Node* target, Node* child)
    231231{
    232232    HashMap<Node*, RefPtr<ChildListMutationAccumulator> >::iterator iter = m_accumulations.find(target);
     
    271271} // namespace
    272272
    273 ChildListMutationScope::ChildListMutationScope(PassRefPtr<Node> target)
     273ChildListMutationScope::ChildListMutationScope(Node* target)
    274274    : m_target(target)
    275275{
    276     MutationAccumulationRouter::instance()->incrementScopingLevel(m_target.get());
     276    MutationAccumulationRouter::instance()->incrementScopingLevel(m_target);
    277277}
    278278
    279279ChildListMutationScope::~ChildListMutationScope()
    280280{
    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
     284void ChildListMutationScope::childAdded(Node* child)
     285{
     286    MutationAccumulationRouter::instance()->childAdded(m_target, child);
     287}
     288
     289void ChildListMutationScope::willRemoveChild(Node* child)
     290{
     291    MutationAccumulationRouter::instance()->willRemoveChild(m_target, child);
    292292}
    293293
  • trunk/Source/WebCore/dom/ChildListMutationScope.h

    r98121 r99305  
    3535
    3636#include <wtf/Noncopyable.h>
    37 #include <wtf/PassRefPtr.h>
    38 #include <wtf/RefPtr.h>
    3937
    4038namespace WebCore {
     
    4543    WTF_MAKE_NONCOPYABLE(ChildListMutationScope);
    4644public:
    47     ChildListMutationScope(PassRefPtr<Node> target);
     45    ChildListMutationScope(Node* target);
    4846    ~ChildListMutationScope();
    4947
    50     void childAdded(PassRefPtr<Node>);
    51     void willRemoveChild(PassRefPtr<Node>);
     48    void childAdded(Node*);
     49    void willRemoveChild(Node*);
    5250
    5351private:
    54     RefPtr<Node> m_target;
     52    Node* m_target;
    5553};
    5654
  • trunk/Source/WebCore/dom/ContainerNode.cpp

    r98659 r99305  
    11161116    if (c->parentNode()) {
    11171117        ChildListMutationScope mutation(c->parentNode());
    1118         mutation.childAdded(c);
     1118        mutation.childAdded(c.get());
    11191119    }
    11201120#endif
     
    11441144    if (c->parentNode()) {
    11451145        ChildListMutationScope mutation(c->parentNode());
    1146         mutation.willRemoveChild(c);
     1146        mutation.willRemoveChild(c.get());
    11471147        c->notifyMutationObserversNodeWillDetach();
    11481148    }
Note: See TracChangeset for help on using the changeset viewer.