Changeset 121144 in webkit


Ignore:
Timestamp:
Jun 25, 2012 2:26:50 AM (12 years ago)
Author:
yurys@chromium.org
Message:

Web Inspector: add external resources size to the native memory diagram
https://bugs.webkit.org/show_bug.cgi?id=89754

Reviewed by Vsevolod Vlasov.

Size of external strings and arrays is now reported through the inspector
protocol and displayed on the native memory chart.

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

(WebCore):
(WebCore::ScriptProfiler::visitJSDOMWrappers):
(WebCore::ScriptProfiler::visitExternalJSStrings):
(WebCore::ScriptProfiler::visitExternalJSArrays):

  • bindings/v8/ScriptProfiler.cpp:

(WebCore::ScriptProfiler::visitJSDOMWrappers):
(WebCore::ScriptProfiler::visitExternalJSStrings):
(WebCore::ScriptProfiler::visitExternalJSArrays):
(WebCore):

  • bindings/v8/ScriptProfiler.h:

(WebCore):
(ScriptProfiler):

  • bindings/v8/V8Binding.cpp:

(WebCore::WebCoreStringResource::visitStrings):
(WebCore::V8BindingPerIsolateData::visitJSExternalStrings):

  • bindings/v8/V8Binding.h:

(WebCore):
(V8BindingPerIsolateData):

  • inspector/BindingVisitors.h: Renamed from Source/WebCore/inspector/DOMWrapperVisitor.h.

(WTF):
(WebCore):
(NodeWrapperVisitor):
(WebCore::NodeWrapperVisitor::~NodeWrapperVisitor):
(ExternalStringVisitor):
(WebCore::ExternalStringVisitor::~ExternalStringVisitor):
(ExternalArrayVisitor):
(WebCore::ExternalArrayVisitor::~ExternalArrayVisitor):

  • inspector/InspectorMemoryAgent.cpp:

(MemoryBlockName):
(WebCore):
(WebCore::jsExternalResourcesInfo):
(WebCore::InspectorMemoryAgent::getProcessMemoryDistribution):

  • inspector/front-end/NativeMemorySnapshotView.js:

(WebInspector.MemoryBlockViewProperties._initialize):

