Changeset 122466 in webkit


Ignore:
Timestamp:
Jul 12, 2012 8:59:49 AM (12 years ago)
Author:
loislo@chromium.org
Message:

Web Inspector: fix native memory instrumentation code for the bindings instrumentation.
https://bugs.webkit.org/show_bug.cgi?id=91096

The instrumented class has to have instrumentation method which reports class size and type and
the member objects and pointers.

Sample:
void Node::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
{

memoryObjectInfo->reportObjectInfo(this, MemoryInstrumentation::DOM); report object size and type.
TreeShared<Node, ContainerNode>::reportMemoryUsage(memoryObjectInfo);
call base class instrumentation.
ScriptWrappable::reportMemoryUsage(memoryObjectInfo); call base class instrumentation.
memoryObjectInfo->reportPointer(m_document, MemoryInstrumentation::DOM);
report uninstrumented pointer.
memoryObjectInfo->reportInstrumentedPointer(m_next); report instrumented pointer.
memoryObjectInfo->reportInstrumentedObject(m_anObject);
report instrumented object.

}

Reviewed by Pavel Feldman.

Existing tests for native memory instrumentation.

  • bindings/v8/DOMDataStore.cpp:

(WebCore::DOMDataStore::reportMemoryUsage):

  • bindings/v8/DOMDataStore.h:

(WebCore):
(DOMDataStore):

  • bindings/v8/IntrusiveDOMWrapperMap.h:

(WebCore::ChunkedTable::reportMemoryUsage):

  • bindings/v8/ScriptProfiler.cpp:

(WebCore::ScriptProfiler::collectBindingMemoryInfo):

  • bindings/v8/V8Binding.cpp:

(WebCore::V8BindingPerIsolateData::reportMemoryUsage):
(WebCore::StringCache::reportMemoryUsage):

  • bindings/v8/V8Binding.h:

(WebCore):
(StringCache):
(V8BindingPerIsolateData):

  • bindings/v8/V8DOMMap.h:

(WebCore):
(AbstractWeakReferenceMap):

  • inspector/InspectorMemoryAgent.cpp:

(WebCore):

