Changeset 121022 in webkit


Ignore:
Timestamp:
Jun 22, 2012 7:08:05 AM (12 years ago)
Author:
loislo@chromium.org
Message:

Web Inspector: partially instrument DOM Tree native memory.
https://bugs.webkit.org/show_bug.cgi?id=89568

PerformanceTests:

This patch adds MemoryInstrumentation class that counts all visited
objects and calls reportMemoryUsage.

Reviewed by Yury Semikhatsky.

  • inspector/native-memory-snapshot.html:

Source/WebCore:

This patch adds MemoryInstrumentation class that counts all visited
objects and calls reportMemoryUsage for the instrumented classes.

Reviewed by Yury Semikhatsky.

  • GNUmakefile.list.am:
  • Target.pri:
  • WebCore.gypi:
  • WebCore.vcproj/WebCore.vcproj:
  • WebCore.xcodeproj/project.pbxproj:
  • bindings/js/ScriptWrappable.h:

(WebCore::ScriptWrappable::reportMemoryUsage):
(ScriptWrappable):

  • bindings/v8/ScriptWrappable.h:

(WebCore::ScriptWrappable::reportMemoryUsage):
(ScriptWrappable):

  • css/StylePropertySet.h:

(WebCore::StylePropertySet::reportMemoryUsage):
(StylePropertySet):

  • dom/ContainerNode.h:

(WebCore::ContainerNode::reportMemoryUsage):
(ContainerNode):

  • dom/Element.h:

(WebCore::Element::reportMemoryUsage):
(Element):

  • dom/ElementAttributeData.h:

(WebCore::ElementAttributeData::reportMemoryUsage):
(ElementAttributeData):

  • dom/MemoryInstrumentation.h: Added.

(WebCore):
(MemoryInstrumentation):
(WebCore::MemoryInstrumentation::~MemoryInstrumentation):
(WebCore::MemoryInstrumentation::reportObject):
(WebCore::MemoryInstrumentation::reportPointer):
(MemoryObjectInfo):
(WebCore::MemoryObjectInfo::MemoryObjectInfo):
(WebCore::MemoryObjectInfo::reportInstrumentedPointer):
(WebCore::MemoryObjectInfo::reportPointer):
(WebCore::MemoryObjectInfo::reportInstrumentedObject):
(WebCore::MemoryObjectInfo::reportObject):
(WebCore::MemoryObjectInfo::reportObjectInfo):
(WebCore::MemoryObjectInfo::objectType):
(WebCore::MemoryObjectInfo::objectSize):
(WebCore::MemoryInstrumentation::reportInstrumentedPointer):
(WebCore::MemoryInstrumentation::reportInstrumentedObject):

  • dom/Node.cpp:

(WebCore::Node::reportMemoryUsage):
(WebCore):

  • dom/Node.h:

(Node):

  • dom/QualifiedName.h:

(WebCore::QualifiedName::QualifiedNameImpl::reportMemoryUsage):
(WebCore::QualifiedName::reportMemoryUsage):

  • inspector/InspectorMemoryAgent.cpp:

(MemoryBlockName):
(WebCore):
(WebCore::addMemoryBlockFor):
(WebCore::domTreeInfo):
(WebCore::memoryCacheInfo):
(WebCore::InspectorMemoryAgent::getProcessMemoryDistribution):

  • platform/TreeShared.h:

(WebCore::TreeShared::reportMemoryUsage):
(TreeShared):

Location:
trunk
Files:
1 added
19 edited

Legend:

Unmodified
Added
Removed
  • trunk/PerformanceTests/ChangeLog

    r120998 r121022  
     12012-06-22  Ilya Tikhonovsky  <loislo@chromium.org>
     2
     3        Web Inspector: partially instrument DOM Tree native memory.
     4        https://bugs.webkit.org/show_bug.cgi?id=89568
     5
     6        This patch adds MemoryInstrumentation class that counts all visited
     7        objects and calls reportMemoryUsage.
     8
     9        Reviewed by Yury Semikhatsky.
     10
     11        * inspector/native-memory-snapshot.html:
     12
    1132012-06-21  Kentaro Hara  <haraken@chromium.org>
    214
  • trunk/PerformanceTests/inspector/native-memory-snapshot.html

    r120618 r121022  
    11<html>
    22<head>
     3  <style type="text/css">
     4    span {
     5      color:red;
     6      width: 100px;
     7      height: 20px;
     8    }
     9    div {
     10      color:blue;
     11      width: 50px;
     12      height: 10px;
     13    }
     14  </style>
    315  <script src="../../LayoutTests/http/tests/inspector/inspector-test.js"></script>
    416  <script src="performance-test.js"></script>
     
    4052    var root = document.getElementById("testTreeRoot");
    4153
    42     for (var i = 0; i < elementsCount; ++i)
    43         root.appendChild(document.createElement("span"));
     54    for (var i = 0; i < elementsCount; ++i) {
     55        var span = document.createElement("span");
     56        span.id = "span_" + i;
     57        span.style.width = "10px";
     58        root.appendChild(span);
     59    }
    4460
    4561    for (var i = 0; i < elementsCount; ++i)
  • trunk/Source/WebCore/ChangeLog

    r121021 r121022  
     12012-06-22  Ilya Tikhonovsky  <loislo@chromium.org>
     2
     3        Web Inspector: partially instrument DOM Tree native memory.
     4        https://bugs.webkit.org/show_bug.cgi?id=89568
     5
     6        This patch adds MemoryInstrumentation class that counts all visited
     7        objects and calls reportMemoryUsage for the instrumented classes.
     8
     9        Reviewed by Yury Semikhatsky.
     10
     11        * GNUmakefile.list.am:
     12        * Target.pri:
     13        * WebCore.gypi:
     14        * WebCore.vcproj/WebCore.vcproj:
     15        * WebCore.xcodeproj/project.pbxproj:
     16        * bindings/js/ScriptWrappable.h:
     17        (WebCore::ScriptWrappable::reportMemoryUsage):
     18        (ScriptWrappable):
     19        * bindings/v8/ScriptWrappable.h:
     20        (WebCore::ScriptWrappable::reportMemoryUsage):
     21        (ScriptWrappable):
     22        * css/StylePropertySet.h:
     23        (WebCore::StylePropertySet::reportMemoryUsage):
     24        (StylePropertySet):
     25        * dom/ContainerNode.h:
     26        (WebCore::ContainerNode::reportMemoryUsage):
     27        (ContainerNode):
     28        * dom/Element.h:
     29        (WebCore::Element::reportMemoryUsage):
     30        (Element):
     31        * dom/ElementAttributeData.h:
     32        (WebCore::ElementAttributeData::reportMemoryUsage):
     33        (ElementAttributeData):
     34        * dom/MemoryInstrumentation.h: Added.
     35        (WebCore):
     36        (MemoryInstrumentation):
     37        (WebCore::MemoryInstrumentation::~MemoryInstrumentation):
     38        (WebCore::MemoryInstrumentation::reportObject):
     39        (WebCore::MemoryInstrumentation::reportPointer):
     40        (MemoryObjectInfo):
     41        (WebCore::MemoryObjectInfo::MemoryObjectInfo):
     42        (WebCore::MemoryObjectInfo::reportInstrumentedPointer):
     43        (WebCore::MemoryObjectInfo::reportPointer):
     44        (WebCore::MemoryObjectInfo::reportInstrumentedObject):
     45        (WebCore::MemoryObjectInfo::reportObject):
     46        (WebCore::MemoryObjectInfo::reportObjectInfo):
     47        (WebCore::MemoryObjectInfo::objectType):
     48        (WebCore::MemoryObjectInfo::objectSize):
     49        (WebCore::MemoryInstrumentation::reportInstrumentedPointer):
     50        (WebCore::MemoryInstrumentation::reportInstrumentedObject):
     51        * dom/Node.cpp:
     52        (WebCore::Node::reportMemoryUsage):
     53        (WebCore):
     54        * dom/Node.h:
     55        (Node):
     56        * dom/QualifiedName.h:
     57        (WebCore::QualifiedName::QualifiedNameImpl::reportMemoryUsage):
     58        (WebCore::QualifiedName::reportMemoryUsage):
     59        * inspector/InspectorMemoryAgent.cpp:
     60        (MemoryBlockName):
     61        (WebCore):
     62        (WebCore::addMemoryBlockFor):
     63        (WebCore::domTreeInfo):
     64        (WebCore::memoryCacheInfo):
     65        (WebCore::InspectorMemoryAgent::getProcessMemoryDistribution):
     66        * platform/TreeShared.h:
     67        (WebCore::TreeShared::reportMemoryUsage):
     68        (TreeShared):
     69
    1702012-06-22  Peter Rybin  <peter.rybin@gmail.com>
    271
  • trunk/Source/WebCore/GNUmakefile.list.am

    r121016 r121022  
    19081908        Source/WebCore/dom/KeyboardEvent.cpp \
    19091909        Source/WebCore/dom/KeyboardEvent.h \
     1910        Source/WebCore/dom/MemoryInstrumentation.h \
    19101911        Source/WebCore/dom/MessageChannel.cpp \
    19111912        Source/WebCore/dom/MessageChannel.h \
  • trunk/Source/WebCore/Target.pri

    r121016 r121022  
    17461746    dom/FragmentScriptingPermission.h \
    17471747    dom/KeyboardEvent.h \
     1748    dom/MemoryInstrumentation.h \
    17481749    dom/MessageChannel.h \
    17491750    dom/MessageEvent.h \
  • trunk/Source/WebCore/WebCore.gypi

    r121016 r121022  
    53435343            'dom/IconURL.h',
    53445344            'dom/KeyboardEvent.cpp',
     5345            'dom/MemoryInstrumentation.h',
    53455346            'dom/MessageChannel.cpp',
    53465347            'dom/MessageChannel.h',
  • trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj

    r121016 r121022  
    5119251192                        </File>
    5119351193                        <File
     51194                                RelativePath="..\dom\MemoryInstrumentation.h"
     51195                                >
     51196                        </File>
     51197                        <File
    5119451198                                RelativePath="..\dom\MessageChannel.cpp"
    5119551199                                >
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r121016 r121022  
    14291429                4F1534E011B533020021FD86 /* EditingBehaviorTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F1534DF11B533020021FD86 /* EditingBehaviorTypes.h */; settings = {ATTRIBUTES = (Private, ); }; };
    14301430                4F2D205412EAE7B3005C2874 /* InspectorAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F2D205212EAE7B3005C2874 /* InspectorAgent.h */; settings = {ATTRIBUTES = (Private, ); }; };
     1431                4F32BB1B14FA85E800F6C1A3 /* MemoryInstrumentation.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F32BB1A14FA85AA00F6C1A3 /* MemoryInstrumentation.h */; settings = {ATTRIBUTES = (Private, ); }; };
    14311432                4F2D205512EAE7B3005C2874 /* InspectorAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4F2D205312EAE7B3005C2874 /* InspectorAgent.cpp */; };
    14321433                4F3289B511A42AAB005ABE7E /* InspectorValues.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4F3289B311A42AAB005ABE7E /* InspectorValues.cpp */; };
     
    85028503                4F1534DF11B533020021FD86 /* EditingBehaviorTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EditingBehaviorTypes.h; sourceTree = "<group>"; };
    85038504                4F2D205212EAE7B3005C2874 /* InspectorAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorAgent.h; sourceTree = "<group>"; };
     8505                4F32BB1A14FA85AA00F6C1A3 /* MemoryInstrumentation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemoryInstrumentation.h; sourceTree = "<group>"; };
    85048506                4F2D205312EAE7B3005C2874 /* InspectorAgent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorAgent.cpp; sourceTree = "<group>"; };
    85058507                4F3289B311A42AAB005ABE7E /* InspectorValues.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorValues.cpp; sourceTree = "<group>"; };
     
    2141521417                                BC9A6145146859D9006057FD /* make_event_factory.pl */,
    2141621418                                BC9A6146146859D9006057FD /* make_names.pl */,
     21419                                4F32BB1A14FA85AA00F6C1A3 /* MemoryInstrumentation.h */,
    2141721420                                E1ADECCD0E76AD8B004A1A5E /* MessageChannel.cpp */,
    2141821421                                E1ADECCC0E76AD8B004A1A5E /* MessageChannel.h */,
     
    2514325146                                CE7B2DB51586ABAD0098B3FA /* TextAlternativeWithRange.h in Headers */,
    2514425147                                50987C27157D676D00BDA835 /* CustomFilterGlobalContext.h in Headers */,
     25148                                4F32BB1B14FA85E800F6C1A3 /* MemoryInstrumentation.h in Headers */,
    2514525149                        );
    2514625150                        runOnlyForDeploymentPostprocessing = 0;
  • trunk/Source/WebCore/bindings/js/ScriptWrappable.h

    r118483 r121022  
    5555    }
    5656
     57    void reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
     58    {
     59        memoryObjectInfo->reportObjectInfo(this, MemoryInstrumentation::DOM);
     60        memoryObjectInfo->reportObject(m_wrapper);
     61    }
     62
    5763private:
    5864    JSC::Weak<JSDOMWrapper> m_wrapper;
  • trunk/Source/WebCore/bindings/v8/ScriptWrappable.h

    r95901 r121022  
    5353    void clearWrapper() { m_wrapper = 0; }
    5454
     55    void reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
     56    {
     57        memoryObjectInfo->reportObjectInfo(this, MemoryInstrumentation::DOM);
     58        memoryObjectInfo->reportPointer(m_wrapper, MemoryInstrumentation::DOM);
     59    }
     60
    5561private:
    5662    v8::Persistent<v8::Object>* m_wrapper;
  • trunk/Source/WebCore/css/StylePropertySet.h

    r120696 r121022  
    2626#include "CSSProperty.h"
    2727#include "CSSPropertyNames.h"
     28#include "MemoryInstrumentation.h"
    2829#include <wtf/ListHashSet.h>
    2930#include <wtf/Vector.h>
     
    116117#endif
    117118   
     119    void reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
     120    {
     121        memoryObjectInfo->reportObjectInfo(this, MemoryInstrumentation::CSS);
     122        if (m_isMutable)
     123            memoryObjectInfo->reportPointer(m_mutablePropertyVector, MemoryInstrumentation::CSS);
     124    }
     125
    118126private:
    119127    StylePropertySet(CSSParserMode);
  • trunk/Source/WebCore/dom/ContainerNode.h

    r118199 r121022  
    100100    Node* traverseNextNode(const Node* stayWithin) const;
    101101
     102    virtual void reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
     103    {
     104        memoryObjectInfo->reportObjectInfo(this, MemoryInstrumentation::DOM);
     105        Node::reportMemoryUsage(memoryObjectInfo);
     106        memoryObjectInfo->reportInstrumentedPointer(m_firstChild);
     107        memoryObjectInfo->reportInstrumentedPointer(m_lastChild);
     108    }
     109
    102110protected:
    103111    ContainerNode(Document*, ConstructionType = CreateContainer);
  • trunk/Source/WebCore/dom/Element.h

    r120486 r121022  
    422422    void setSavedLayerScrollOffset(const IntSize&);
    423423
     424    virtual void reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
     425    {
     426        memoryObjectInfo->reportObjectInfo(this, MemoryInstrumentation::DOM);
     427        ContainerNode::reportMemoryUsage(memoryObjectInfo);
     428        memoryObjectInfo->reportInstrumentedObject(m_tagName);
     429        memoryObjectInfo->reportInstrumentedPointer(m_attributeData.get());
     430    }
     431
    424432protected:
    425433    Element(const QualifiedName& tagName, Document* document, ConstructionType type)
  • trunk/Source/WebCore/dom/ElementAttributeData.h

    r119426 r121022  
    2828
    2929#include "Attribute.h"
     30#include "MemoryInstrumentation.h"
    3031#include "SpaceSplitString.h"
    3132#include "StylePropertySet.h"
     
    99100    PassRefPtr<Attr> attrIfExists(Element*, const QualifiedName&);
    100101    PassRefPtr<Attr> ensureAttr(Element*, const QualifiedName&);
     102
     103    void reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
     104    {
     105        memoryObjectInfo->reportObjectInfo(this, MemoryInstrumentation::DOM);
     106        memoryObjectInfo->reportInstrumentedPointer(m_inlineStyleDecl.get());
     107        memoryObjectInfo->reportInstrumentedPointer(m_attributeStyle.get());
     108        memoryObjectInfo->reportObject(m_classNames);
     109        memoryObjectInfo->reportObject(m_idForStyleResolution);
     110        memoryObjectInfo->reportObject(m_attributes);
     111    }
    101112
    102113private:
  • trunk/Source/WebCore/dom/Node.cpp

    r120979 r121022  
    27862786}
    27872787
     2788void Node::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
     2789{
     2790    memoryObjectInfo->reportObjectInfo(this, MemoryInstrumentation::DOM);
     2791    TreeShared<Node, ContainerNode>::reportMemoryUsage(memoryObjectInfo);
     2792    ScriptWrappable::reportMemoryUsage(memoryObjectInfo);
     2793    memoryObjectInfo->reportPointer(m_document, MemoryInstrumentation::DOM);
     2794    memoryObjectInfo->reportInstrumentedPointer(m_next);
     2795    memoryObjectInfo->reportInstrumentedPointer(m_previous);
     2796}
     2797
    27882798} // namespace WebCore
    27892799
  • trunk/Source/WebCore/dom/Node.h

    r120979 r121022  
    3030#include "KURLHash.h"
    3131#include "LayoutTypes.h"
     32#include "MemoryInstrumentation.h"
    3233#include "RenderStyleConstants.h"
    3334#include "ScriptWrappable.h"
     
    649650    size_t numberOfScopedHTMLStyleChildren() const;
    650651
     652    virtual void reportMemoryUsage(MemoryObjectInfo*) const;
     653
    651654private:
    652655    enum NodeFlags {
  • trunk/Source/WebCore/dom/QualifiedName.h

    r98316 r121022  
    2121#ifndef QualifiedName_h
    2222#define QualifiedName_h
     23
     24#include "MemoryInstrumentation.h"
    2325
    2426#include <wtf/HashTraits.h>
     
    4951        mutable AtomicString m_localNameUpper;
    5052
     53        void reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
     54        {
     55            memoryObjectInfo->reportObjectInfo(this, MemoryInstrumentation::DOM);
     56            memoryObjectInfo->reportObject(m_prefix);
     57            memoryObjectInfo->reportObject(m_localName);
     58            memoryObjectInfo->reportObject(m_namespace);
     59            memoryObjectInfo->reportObject(m_localNameUpper);
     60        }
    5161    private:
    5262        QualifiedNameImpl(const AtomicString& prefix, const AtomicString& localName, const AtomicString& namespaceURI)
     
    93103    static void init();
    94104   
     105    void reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
     106    {
     107        memoryObjectInfo->reportObjectInfo(this, MemoryInstrumentation::DOM);
     108        memoryObjectInfo->reportInstrumentedPointer(m_impl);
     109    }
    95110private:
    96111    void init(const AtomicString& prefix, const AtomicString& localName, const AtomicString& namespaceURI);
  • trunk/Source/WebCore/inspector/InspectorMemoryAgent.cpp

    r121002 r121022  
    4545#include "InstrumentingAgents.h"
    4646#include "MemoryCache.h"
     47#include "MemoryInstrumentation.h"
    4748#include "MemoryUsageSupport.h"
    4849#include "Node.h"
     
    7879static const char renderTreeUsed[] = "RenderTreeUsed";
    7980static const char renderTreeAllocated[] = "RenderTreeAllocated";
     81
     82static const char dom[] = "DOM";
     83static const char domTreeOther[] = "DOMTreeOther";
     84static const char domTreeDOM[] = "DOMTreeDOM";
     85static const char domTreeCSS[] = "DOMTreeCSS";
    8086}
    8187
     
    176182        collectNodeNameInfo(node);
    177183        collectListenersInfo(node);
    178     }
    179 
    180     void collectCharacterData(Node*)
    181     {
    182184    }
    183185
     
    373375}
    374376
    375 static void addMemoryBlockFor(TypeBuilder::Array<InspectorMemoryBlock>* array, const MemoryCache::TypeStatistic& statistic, const char* name)
     377static void addMemoryBlockFor(TypeBuilder::Array<InspectorMemoryBlock>* array, size_t size, const char* name)
    376378{
    377379    RefPtr<InspectorMemoryBlock> result = InspectorMemoryBlock::create().setName(name);
    378     result->setSize(statistic.size);
     380    result->setSize(size);
    379381    array->addItem(result);
     382}
     383
     384namespace {
     385
     386class MemoryInstrumentationImpl : public MemoryInstrumentation {
     387public:
     388    MemoryInstrumentationImpl()
     389    {
     390        for (int i = 0; i < LastTypeEntry; ++i)
     391            m_totalSizes[i] = 0;
     392    }
     393
     394    PassRefPtr<InspectorMemoryBlock> dumpStatistics()
     395    {
     396        size_t totalSize = 0;
     397        for (int i = Other; i < LastTypeEntry; ++i)
     398            totalSize += m_totalSizes[i];
     399
     400        RefPtr<TypeBuilder::Array<InspectorMemoryBlock> > domChildren = TypeBuilder::Array<InspectorMemoryBlock>::create();
     401        addMemoryBlockFor(domChildren.get(), m_totalSizes[Other], MemoryBlockName::domTreeOther);
     402        addMemoryBlockFor(domChildren.get(), m_totalSizes[DOM], MemoryBlockName::domTreeDOM);
     403        addMemoryBlockFor(domChildren.get(), m_totalSizes[CSS], MemoryBlockName::domTreeCSS);
     404
     405        RefPtr<InspectorMemoryBlock> dom = InspectorMemoryBlock::create().setName(MemoryBlockName::dom);
     406        dom->setSize(totalSize);
     407        dom->setChildren(domChildren.release());
     408        return dom.release();
     409    }
     410
     411private:
     412    virtual void countObjectSize(ObjectType objectType, size_t size)
     413    {
     414        ASSERT(objectType >= 0 && objectType < LastTypeEntry);
     415        m_totalSizes[objectType] += size;
     416    }
     417
     418    virtual bool visited(const void* object)
     419    {
     420        return !m_visitedObjects.add(object).isNewEntry;
     421    }
     422    size_t m_totalSizes[LastTypeEntry];
     423    typedef HashSet<const void*> VisitedObjects;
     424    VisitedObjects m_visitedObjects;
     425};
     426
     427class DOMTreesIterator : public DOMWrapperVisitor {
     428public:
     429    explicit DOMTreesIterator(Page* page) : m_page(page) { }
     430
     431    virtual void visitNode(Node* node)
     432    {
     433        if (node->document() && node->document()->frame() && m_page != node->document()->frame()->page())
     434            return;
     435
     436        m_domMemoryUsage.reportInstrumentedPointer(node);
     437    }
     438
     439    virtual void visitJSExternalString(StringImpl*) { }
     440
     441    PassRefPtr<InspectorMemoryBlock> dumpStatistics() { return m_domMemoryUsage.dumpStatistics(); }
     442
     443private:
     444    Page* m_page;
     445    MemoryInstrumentationImpl m_domMemoryUsage;
     446};
     447
     448}
     449
     450static PassRefPtr<InspectorMemoryBlock> domTreeInfo(Page* page)
     451{
     452    DOMTreesIterator domTreesIterator(page);
     453    ScriptProfiler::visitJSDOMWrappers(&domTreesIterator);
     454
     455    // Make sure all documents reachable from the main frame are accounted.
     456    for (Frame* frame = page->mainFrame(); frame; frame = frame->tree()->traverseNext()) {
     457        if (Document* doc = frame->document())
     458            domTreesIterator.visitNode(doc);
     459    }
     460
     461    return domTreesIterator.dumpStatistics();
    380462}
    381463
     
    392474
    393475    RefPtr<TypeBuilder::Array<InspectorMemoryBlock> > children = TypeBuilder::Array<InspectorMemoryBlock>::create();
    394     addMemoryBlockFor(children.get(), stats.images, MemoryBlockName::cachedImages);
    395     addMemoryBlockFor(children.get(), stats.cssStyleSheets, MemoryBlockName::cachedCssStyleSheets);
    396     addMemoryBlockFor(children.get(), stats.scripts, MemoryBlockName::cachedScripts);
    397     addMemoryBlockFor(children.get(), stats.xslStyleSheets, MemoryBlockName::cachedXslStyleSheets);
    398     addMemoryBlockFor(children.get(), stats.fonts, MemoryBlockName::cachedFonts);
    399     memoryCacheStats->setChildren(children);
     476    addMemoryBlockFor(children.get(), stats.images.size, MemoryBlockName::cachedImages);
     477    addMemoryBlockFor(children.get(), stats.cssStyleSheets.size, MemoryBlockName::cachedCssStyleSheets);
     478    addMemoryBlockFor(children.get(), stats.scripts.size, MemoryBlockName::cachedScripts);
     479    addMemoryBlockFor(children.get(), stats.xslStyleSheets.size, MemoryBlockName::cachedXslStyleSheets);
     480    addMemoryBlockFor(children.get(), stats.fonts.size, MemoryBlockName::cachedFonts);
     481    memoryCacheStats->setChildren(children.get());
    400482    return memoryCacheStats.release();
    401483}
     
    414496    children->addItem(memoryCacheInfo());
    415497    children->addItem(renderTreeInfo(m_page)); // TODO: collect for all pages?
     498    children->addItem(domTreeInfo(m_page)); // TODO: collect for all pages?
    416499    processMemory->setChildren(children);
    417500}
  • trunk/Source/WebCore/platform/TreeShared.h

    r119943 r121022  
    112112#endif
    113113
     114    void reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
     115    {
     116        memoryObjectInfo->reportObjectInfo(this, MemoryInstrumentation::DOM);
     117        memoryObjectInfo->reportInstrumentedPointer(m_parent);
     118    }
     119
    114120private:
    115121#ifndef NDEBUG
Note: See TracChangeset for help on using the changeset viewer.