Location:
trunk/Source/WebCore
Files:
13 edited
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r121137 r121144  
     12012-06-22  Yury Semikhatsky  <yurys@chromium.org>
     2
     3        Web Inspector: add external resources size to the native memory diagram
     4        https://bugs.webkit.org/show_bug.cgi?id=89754
     5
     6        Reviewed by Vsevolod Vlasov.
     7
     8        Size of external strings and arrays is now reported through the inspector
     9        protocol and displayed on the native memory chart.
     10
     11        * GNUmakefile.list.am:
     12        * Target.pri:
     13        * WebCore.gypi:
     14        * WebCore.vcproj/WebCore.vcproj:
     15        * WebCore.xcodeproj/project.pbxproj:
     16        * bindings/js/ScriptProfiler.h:
     17        (WebCore):
     18        (WebCore::ScriptProfiler::visitJSDOMWrappers):
     19        (WebCore::ScriptProfiler::visitExternalJSStrings):
     20        (WebCore::ScriptProfiler::visitExternalJSArrays):
     21        * bindings/v8/ScriptProfiler.cpp:
     22        (WebCore::ScriptProfiler::visitJSDOMWrappers):
     23        (WebCore::ScriptProfiler::visitExternalJSStrings):
     24        (WebCore::ScriptProfiler::visitExternalJSArrays):
     25        (WebCore):
     26        * bindings/v8/ScriptProfiler.h:
     27        (WebCore):
     28        (ScriptProfiler):
     29        * bindings/v8/V8Binding.cpp:
     30        (WebCore::WebCoreStringResource::visitStrings):
     31        (WebCore::V8BindingPerIsolateData::visitJSExternalStrings):
     32        * bindings/v8/V8Binding.h:
     33        (WebCore):
     34        (V8BindingPerIsolateData):
     35        * inspector/BindingVisitors.h: Renamed from Source/WebCore/inspector/DOMWrapperVisitor.h.
     36        (WTF):
     37        (WebCore):
     38        (NodeWrapperVisitor):
     39        (WebCore::NodeWrapperVisitor::~NodeWrapperVisitor):
     40        (ExternalStringVisitor):
     41        (WebCore::ExternalStringVisitor::~ExternalStringVisitor):
     42        (ExternalArrayVisitor):
     43        (WebCore::ExternalArrayVisitor::~ExternalArrayVisitor):
     44        * inspector/InspectorMemoryAgent.cpp:
     45        (MemoryBlockName):
     46        (WebCore):
     47        (WebCore::jsExternalResourcesInfo):
     48        (WebCore::InspectorMemoryAgent::getProcessMemoryDistribution):
     49        * inspector/front-end/NativeMemorySnapshotView.js:
     50        (WebInspector.MemoryBlockViewProperties._initialize):
     51
    1522012-06-24  Fumitoshi Ukai  <ukai@chromium.org>
    253
  • trunk/Source/WebCore/GNUmakefile.list.am

    r121022 r121144  
    26432643        Source/WebCore/icu/unicode/utypes.h \
    26442644        Source/WebCore/icu/unicode/uversion.h \
     2645        Source/WebCore/inspector/BindingVisitors.h \
    26452646        Source/WebCore/inspector/ConsoleMessage.cpp \
    26462647        Source/WebCore/inspector/ConsoleMessage.h \
     
    26532654        Source/WebCore/inspector/DOMPatchSupport.cpp \
    26542655        Source/WebCore/inspector/DOMPatchSupport.h \
    2655         Source/WebCore/inspector/DOMWrapperVisitor.h \
    26562656        Source/WebCore/inspector/IdentifiersFactory.cpp \
    26572657        Source/WebCore/inspector/IdentifiersFactory.h \
  • trunk/Source/WebCore/Target.pri

    r121022 r121144  
    20362036    html/track/WebVTTToken.h \
    20372037    html/track/WebVTTTokenizer.h \
     2038    inspector/BindingVisitor.h \
    20382039    inspector/ConsoleMessage.h \
    20392040    inspector/ContentSearchUtils.h \
     
    20412042    inspector/DOMNodeHighlighter.h \
    20422043    inspector/DOMPatchSupport.h \
    2043     inspector/DOMWrapperVisitor.h \
    20442044    inspector/IdentifiersFactory.h \
    20452045    inspector/InjectedScript.h \
  • trunk/Source/WebCore/WebCore.gypi

    r121069 r121144  
    27542754            'icu/unicode/utypes.h',
    27552755            'icu/unicode/uversion.h',
     2756            'inspector/BindingVisitors.h',
    27562757            'inspector/ConsoleMessage.cpp',
    27572758            'inspector/ConsoleMessage.h',
     
    27642765            'inspector/DOMPatchSupport.cpp',
    27652766            'inspector/DOMPatchSupport.h',
    2766             'inspector/DOMWrapperVisitor.h',
    27672767            'inspector/IdentifiersFactory.cpp',
    27682768            'inspector/IdentifiersFactory.h',
  • trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj

    r121022 r121144  
    7318873188                        >
    7318973189                        <File
     73190                                RelativePath="..\inspector\BindingVisitors.h"
     73191                                >
     73192                        </File>
     73193                        <File
    7319073194                                RelativePath="..\inspector\ConsoleMessage.cpp"
    7319173195                                >
     
    7330573309                        <File
    7330673310                                RelativePath="..\inspector\DOMPatchSupport.h"
    73307                                 >
    73308                         </File>
    73309                         <File
    73310                                 RelativePath="..\inspector\DOMWrapperVisitor.h"
    7331173311                                >
    7331273312                        </File>
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r121059 r121144  
    61216121                F34742E91343635000531BC2 /* WorkerScriptDebugServer.h in Headers */ = {isa = PBXBuildFile; fileRef = F34742E71343635000531BC2 /* WorkerScriptDebugServer.h */; };
    61226122                F350B73513F1377D00880C43 /* InstrumentingAgents.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F350B73413F1377D00880C43 /* InstrumentingAgents.cpp */; };
    6123                 F35AE5AC14925F5B004D5776 /* DOMWrapperVisitor.h in Headers */ = {isa = PBXBuildFile; fileRef = F35AE5AB14925F5B004D5776 /* DOMWrapperVisitor.h */; };
     6123                F35AE5AC14925F5B004D5776 /* BindingVisitors.h in Headers */ = {isa = PBXBuildFile; fileRef = F35AE5AB14925F5B004D5776 /* BindingVisitors.h */; };
    61246124                F3644AFF1119805900E0D537 /* InjectedScript.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F3644AFD1119805900E0D537 /* InjectedScript.cpp */; };
    61256125                F3644B001119805900E0D537 /* InjectedScript.h in Headers */ = {isa = PBXBuildFile; fileRef = F3644AFE1119805900E0D537 /* InjectedScript.h */; };
     
    1338913389                F34742E71343635000531BC2 /* WorkerScriptDebugServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WorkerScriptDebugServer.h; sourceTree = "<group>"; };
    1339013390                F350B73413F1377D00880C43 /* InstrumentingAgents.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InstrumentingAgents.cpp; sourceTree = "<group>"; };
    13391                 F35AE5AB14925F5B004D5776 /* DOMWrapperVisitor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMWrapperVisitor.h; sourceTree = "<group>"; };
     13391                F35AE5AB14925F5B004D5776 /* BindingVisitors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BindingVisitors.h; sourceTree = "<group>"; };
    1339213392                F3644AFD1119805900E0D537 /* InjectedScript.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InjectedScript.cpp; sourceTree = "<group>"; };
    1339313393                F3644AFE1119805900E0D537 /* InjectedScript.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InjectedScript.h; sourceTree = "<group>"; };
     
    1441514415                        children = (
    1441614416                                1C81B9590E97330800266E07 /* front-end */,
     14417                                F35AE5AB14925F5B004D5776 /* BindingVisitors.h */,
    1441714418                                41F0618D0F5F069800A07EAC /* ConsoleMessage.cpp */,
    1441814419                                41F0618C0F5F069800A07EAC /* ConsoleMessage.h */,
     
    1442514426                                7A54881614E432A1006AE05A /* DOMPatchSupport.cpp */,
    1442614427                                7A54881514E432A1006AE05A /* DOMPatchSupport.h */,
    14427                                 F35AE5AB14925F5B004D5776 /* DOMWrapperVisitor.h */,
    1442814428                                5913A23F13D49EBA00F5B05C /* IdentifiersFactory.cpp */,
    1442914429                                5913A24013D49EBA00F5B05C /* IdentifiersFactory.h */,
     
    2203722037                                A622A8FB122C44A600A785B3 /* BindingSecurity.h in Headers */,
    2203822038                                A622A8FD122C44A600A785B3 /* BindingSecurityBase.h in Headers */,
     22039                                F35AE5AC14925F5B004D5776 /* BindingVisitors.h in Headers */,
    2203922040                                FD31608D12B026F700C1A359 /* Biquad.h in Headers */,
    2204022041                                FD31602512B0267600C1A359 /* BiquadDSPKernel.h in Headers */,
     
    2292122922                                89F60B11157F686E0075E157 /* DOMWindowQuota.h in Headers */,
    2292222923                                A8CCBB49151F831600AB7CE9 /* DOMWindowWebDatabase.h in Headers */,
    22923                                 F35AE5AC14925F5B004D5776 /* DOMWrapperVisitor.h in Headers */,
    2292422924                                BC53DA2E1143121E000D817E /* DOMWrapperWorld.h in Headers */,
    2292522925                                1A1D13800A5325520064BF5F /* DOMXPath.h in Headers */,
  • trunk/Source/WebCore/bindings/js/ScriptProfiler.h

    r120791 r121144  
    3737namespace WebCore {
    3838
    39 class DOMWrapperVisitor;
     39class ExternalArrayVisitor;
     40class ExternalStringVisitor;
     41class NodeWrapperVisitor;
    4042class Page;
    4143class ScriptObject;
     
    7375    static bool hasHeapProfiler() { return false; }
    7476    // FIXME: Implement this counter for JSC. See bug 73936 for more details.
    75     static void visitJSDOMWrappers(DOMWrapperVisitor*) { }
    76     static void visitExternalJSStrings(DOMWrapperVisitor*) { }
     77    static void visitNodeWrappers(NodeWrapperVisitor*) { }
     78    static void visitExternalStrings(ExternalStringVisitor*) { }
     79    static void visitExternalArrays(ExternalArrayVisitor*) { }
    7780    static size_t profilerSnapshotsSize() { return 0; }
    7881};
  • trunk/Source/WebCore/bindings/v8/ScriptProfiler.cpp

    r120791 r121144  
    3333#include "ScriptProfiler.h"
    3434
    35 #include "DOMWrapperVisitor.h"
     35#include "BindingVisitors.h"
    3636#include "RetainedDOMInfo.h"
    3737#include "ScriptObject.h"
     38#include "V8ArrayBufferView.h"
    3839#include "V8Binding.h"
    3940#include "V8DOMMap.h"
     
    176177}
    177178
    178 void ScriptProfiler::visitJSDOMWrappers(DOMWrapperVisitor* visitor)
     179void ScriptProfiler::visitNodeWrappers(NodeWrapperVisitor* visitor)
    179180{
    180181    class VisitorAdapter : public DOMWrapperMap<Node>::Visitor {
    181182    public:
    182         VisitorAdapter(DOMWrapperVisitor* visitor) : m_visitor(visitor) { }
     183        VisitorAdapter(NodeWrapperVisitor* visitor) : m_visitor(visitor) { }
    183184
    184185        virtual void visitDOMWrapper(DOMDataStore*, Node* node, v8::Persistent<v8::Object>)
     
    187188        }
    188189    private:
    189         DOMWrapperVisitor* m_visitor;
     190        NodeWrapperVisitor* m_visitor;
    190191    } adapter(visitor);
    191192    visitDOMNodes(&adapter);
    192193}
    193194
    194 void ScriptProfiler::visitExternalJSStrings(DOMWrapperVisitor* visitor)
    195 {
    196     V8BindingPerIsolateData::current()->visitJSExternalStrings(visitor);
     195void ScriptProfiler::visitExternalStrings(ExternalStringVisitor* visitor)
     196{
     197    V8BindingPerIsolateData::current()->visitExternalStrings(visitor);
     198}
     199
     200void ScriptProfiler::visitExternalArrays(ExternalArrayVisitor* visitor)
     201{
     202    class VisitorAdapter : public DOMWrapperMap<void>::Visitor {
     203    public:
     204        VisitorAdapter(ExternalArrayVisitor* visitor) : m_visitor(visitor) { }
     205
     206        virtual void visitDOMWrapper(DOMDataStore*, void* impl, v8::Persistent<v8::Object> v8Object)
     207        {
     208            WrapperTypeInfo* type = V8DOMWrapper::domWrapperType(v8Object);
     209            if (!type->isSubclass(&V8ArrayBufferView::info))
     210                return;
     211            ArrayBufferView* arrayBufferView = V8ArrayBufferView::toNative(v8Object);
     212            m_visitor->visitJSExternalArray(arrayBufferView);
     213        }
     214    private:
     215        ExternalArrayVisitor* m_visitor;
     216    } adapter(visitor);
     217
     218    getDOMObjectMap().visit(0, &adapter);
     219
    197220}
    198221
  • trunk/Source/WebCore/bindings/v8/ScriptProfiler.h

    r120791 r121144  
    4141namespace WebCore {
    4242
    43 class DOMWrapperVisitor;
     43class ExternalArrayVisitor;
     44class ExternalStringVisitor;
     45class NodeWrapperVisitor;
    4446class Page;
    4547class ScriptObject;
     
    7779    static bool hasHeapProfiler() { return true; }
    7880    static void initialize();
    79     static void visitJSDOMWrappers(DOMWrapperVisitor*);
    80     static void visitExternalJSStrings(DOMWrapperVisitor*);
     81    static void visitNodeWrappers(NodeWrapperVisitor*);
     82    static void visitExternalStrings(ExternalStringVisitor*);
     83    static void visitExternalArrays(ExternalArrayVisitor*);
    8184    static size_t profilerSnapshotsSize();
    8285};
  • trunk/Source/WebCore/bindings/v8/V8Binding.cpp

    r120389 r121144  
    3232#include "V8Binding.h"
    3333
     34#include "BindingVisitors.h"
    3435#include "DOMStringList.h"
    35 #include "DOMWrapperVisitor.h"
    3636#include "Element.h"
    3737#include "PlatformString.h"
     
    151151    }
    152152
    153     void visitStrings(DOMWrapperVisitor* visitor)
     153    void visitStrings(ExternalStringVisitor* visitor)
    154154    {
    155155        visitor->visitJSExternalString(m_plainString.impl());
     
    179179
    180180#if ENABLE(INSPECTOR)
    181 void V8BindingPerIsolateData::visitJSExternalStrings(DOMWrapperVisitor* visitor)
     181void V8BindingPerIsolateData::visitExternalStrings(ExternalStringVisitor* visitor)
    182182{
    183183    v8::HandleScope handleScope;
    184184    class VisitorImpl : public v8::ExternalResourceVisitor {
    185185    public:
    186         VisitorImpl(DOMWrapperVisitor* visitor) : m_visitor(visitor) { }
     186        VisitorImpl(ExternalStringVisitor* visitor) : m_visitor(visitor) { }
    187187        virtual ~VisitorImpl() { }
    188188        virtual void VisitExternalString(v8::Handle<v8::String> string)
     
    193193        }
    194194    private:
    195         DOMWrapperVisitor* m_visitor;
     195        ExternalStringVisitor* m_visitor;
    196196    } v8Visitor(visitor);
    197197    v8::V8::VisitExternalResources(&v8Visitor);
  • trunk/Source/WebCore/bindings/v8/V8Binding.h

    r120389 r121144  
    4747
    4848    class DOMStringList;
    49     class DOMWrapperVisitor;
    5049    class EventListener;
    5150    class EventTarget;
     51    class ExternalStringVisitor;
    5252
    5353    // FIXME: Remove V8Binding.
     
    147147        StringCache* stringCache() { return &m_stringCache; }
    148148#if ENABLE(INSPECTOR)
    149         void visitJSExternalStrings(DOMWrapperVisitor*);
     149        void visitExternalStrings(ExternalStringVisitor*);
    150150#endif
    151151        DOMDataList& allStores() { return m_domDataList; }
  • trunk/Source/WebCore/inspector/BindingVisitors.h

    r121143 r121144  
    2727 */
    2828
    29 #ifndef DOMWrapperVisitor_h
    30 #define DOMWrapperVisitor_h
     29#ifndef BindingVisitors_h
     30#define BindingVisitors_h
     31
     32namespace WTF {
     33class ArrayBufferView;
     34class StringImpl;
     35}
    3136
    3237namespace WebCore {
     
    3439class Node;
    3540
    36 class DOMWrapperVisitor {
     41class NodeWrapperVisitor {
    3742public:
    3843    virtual void visitNode(Node*) = 0;
    39     virtual void visitJSExternalString(StringImpl*) = 0;
    4044protected:
    41     virtual ~DOMWrapperVisitor() { }
     45    virtual ~NodeWrapperVisitor() { }
     46};
     47
     48class ExternalStringVisitor {
     49public:
     50    virtual void visitJSExternalString(WTF::StringImpl*) = 0;
     51protected:
     52    virtual ~ExternalStringVisitor() { }
     53};
     54
     55
     56class ExternalArrayVisitor {
     57public:
     58    virtual void visitJSExternalArray(WTF::ArrayBufferView*) = 0;
     59protected:
     60    virtual ~ExternalArrayVisitor() { }
    4261};
    4362
    4463} // namespace WebCore
    4564
    46 #endif // DOMWrapperVisitor_h
     65#endif // BindingVisitors_h
  • trunk/Source/WebCore/inspector/InspectorMemoryAgent.cpp

    r121022 r121144  
    3535#include "InspectorMemoryAgent.h"
    3636
     37#include "BindingVisitors.h"
    3738#include "CharacterData.h"
    38 #include "DOMWrapperVisitor.h"
    3939#include "Document.h"
    4040#include "EventListenerMap.h"
     
    5252#include "ScriptProfiler.h"
    5353#include "StyledElement.h"
     54#include <wtf/ArrayBuffer.h>
     55#include <wtf/ArrayBufferView.h>
    5456#include <wtf/HashSet.h>
    5557#include <wtf/text/StringBuilder.h>
     
    6870static const char jsHeapAllocated[] = "JSHeapAllocated";
    6971static const char jsHeapUsed[] = "JSHeapUsed";
     72static const char jsExternalResources[] = "JSExternalResources";
     73static const char jsExternalArrays[] = "JSExternalArrays";
     74static const char jsExternalStrings[] = "JSExternalStrings";
    7075static const char inspectorData[] = "InspectorData";
    7176static const char memoryCache[] = "MemoryCache";
     
    95100}
    96101
    97 int stringSize(StringImpl* string)
    98 {
    99     int size = string->length();
     102size_t stringSize(StringImpl* string)
     103{
     104    size_t size = string->length();
    100105    if (!string->is8Bit())
    101106        size *= 2;
     
    219224};
    220225
    221 class CounterVisitor : public DOMWrapperVisitor {
     226class CounterVisitor : public NodeWrapperVisitor, public ExternalStringVisitor {
    222227public:
    223228    CounterVisitor(Page* page)
     
    309314};
    310315
     316class ExternalResourceVisitor : public ExternalStringVisitor, public ExternalArrayVisitor {
     317public:
     318    ExternalResourceVisitor()
     319        : m_jsExternalStringSize(0)
     320        , m_externalArraySize(0)
     321    { }
     322
     323    size_t externalStringSize() const { return m_jsExternalStringSize; }
     324    size_t externalArraySize() const { return m_externalArraySize; }
     325
     326private:
     327    virtual void visitJSExternalArray(ArrayBufferView* bufferView)
     328    {
     329        ArrayBuffer* buffer = bufferView->buffer().get();
     330        if (m_arrayBuffers.add(buffer).isNewEntry)
     331            m_externalArraySize += buffer->byteLength();
     332    }
     333    virtual void visitJSExternalString(StringImpl* string)
     334    {
     335        int size = stringSize(string);
     336        m_jsExternalStringSize += size;
     337    }
     338
     339    size_t m_jsExternalStringSize;
     340    size_t m_externalArraySize;
     341    HashSet<ArrayBuffer*> m_arrayBuffers;
     342};
     343
    311344} // namespace
    312345
     
    318351{
    319352    CounterVisitor counterVisitor(m_page);
    320     ScriptProfiler::visitJSDOMWrappers(&counterVisitor);
     353    ScriptProfiler::visitNodeWrappers(&counterVisitor);
    321354
    322355    // Make sure all documents reachable from the main frame are accounted.
     
    326359    }
    327360
    328     ScriptProfiler::visitExternalJSStrings(&counterVisitor);
     361    ScriptProfiler::visitExternalStrings(&counterVisitor);
    329362
    330363    domGroups = counterVisitor.domGroups();
     
    425458};
    426459
    427 class DOMTreesIterator : public DOMWrapperVisitor {
     460class DOMTreesIterator : public NodeWrapperVisitor {
    428461public:
    429462    explicit DOMTreesIterator(Page* page) : m_page(page) { }
     
    436469        m_domMemoryUsage.reportInstrumentedPointer(node);
    437470    }
    438 
    439     virtual void visitJSExternalString(StringImpl*) { }
    440471
    441472    PassRefPtr<InspectorMemoryBlock> dumpStatistics() { return m_domMemoryUsage.dumpStatistics(); }
     
    451482{
    452483    DOMTreesIterator domTreesIterator(page);
    453     ScriptProfiler::visitJSDOMWrappers(&domTreesIterator);
     484    ScriptProfiler::visitNodeWrappers(&domTreesIterator);
    454485
    455486    // Make sure all documents reachable from the main frame are accounted.
     
    483514}
    484515
     516static PassRefPtr<InspectorMemoryBlock> jsExternalResourcesInfo()
     517{
     518    ExternalResourceVisitor visitor;
     519    ScriptProfiler::visitExternalStrings(&visitor);
     520    ScriptProfiler::visitExternalArrays(&visitor);
     521
     522    RefPtr<InspectorMemoryBlock> externalResourcesStats = InspectorMemoryBlock::create().setName(MemoryBlockName::jsExternalResources);
     523    externalResourcesStats->setSize(visitor.externalStringSize() + visitor.externalArraySize());
     524    RefPtr<TypeBuilder::Array<InspectorMemoryBlock> > children = TypeBuilder::Array<InspectorMemoryBlock>::create();
     525
     526    RefPtr<InspectorMemoryBlock> externalStringStats = InspectorMemoryBlock::create().setName(MemoryBlockName::jsExternalStrings);
     527    externalStringStats->setSize(visitor.externalStringSize());
     528    children->addItem(externalStringStats);
     529
     530    RefPtr<InspectorMemoryBlock> externalArrayStats = InspectorMemoryBlock::create().setName(MemoryBlockName::jsExternalArrays);
     531    externalArrayStats->setSize(visitor.externalArraySize());
     532    children->addItem(externalArrayStats);
     533
     534    return externalResourcesStats.release();
     535}
     536
    485537void InspectorMemoryAgent::getProcessMemoryDistribution(ErrorString*, RefPtr<InspectorMemoryBlock>& processMemory)
    486538{
     
    493545    RefPtr<TypeBuilder::Array<InspectorMemoryBlock> > children = TypeBuilder::Array<InspectorMemoryBlock>::create();
    494546    children->addItem(jsHeapInfo());
     547    children->addItem(jsExternalResourcesInfo());
    495548    children->addItem(inspectorData());
    496549    children->addItem(memoryCacheInfo());
  • trunk/Source/WebCore/inspector/front-end/NativeMemorySnapshotView.js

    r120829 r121144  
    219219    addBlock("hsl( 90, 60%,  80%)", "JSHeapAllocated", "JavaScript heap");
    220220    addBlock("hsl( 90, 80%,  80%)", "JSHeapUsed", "Used JavaScript heap");
     221    addBlock("hsl( 90, 30%,  80%)", "JSExternalResources", "JavaScript external resources");
     222    addBlock("hsl( 90, 40%,  80%)", "JSExternalArrays", "JavaScript external arrays");
     223    addBlock("hsl( 90, 50%,  80%)", "JSExternalStrings", "JavaScript external strings");
    221224    addBlock("hsl(210, 60%,  80%)", "InspectorData", "Inspector data");
    222225    addBlock("hsl( 30, 60%,  80%)", "MemoryCache", "Memory cache resources");
Note: See TracChangeset for help on using the changeset viewer.