Location:
trunk/Source/WebCore
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r122465 r122466  
     12012-07-12  Ilya Tikhonovsky  <loislo@chromium.org>
     2
     3        Web Inspector: fix native memory instrumentation code for the bindings instrumentation.
     4        https://bugs.webkit.org/show_bug.cgi?id=91096
     5
     6        The instrumented class has to have instrumentation method which reports class size and type and
     7        the member objects and pointers.
     8
     9        Sample:
     10        void Node::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
     11        {
     12            memoryObjectInfo->reportObjectInfo(this, MemoryInstrumentation::DOM); // report object size and type.
     13            TreeShared<Node, ContainerNode>::reportMemoryUsage(memoryObjectInfo); // call base class instrumentation.
     14            ScriptWrappable::reportMemoryUsage(memoryObjectInfo); // call base class instrumentation.
     15            memoryObjectInfo->reportPointer(m_document, MemoryInstrumentation::DOM); // report uninstrumented pointer.
     16            memoryObjectInfo->reportInstrumentedPointer(m_next); // report instrumented pointer.
     17            memoryObjectInfo->reportInstrumentedObject(m_anObject); // report instrumented object.
     18        }
     19
     20        Reviewed by Pavel Feldman.
     21
     22        Existing tests for native memory instrumentation.
     23
     24        * bindings/v8/DOMDataStore.cpp:
     25        (WebCore::DOMDataStore::reportMemoryUsage):
     26        * bindings/v8/DOMDataStore.h:
     27        (WebCore):
     28        (DOMDataStore):
     29        * bindings/v8/IntrusiveDOMWrapperMap.h:
     30        (WebCore::ChunkedTable::reportMemoryUsage):
     31        * bindings/v8/ScriptProfiler.cpp:
     32        (WebCore::ScriptProfiler::collectBindingMemoryInfo):
     33        * bindings/v8/V8Binding.cpp:
     34        (WebCore::V8BindingPerIsolateData::reportMemoryUsage):
     35        (WebCore::StringCache::reportMemoryUsage):
     36        * bindings/v8/V8Binding.h:
     37        (WebCore):
     38        (StringCache):
     39        (V8BindingPerIsolateData):
     40        * bindings/v8/V8DOMMap.h:
     41        (WebCore):
     42        (AbstractWeakReferenceMap):
     43        * inspector/InspectorMemoryAgent.cpp:
     44        (WebCore):
     45
    1462012-07-12  Pavel Feldman  <pfeldman@chromium.org>
    247
  • trunk/Source/WebCore/bindings/v8/DOMDataStore.cpp

    r121658 r122466  
    120120}
    121121
    122 void DOMDataStore::reportMemoryUsage(MemoryInstrumentation* instrumentation)
     122void DOMDataStore::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
    123123{
    124     instrumentation->reportPointer(this, MemoryInstrumentation::Binding);
    125     domNodeMap().reportMemoryUsage(instrumentation);
    126     activeDomNodeMap().reportMemoryUsage(instrumentation);
    127     domObjectMap().reportMemoryUsage(instrumentation);
    128     activeDomObjectMap().reportMemoryUsage(instrumentation);
     124    memoryObjectInfo->reportObjectInfo(this, MemoryInstrumentation::Binding);
     125    memoryObjectInfo->reportInstrumentedPointer(m_domNodeMap);
     126    memoryObjectInfo->reportInstrumentedPointer(m_activeDomNodeMap);
     127    memoryObjectInfo->reportInstrumentedPointer(m_domObjectMap);
     128    memoryObjectInfo->reportInstrumentedPointer(m_activeDomObjectMap);
    129129}
    130130
  • trunk/Source/WebCore/bindings/v8/DOMDataStore.h

    r121658 r122466  
    4848    class DOMData;
    4949    class DOMDataStore;
    50     class MemoryInstrumentation;
     50    class MemoryObjectInfo;
    5151
    5252    typedef WTF::Vector<DOMDataStore*> DOMDataList;
     
    8888        static void weakNodeCallback(v8::Persistent<v8::Value> v8Object, void* domObject);
    8989
    90         void reportMemoryUsage(MemoryInstrumentation*);
     90        void reportMemoryUsage(MemoryObjectInfo*) const;
    9191
    9292    protected:
  • trunk/Source/WebCore/bindings/v8/IntrusiveDOMWrapperMap.h

    r121658 r122466  
    103103    }
    104104
    105     void reportMemoryUsage(MemoryInstrumentation* instrumentation)
    106     {
     105    void reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
     106    {
     107        memoryObjectInfo->reportObjectInfo(this, MemoryInstrumentation::Binding);
    107108        for (Chunk* chunk = m_chunks; chunk; chunk = chunk->m_previous)
    108             instrumentation->reportPointer(chunk, MemoryInstrumentation::Binding);
     109            memoryObjectInfo->reportPointer(chunk, MemoryInstrumentation::Binding);
    109110    }
    110111
     
    184185    }
    185186
    186     virtual void reportMemoryUsage(MemoryInstrumentation* instrumentation) OVERRIDE
    187     {
    188         instrumentation->reportPointer(this, MemoryInstrumentation::Binding);
    189         m_table.reportMemoryUsage(instrumentation);
     187    virtual void reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const OVERRIDE
     188    {
     189        memoryObjectInfo->reportObjectInfo(this, MemoryInstrumentation::Binding);
     190        memoryObjectInfo->reportInstrumentedObject(m_table);
    190191    }
    191192
  • trunk/Source/WebCore/bindings/v8/ScriptProfiler.cpp

    r121658 r122466  
    224224{
    225225    V8BindingPerIsolateData* data = V8BindingPerIsolateData::current();
    226     if (!data)
    227         return;
    228     data->reportMemoryUsage(instrumentation);
     226    instrumentation->reportInstrumentedPointer(data);
    229227}
    230228
  • trunk/Source/WebCore/bindings/v8/V8Binding.cpp

    r121658 r122466  
    9191}
    9292
    93 void V8BindingPerIsolateData::reportMemoryUsage(MemoryInstrumentation* instrumentation)
    94 {
    95     instrumentation->reportPointer(this, MemoryInstrumentation::Binding);
    96     instrumentation->reportHashMap(m_rawTemplates, MemoryInstrumentation::Binding);
    97     instrumentation->reportHashMap(m_templates, MemoryInstrumentation::Binding);
    98     m_stringCache.reportMemoryUsage(instrumentation);
     93void V8BindingPerIsolateData::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
     94{
     95    memoryObjectInfo->reportObjectInfo(this, MemoryInstrumentation::Binding);
     96    memoryObjectInfo->reportHashMap(m_rawTemplates);
     97    memoryObjectInfo->reportHashMap(m_templates);
     98    memoryObjectInfo->reportInstrumentedObject(m_stringCache);
     99    memoryObjectInfo->reportVector(m_domDataList);
    99100
    100101    for (size_t i = 0; i < m_domDataList.size(); i++)
    101         m_domDataList[i]->reportMemoryUsage(instrumentation);
     102        memoryObjectInfo->reportInstrumentedPointer(m_domDataList[i]);
    102103}
    103104
     
    588589}
    589590
    590 void StringCache::reportMemoryUsage(MemoryInstrumentation* instrumentation)
    591 {
    592     instrumentation->reportHashMap(m_stringCache, MemoryInstrumentation::Binding);
     591void StringCache::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
     592{
     593    memoryObjectInfo->reportObjectInfo(this, MemoryInstrumentation::Binding);
     594    memoryObjectInfo->reportHashMap(m_stringCache);
    593595}
    594596   
  • trunk/Source/WebCore/bindings/v8/V8Binding.h

    r121663 r122466  
    5050    class EventTarget;
    5151    class ExternalStringVisitor;
    52     class MemoryInstrumentation;
     52    class MemoryObjectInfo;
    5353
    5454    // FIXME: Remove V8Binding.
     
    8080        void remove(StringImpl*);
    8181
    82         void reportMemoryUsage(MemoryInstrumentation*);
     82        void reportMemoryUsage(MemoryObjectInfo*) const;
    8383
    8484    private:
     
    218218        GCEventData& gcEventData() { return m_gcEventData; }
    219219
    220         void reportMemoryUsage(MemoryInstrumentation*);
     220        void reportMemoryUsage(MemoryObjectInfo*) const;
    221221
    222222    private:
  • trunk/Source/WebCore/bindings/v8/V8DOMMap.h

    r121818 r122466  
    4040    class DOMDataStore;
    4141    class Node;
    42     class MemoryInstrumentation;
     42    class MemoryObjectInfo;
    4343
    4444    template <class KeyType, class ValueType> class AbstractWeakReferenceMap {
     
    6565        v8::WeakReferenceCallback weakReferenceCallback() { return m_weakReferenceCallback; }
    6666
    67         virtual void reportMemoryUsage(MemoryInstrumentation*) = 0;
     67        virtual void reportMemoryUsage(MemoryObjectInfo*) const = 0;
    6868
    6969    private:
     
    135135        }
    136136
    137         virtual void reportMemoryUsage(MemoryInstrumentation* instrumentation) OVERRIDE
     137        virtual void reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const OVERRIDE
    138138        {
    139             instrumentation->reportHashMap(m_map, MemoryInstrumentation::Binding);
     139            memoryObjectInfo->reportObjectInfo(this, MemoryInstrumentation::Binding);
     140            memoryObjectInfo->reportHashMap(m_map);
    140141        }
    141142
  • trunk/Source/WebCore/inspector/InspectorMemoryAgent.cpp

    r122243 r122466  
    549549    {
    550550        ScriptProfiler::collectBindingMemoryInfo(&m_domMemoryUsage);
     551        m_domMemoryUsage.processDeferredInstrumentedPointers();
    551552    }
    552553
Note: See TracChangeset for help on using the changeset viewer.