Title: [122580] trunk/Source/WebCore
Revision
122580
Author
loi...@chromium.org
Date
2012-07-13 08:09:10 -0700 (Fri, 13 Jul 2012)

Log Message

Web Inspector: native memory instrumentation: extract instrumentation methods into MemoryClassInfo
https://bugs.webkit.org/show_bug.cgi?id=91227

Reviewed by Pavel Feldman.

void Node::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
{
    MemoryClassInfo<Node> info(memoryObjectInfo, this, MemoryInstrumentation::DOM);
    info.visitBaseClass<ScriptWrappable>(this);

    info.addMember(m_notInstrumentedPointer); // automatically detects poniter/reference
    info.addInstrumentedMember(m_next);
    info.addHashSet<MemoryInstrumentation::NonClass>(m_aHash);                // NonClass value_type (report only size of internal template structures)
    info.addHashSet<MemoryInstrumentation::NotInstrumentedClass>(m_aHashSet); // not instrumented value_type (use sizeof)
    info.addHashSet<MemoryInstrumentation::InstrumentedClass>(m_aHashSet);    // instrumented value_type (call visit)
}

The change is covered by existing tests for native memory snapshot.

* bindings/v8/DOMDataStore.cpp:
(WebCore::DOMDataStore::reportMemoryUsage):
* bindings/v8/IntrusiveDOMWrapperMap.h:
(WebCore::ChunkedTable::reportMemoryUsage):
* bindings/v8/ScriptWrappable.h:
(WebCore::ScriptWrappable::reportMemoryUsage):
* bindings/v8/V8Binding.cpp:
(WebCore::V8BindingPerIsolateData::reportMemoryUsage):
(WebCore::StringCache::reportMemoryUsage):
* bindings/v8/V8DOMMap.h:
* css/StylePropertySet.h:
(WebCore::StylePropertySet::reportMemoryUsage):
* dom/CharacterData.cpp:
(WebCore::CharacterData::reportMemoryUsage):
* dom/ContainerNode.h:
(WebCore::ContainerNode::reportMemoryUsage):
* dom/Document.cpp:
(WebCore::Document::reportMemoryUsage):
* dom/Element.h:
(WebCore::Element::reportMemoryUsage):
* dom/ElementAttributeData.h:
(WebCore::ElementAttributeData::reportMemoryUsage):
* dom/MemoryInstrumentation.h:
(MemoryInstrumentation):
(WebCore::MemoryObjectInfo::objectType):
(WebCore::MemoryObjectInfo::objectSize):
(WebCore::MemoryObjectInfo::memoryInstrumentation):
(MemoryObjectInfo):
(WebCore::MemoryObjectInfo::reportObjectInfo):
(WebCore):
(MemoryClassInfo):
(WebCore::MemoryClassInfo::MemoryClassInfo):
(WebCore::MemoryClassInfo::visitBaseClass):
(WebCore::MemoryClassInfo::reportInstrumentedPointer):
(WebCore::MemoryClassInfo::reportInstrumentedObject):
(WebCore::MemoryClassInfo::reportPointer):
(WebCore::MemoryClassInfo::reportObject):
(WebCore::MemoryClassInfo::reportHashMap):
(WebCore::MemoryClassInfo::reportHashSet):
(WebCore::MemoryClassInfo::reportListHashSet):
(WebCore::MemoryClassInfo::reportVector):
(WebCore::MemoryClassInfo::reportString):
* dom/Node.cpp:
(WebCore::Node::reportMemoryUsage):
* dom/QualifiedName.h:
(WebCore::QualifiedName::QualifiedNameImpl::reportMemoryUsage):
(WebCore::QualifiedName::reportMemoryUsage):
* platform/TreeShared.h:
(WebCore::TreeShared::reportMemoryUsage):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (122579 => 122580)


--- trunk/Source/WebCore/ChangeLog	2012-07-13 15:05:00 UTC (rev 122579)
+++ trunk/Source/WebCore/ChangeLog	2012-07-13 15:09:10 UTC (rev 122580)
@@ -1,3 +1,74 @@
+2012-07-13  Ilya Tikhonovsky  <loi...@chromium.org>
+
+        Web Inspector: native memory instrumentation: extract instrumentation methods into MemoryClassInfo
+        https://bugs.webkit.org/show_bug.cgi?id=91227
+
+        Reviewed by Pavel Feldman.
+
+        void Node::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
+        {
+            MemoryClassInfo<Node> info(memoryObjectInfo, this, MemoryInstrumentation::DOM);
+            info.visitBaseClass<ScriptWrappable>(this);
+
+            info.addMember(m_notInstrumentedPointer); // automatically detects poniter/reference
+            info.addInstrumentedMember(m_next);
+            info.addHashSet<MemoryInstrumentation::NonClass>(m_aHash);                // NonClass value_type (report only size of internal template structures)
+            info.addHashSet<MemoryInstrumentation::NotInstrumentedClass>(m_aHashSet); // not instrumented value_type (use sizeof)
+            info.addHashSet<MemoryInstrumentation::InstrumentedClass>(m_aHashSet);    // instrumented value_type (call visit)
+        }
+
+        The change is covered by existing tests for native memory snapshot.
+
+        * bindings/v8/DOMDataStore.cpp:
+        (WebCore::DOMDataStore::reportMemoryUsage):
+        * bindings/v8/IntrusiveDOMWrapperMap.h:
+        (WebCore::ChunkedTable::reportMemoryUsage):
+        * bindings/v8/ScriptWrappable.h:
+        (WebCore::ScriptWrappable::reportMemoryUsage):
+        * bindings/v8/V8Binding.cpp:
+        (WebCore::V8BindingPerIsolateData::reportMemoryUsage):
+        (WebCore::StringCache::reportMemoryUsage):
+        * bindings/v8/V8DOMMap.h:
+        * css/StylePropertySet.h:
+        (WebCore::StylePropertySet::reportMemoryUsage):
+        * dom/CharacterData.cpp:
+        (WebCore::CharacterData::reportMemoryUsage):
+        * dom/ContainerNode.h:
+        (WebCore::ContainerNode::reportMemoryUsage):
+        * dom/Document.cpp:
+        (WebCore::Document::reportMemoryUsage):
+        * dom/Element.h:
+        (WebCore::Element::reportMemoryUsage):
+        * dom/ElementAttributeData.h:
+        (WebCore::ElementAttributeData::reportMemoryUsage):
+        * dom/MemoryInstrumentation.h:
+        (MemoryInstrumentation):
+        (WebCore::MemoryObjectInfo::objectType):
+        (WebCore::MemoryObjectInfo::objectSize):
+        (WebCore::MemoryObjectInfo::memoryInstrumentation):
+        (MemoryObjectInfo):
+        (WebCore::MemoryObjectInfo::reportObjectInfo):
+        (WebCore):
+        (MemoryClassInfo):
+        (WebCore::MemoryClassInfo::MemoryClassInfo):
+        (WebCore::MemoryClassInfo::visitBaseClass):
+        (WebCore::MemoryClassInfo::reportInstrumentedPointer):
+        (WebCore::MemoryClassInfo::reportInstrumentedObject):
+        (WebCore::MemoryClassInfo::reportPointer):
+        (WebCore::MemoryClassInfo::reportObject):
+        (WebCore::MemoryClassInfo::reportHashMap):
+        (WebCore::MemoryClassInfo::reportHashSet):
+        (WebCore::MemoryClassInfo::reportListHashSet):
+        (WebCore::MemoryClassInfo::reportVector):
+        (WebCore::MemoryClassInfo::reportString):
+        * dom/Node.cpp:
+        (WebCore::Node::reportMemoryUsage):
+        * dom/QualifiedName.h:
+        (WebCore::QualifiedName::QualifiedNameImpl::reportMemoryUsage):
+        (WebCore::QualifiedName::reportMemoryUsage):
+        * platform/TreeShared.h:
+        (WebCore::TreeShared::reportMemoryUsage):
+
 2012-07-13  Pavel Feldman  <pfeld...@chromium.org>
 
         Web Inspector: align scope filters

Modified: trunk/Source/WebCore/bindings/js/ScriptWrappable.h (122579 => 122580)


--- trunk/Source/WebCore/bindings/js/ScriptWrappable.h	2012-07-13 15:05:00 UTC (rev 122579)
+++ trunk/Source/WebCore/bindings/js/ScriptWrappable.h	2012-07-13 15:09:10 UTC (rev 122580)
@@ -56,8 +56,8 @@
 
     void reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
     {
-        memoryObjectInfo->reportObjectInfo(this, MemoryInstrumentation::DOM);
-        memoryObjectInfo->reportObject(m_wrapper);
+        MemoryClassInfo<ScriptWrappable> info(memoryObjectInfo, this, MemoryInstrumentation::DOM);
+        info.reportObject(m_wrapper);
     }
 
 private:

Modified: trunk/Source/WebCore/bindings/v8/DOMDataStore.cpp (122579 => 122580)


--- trunk/Source/WebCore/bindings/v8/DOMDataStore.cpp	2012-07-13 15:05:00 UTC (rev 122579)
+++ trunk/Source/WebCore/bindings/v8/DOMDataStore.cpp	2012-07-13 15:09:10 UTC (rev 122580)
@@ -121,11 +121,11 @@
 
 void DOMDataStore::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
 {
-    memoryObjectInfo->reportObjectInfo(this, MemoryInstrumentation::Binding);
-    memoryObjectInfo->reportInstrumentedPointer(m_domNodeMap);
-    memoryObjectInfo->reportInstrumentedPointer(m_activeDomNodeMap);
-    memoryObjectInfo->reportInstrumentedPointer(m_domObjectMap);
-    memoryObjectInfo->reportInstrumentedPointer(m_activeDomObjectMap);
+    MemoryClassInfo<DOMDataStore> info(memoryObjectInfo, this, MemoryInstrumentation::Binding);
+    info.reportInstrumentedPointer(m_domNodeMap);
+    info.reportInstrumentedPointer(m_activeDomNodeMap);
+    info.reportInstrumentedPointer(m_domObjectMap);
+    info.reportInstrumentedPointer(m_activeDomObjectMap);
 }
 
 // Called when the object is near death (not reachable from JS roots).

Modified: trunk/Source/WebCore/bindings/v8/IntrusiveDOMWrapperMap.h (122579 => 122580)


--- trunk/Source/WebCore/bindings/v8/IntrusiveDOMWrapperMap.h	2012-07-13 15:05:00 UTC (rev 122579)
+++ trunk/Source/WebCore/bindings/v8/IntrusiveDOMWrapperMap.h	2012-07-13 15:09:10 UTC (rev 122580)
@@ -104,9 +104,9 @@
 
     void reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
     {
-        memoryObjectInfo->reportObjectInfo(this, MemoryInstrumentation::Binding);
+        MemoryClassInfo<ChunkedTable> info(memoryObjectInfo, this, MemoryInstrumentation::Binding);
         for (Chunk* chunk = m_chunks; chunk; chunk = chunk->m_previous)
-            memoryObjectInfo->reportPointer(chunk, MemoryInstrumentation::Binding);
+            info.reportPointer(chunk);
     }
 
   private:
@@ -186,8 +186,8 @@
 
     virtual void reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const OVERRIDE
     {
-        memoryObjectInfo->reportObjectInfo(this, MemoryInstrumentation::Binding);
-        memoryObjectInfo->reportInstrumentedObject(m_table);
+        MemoryClassInfo<IntrusiveDOMWrapperMap> info(memoryObjectInfo, this, MemoryInstrumentation::Binding);
+        info.reportInstrumentedObject(m_table);
     }
 
 private:

Modified: trunk/Source/WebCore/bindings/v8/ScriptWrappable.h (122579 => 122580)


--- trunk/Source/WebCore/bindings/v8/ScriptWrappable.h	2012-07-13 15:05:00 UTC (rev 122579)
+++ trunk/Source/WebCore/bindings/v8/ScriptWrappable.h	2012-07-13 15:09:10 UTC (rev 122580)
@@ -54,8 +54,8 @@
 
     void reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
     {
-        memoryObjectInfo->reportObjectInfo(this, MemoryInstrumentation::DOM);
-        memoryObjectInfo->reportPointer(m_wrapper, MemoryInstrumentation::DOM);
+        MemoryClassInfo<ScriptWrappable> info(memoryObjectInfo, this, MemoryInstrumentation::DOM);
+        info.reportPointer(m_wrapper);
     }
 
 private:

Modified: trunk/Source/WebCore/bindings/v8/V8Binding.cpp (122579 => 122580)


--- trunk/Source/WebCore/bindings/v8/V8Binding.cpp	2012-07-13 15:05:00 UTC (rev 122579)
+++ trunk/Source/WebCore/bindings/v8/V8Binding.cpp	2012-07-13 15:09:10 UTC (rev 122580)
@@ -92,14 +92,14 @@
 
 void V8BindingPerIsolateData::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
 {
-    memoryObjectInfo->reportObjectInfo(this, MemoryInstrumentation::Binding);
-    memoryObjectInfo->reportHashMap(m_rawTemplates);
-    memoryObjectInfo->reportHashMap(m_templates);
-    memoryObjectInfo->reportInstrumentedObject(m_stringCache);
-    memoryObjectInfo->reportVector(m_domDataList);
+    MemoryClassInfo<V8BindingPerIsolateData> info(memoryObjectInfo, this, MemoryInstrumentation::Binding);
+    info.reportHashMap(m_rawTemplates);
+    info.reportHashMap(m_templates);
+    info.reportInstrumentedObject(m_stringCache);
+    info.reportVector(m_domDataList);
 
     for (size_t i = 0; i < m_domDataList.size(); i++)
-        memoryObjectInfo->reportInstrumentedPointer(m_domDataList[i]);
+        info.reportInstrumentedPointer(m_domDataList[i]);
 }
 
 // WebCoreStringResource is a helper class for v8ExternalString. It is used
@@ -590,8 +590,8 @@
 
 void StringCache::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
 {
-    memoryObjectInfo->reportObjectInfo(this, MemoryInstrumentation::Binding);
-    memoryObjectInfo->reportHashMap(m_stringCache);
+    MemoryClassInfo<StringCache> info(memoryObjectInfo, this, MemoryInstrumentation::Binding);
+    info.reportHashMap(m_stringCache);
 }
     
 PassRefPtr<DOMStringList> v8ValueToWebCoreDOMStringList(v8::Handle<v8::Value> value)

Modified: trunk/Source/WebCore/bindings/v8/V8DOMMap.h (122579 => 122580)


--- trunk/Source/WebCore/bindings/v8/V8DOMMap.h	2012-07-13 15:05:00 UTC (rev 122579)
+++ trunk/Source/WebCore/bindings/v8/V8DOMMap.h	2012-07-13 15:09:10 UTC (rev 122580)
@@ -136,8 +136,8 @@
 
         virtual void reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const OVERRIDE
         {
-            memoryObjectInfo->reportObjectInfo(this, MemoryInstrumentation::Binding);
-            memoryObjectInfo->reportHashMap(m_map);
+            MemoryClassInfo<WeakReferenceMap<KeyType, ValueType> > info(memoryObjectInfo, this, MemoryInstrumentation::Binding);
+            info.reportHashMap(m_map);
         }
 
     protected:

Modified: trunk/Source/WebCore/css/StylePropertySet.h (122579 => 122580)


--- trunk/Source/WebCore/css/StylePropertySet.h	2012-07-13 15:05:00 UTC (rev 122579)
+++ trunk/Source/WebCore/css/StylePropertySet.h	2012-07-13 15:09:10 UTC (rev 122580)
@@ -118,9 +118,9 @@
     
     void reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
     {
-        memoryObjectInfo->reportObjectInfo(this, MemoryInstrumentation::CSS);
+        MemoryClassInfo<StylePropertySet> info(memoryObjectInfo, this, MemoryInstrumentation::CSS);
         if (m_isMutable)
-            memoryObjectInfo->reportPointer(m_mutablePropertyVector, MemoryInstrumentation::CSS);
+            info.reportPointer(m_mutablePropertyVector);
     }
 
     void adoptCSSOMWrapperFrom(StylePropertySet*);

Modified: trunk/Source/WebCore/dom/CharacterData.cpp (122579 => 122580)


--- trunk/Source/WebCore/dom/CharacterData.cpp	2012-07-13 15:05:00 UTC (rev 122579)
+++ trunk/Source/WebCore/dom/CharacterData.cpp	2012-07-13 15:09:10 UTC (rev 122580)
@@ -94,9 +94,9 @@
 
 void CharacterData::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
 {
-    memoryObjectInfo->reportObjectInfo(this, MemoryInstrumentation::DOM);
-    Node::reportMemoryUsage(memoryObjectInfo);
-    memoryObjectInfo->reportString(m_data);
+    MemoryClassInfo<CharacterData> info(memoryObjectInfo, this, MemoryInstrumentation::DOM);
+    info.visitBaseClass<Node>(this);
+    info.reportString(m_data);
 }
 
 void CharacterData::appendData(const String& data, ExceptionCode&)

Modified: trunk/Source/WebCore/dom/ContainerNode.h (122579 => 122580)


--- trunk/Source/WebCore/dom/ContainerNode.h	2012-07-13 15:05:00 UTC (rev 122579)
+++ trunk/Source/WebCore/dom/ContainerNode.h	2012-07-13 15:09:10 UTC (rev 122580)
@@ -101,10 +101,10 @@
 
     virtual void reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
     {
-        memoryObjectInfo->reportObjectInfo(this, MemoryInstrumentation::DOM);
-        Node::reportMemoryUsage(memoryObjectInfo);
-        memoryObjectInfo->reportInstrumentedPointer(m_firstChild);
-        memoryObjectInfo->reportInstrumentedPointer(m_lastChild);
+        MemoryClassInfo<ContainerNode> info(memoryObjectInfo, this, MemoryInstrumentation::DOM);
+        info.visitBaseClass<Node>(this);
+        info.reportInstrumentedPointer(m_firstChild);
+        info.reportInstrumentedPointer(m_lastChild);
     }
 
 protected:

Modified: trunk/Source/WebCore/dom/Document.cpp (122579 => 122580)


--- trunk/Source/WebCore/dom/Document.cpp	2012-07-13 15:05:00 UTC (rev 122579)
+++ trunk/Source/WebCore/dom/Document.cpp	2012-07-13 15:09:10 UTC (rev 122580)
@@ -6075,38 +6075,38 @@
 
 void Document::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
 {
-    memoryObjectInfo->reportObjectInfo(this, MemoryInstrumentation::DOM);
-    ContainerNode::reportMemoryUsage(memoryObjectInfo);
-    memoryObjectInfo->reportVector(m_customFonts);
-    memoryObjectInfo->reportString(m_documentURI);
-    memoryObjectInfo->reportString(m_baseTarget);
+    MemoryClassInfo<Document> info(memoryObjectInfo, this, MemoryInstrumentation::DOM);
+    info.visitBaseClass<ContainerNode>(this);
+    info.reportVector(m_customFonts);
+    info.reportString(m_documentURI);
+    info.reportString(m_baseTarget);
     if (m_pageGroupUserSheets)
-        memoryObjectInfo->reportVector(*m_pageGroupUserSheets.get());
+        info.reportVector(*m_pageGroupUserSheets.get());
     if (m_userSheets)
-        memoryObjectInfo->reportVector(*m_userSheets.get());
-    memoryObjectInfo->reportHashSet(m_nodeIterators);
-    memoryObjectInfo->reportHashSet(m_ranges);
-    memoryObjectInfo->reportListHashSet(m_styleSheetCandidateNodes);
-    memoryObjectInfo->reportString(m_preferredStylesheetSet);
-    memoryObjectInfo->reportString(m_selectedStylesheetSet);
-    memoryObjectInfo->reportString(m_title.string());
-    memoryObjectInfo->reportString(m_rawTitle.string());
-    memoryObjectInfo->reportString(m_xmlEncoding);
-    memoryObjectInfo->reportString(m_xmlVersion);
-    memoryObjectInfo->reportString(m_contentLanguage);
-    memoryObjectInfo->reportHashMap(m_documentNamedItemCollections);
-    memoryObjectInfo->reportHashMap(m_windowNamedItemCollections);
+        info.reportVector(*m_userSheets.get());
+    info.reportHashSet(m_nodeIterators);
+    info.reportHashSet(m_ranges);
+    info.reportListHashSet(m_styleSheetCandidateNodes);
+    info.reportString(m_preferredStylesheetSet);
+    info.reportString(m_selectedStylesheetSet);
+    info.reportString(m_title.string());
+    info.reportString(m_rawTitle.string());
+    info.reportString(m_xmlEncoding);
+    info.reportString(m_xmlVersion);
+    info.reportString(m_contentLanguage);
+    info.reportHashMap(m_documentNamedItemCollections);
+    info.reportHashMap(m_windowNamedItemCollections);
 #if ENABLE(DASHBOARD_SUPPORT)
-    memoryObjectInfo->reportVector(m_dashboardRegions);
+    info.reportVector(m_dashboardRegions);
 #endif
-    memoryObjectInfo->reportHashMap(m_cssCanvasElements);
-    memoryObjectInfo->reportVector(m_iconURLs);
-    memoryObjectInfo->reportHashSet(m_documentSuspensionCallbackElements);
-    memoryObjectInfo->reportHashSet(m_mediaVolumeCallbackElements);
-    memoryObjectInfo->reportHashSet(m_privateBrowsingStateChangedElements);
-    memoryObjectInfo->reportHashMap(m_elementsByAccessKey);
-    memoryObjectInfo->reportHashSet(m_mediaCanStartListeners);
-    memoryObjectInfo->reportVector(m_pendingTasks);
+    info.reportHashMap(m_cssCanvasElements);
+    info.reportVector(m_iconURLs);
+    info.reportHashSet(m_documentSuspensionCallbackElements);
+    info.reportHashSet(m_mediaVolumeCallbackElements);
+    info.reportHashSet(m_privateBrowsingStateChangedElements);
+    info.reportHashMap(m_elementsByAccessKey);
+    info.reportHashSet(m_mediaCanStartListeners);
+    info.reportVector(m_pendingTasks);
 }
 
 #if ENABLE(UNDO_MANAGER)

Modified: trunk/Source/WebCore/dom/Element.h (122579 => 122580)


--- trunk/Source/WebCore/dom/Element.h	2012-07-13 15:05:00 UTC (rev 122579)
+++ trunk/Source/WebCore/dom/Element.h	2012-07-13 15:09:10 UTC (rev 122580)
@@ -430,10 +430,10 @@
 
     virtual void reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
     {
-        memoryObjectInfo->reportObjectInfo(this, MemoryInstrumentation::DOM);
-        ContainerNode::reportMemoryUsage(memoryObjectInfo);
-        memoryObjectInfo->reportInstrumentedObject(m_tagName);
-        memoryObjectInfo->reportInstrumentedPointer(m_attributeData.get());
+        MemoryClassInfo<Element> info(memoryObjectInfo, this, MemoryInstrumentation::DOM);
+        info.visitBaseClass<ContainerNode>(this);
+        info.reportInstrumentedObject(m_tagName);
+        info.reportInstrumentedPointer(m_attributeData.get());
     }
 
 protected:

Modified: trunk/Source/WebCore/dom/ElementAttributeData.h (122579 => 122580)


--- trunk/Source/WebCore/dom/ElementAttributeData.h	2012-07-13 15:05:00 UTC (rev 122579)
+++ trunk/Source/WebCore/dom/ElementAttributeData.h	2012-07-13 15:09:10 UTC (rev 122580)
@@ -104,13 +104,13 @@
 
     void reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
     {
-        memoryObjectInfo->reportObjectInfo(this, MemoryInstrumentation::DOM);
-        memoryObjectInfo->reportInstrumentedPointer(m_inlineStyleDecl.get());
-        memoryObjectInfo->reportInstrumentedPointer(m_attributeStyle.get());
-        memoryObjectInfo->reportObject(m_classNames);
-        memoryObjectInfo->reportObject(m_idForStyleResolution);
+        MemoryClassInfo<ElementAttributeData> info(memoryObjectInfo, this, MemoryInstrumentation::DOM);
+        info.reportInstrumentedPointer(m_inlineStyleDecl.get());
+        info.reportInstrumentedPointer(m_attributeStyle.get());
+        info.reportObject(m_classNames);
+        info.reportObject(m_idForStyleResolution);
         if (m_isMutable)
-            memoryObjectInfo->reportPointer(m_mutableAttributeVector, MemoryInstrumentation::DOM);
+            info.reportPointer(m_mutableAttributeVector);
     }
 
 private:

Modified: trunk/Source/WebCore/dom/MemoryInstrumentation.h (122579 => 122580)


--- trunk/Source/WebCore/dom/MemoryInstrumentation.h	2012-07-13 15:05:00 UTC (rev 122579)
+++ trunk/Source/WebCore/dom/MemoryInstrumentation.h	2012-07-13 15:09:10 UTC (rev 122580)
@@ -81,8 +81,7 @@
     }
 
 private:
-    friend class MemoryObjectInfo;
-
+    template <typename T> friend class MemoryClassInfo;
     template <typename T>
     class InstrumentedPointer : public InstrumentedPointerBase {
     public:
@@ -108,29 +107,15 @@
         , m_objectSize(0)
      { }
 
-    template <typename P>
-    void reportInstrumentedPointer(const P* memberPointer)
-    {
-        m_memoryInstrumentation->reportInstrumentedPointer(memberPointer);
-    }
+    MemoryInstrumentation::ObjectType objectType() const { return m_objectType; }
+    size_t objectSize() const { return m_objectSize; }
 
-    template <typename P>
-    void reportPointer(const P* pointer, MemoryInstrumentation::ObjectType objectType)
-    {
-        m_memoryInstrumentation->reportPointer(pointer, objectType);
-    }
+    MemoryInstrumentation* memoryInstrumentation() { return m_memoryInstrumentation; }
 
-    template <typename T>
-    void reportInstrumentedObject(const T& memberObject)
-    {
-        m_memoryInstrumentation->reportInstrumentedObject(memberObject);
-    }
+private:
+    template <typename T> friend class MemoryClassInfo;
 
-    template <typename T>
-    void reportObject(const T& object) { m_memoryInstrumentation->reportObject(object); }
-
-    template <typename T>
-    void reportObjectInfo(const T*, MemoryInstrumentation::ObjectType objectType)
+    template <typename T> void reportObjectInfo(const T*, MemoryInstrumentation::ObjectType objectType)
     {
         if (m_objectType != MemoryInstrumentation::Other)
             return;
@@ -138,44 +123,41 @@
         m_objectSize = sizeof(T);
     }
 
-    template <typename HashMapType>
-    void reportHashMap(const HashMapType& map)
-    {
-        m_memoryInstrumentation->reportHashMap(map, objectType(), true);
-    }
+    MemoryInstrumentation* m_memoryInstrumentation;
+    MemoryInstrumentation::ObjectType m_objectType;
+    size_t m_objectSize;
+};
 
-    template <typename HashSetType>
-    void reportHashSet(const HashSetType& set)
+template <typename T>
+class MemoryClassInfo {
+public:
+    MemoryClassInfo(MemoryObjectInfo* memoryObjectInfo, const T* ptr, MemoryInstrumentation::ObjectType objectType)
+        : m_memoryObjectInfo(memoryObjectInfo)
+        , m_memoryInstrumentation(memoryObjectInfo->memoryInstrumentation())
     {
-        m_memoryInstrumentation->reportHashSet(set, objectType(), true);
+        m_memoryObjectInfo->reportObjectInfo(ptr, objectType);
+        m_objectType = memoryObjectInfo->objectType();
     }
 
-    template <typename ListHashSetType>
-    void reportListHashSet(const ListHashSetType& set)
-    {
-        m_memoryInstrumentation->reportListHashSet(set, objectType(), true);
-    }
+    template <typename P> void visitBaseClass(const P* ptr) { ptr->P::reportMemoryUsage(m_memoryObjectInfo); }
 
-    template <typename VectorType>
-    void reportVector(const VectorType& vector)
-    {
-        m_memoryInstrumentation->reportVector(vector, objectType(), true);
-    }
+    template <typename P> void reportInstrumentedPointer(const P* memberPointer) { m_memoryInstrumentation->reportInstrumentedPointer(memberPointer); }
+    template <typename O> void reportInstrumentedObject(const O& memberObject) { m_memoryInstrumentation->reportInstrumentedObject(memberObject); }
 
-    void reportString(const String& string)
-    {
-        m_memoryInstrumentation->reportString(objectType(), string);
-    }
+    template <typename P> void reportPointer(const P* pointer) { m_memoryInstrumentation->reportPointer(pointer, m_objectType); }
+    template <typename O> void reportObject(const O& object) { m_memoryInstrumentation->reportObject(object); }
 
-    MemoryInstrumentation::ObjectType objectType() const { return m_objectType; }
-    size_t objectSize() const { return m_objectSize; }
+    template <typename HashMapType> void reportHashMap(const HashMapType& map) { m_memoryInstrumentation->reportHashMap(map, m_objectType, true); }
+    template <typename HashSetType> void reportHashSet(const HashSetType& set) { m_memoryInstrumentation->reportHashSet(set, m_objectType, true); }
+    template <typename ListHashSetType> void reportListHashSet(const ListHashSetType& set) { m_memoryInstrumentation->reportListHashSet(set, m_objectType, true); }
+    template <typename VectorType> void reportVector(const VectorType& vector) { m_memoryInstrumentation->reportVector(vector, m_objectType, true); }
 
-    MemoryInstrumentation* memoryInstrumentation() { return m_memoryInstrumentation; }
+    void reportString(const String& string) { m_memoryInstrumentation->reportString(m_objectType, string); }
 
- private:
+private:
+    MemoryObjectInfo* m_memoryObjectInfo;
     MemoryInstrumentation* m_memoryInstrumentation;
     MemoryInstrumentation::ObjectType m_objectType;
-    size_t m_objectSize;
 };
 
 template <typename T>

Modified: trunk/Source/WebCore/dom/Node.cpp (122579 => 122580)


--- trunk/Source/WebCore/dom/Node.cpp	2012-07-13 15:05:00 UTC (rev 122579)
+++ trunk/Source/WebCore/dom/Node.cpp	2012-07-13 15:09:10 UTC (rev 122580)
@@ -2801,12 +2801,12 @@
 
 void Node::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
 {
-    memoryObjectInfo->reportObjectInfo(this, MemoryInstrumentation::DOM);
-    TreeShared<Node, ContainerNode>::reportMemoryUsage(memoryObjectInfo);
-    ScriptWrappable::reportMemoryUsage(memoryObjectInfo);
-    memoryObjectInfo->reportPointer(m_document, MemoryInstrumentation::DOM);
-    memoryObjectInfo->reportInstrumentedPointer(m_next);
-    memoryObjectInfo->reportInstrumentedPointer(m_previous);
+    MemoryClassInfo<Node> info(memoryObjectInfo, this, MemoryInstrumentation::DOM);
+    info.visitBaseClass<TreeShared<Node, ContainerNode> >(this);
+    info.visitBaseClass<ScriptWrappable>(this);
+    info.reportInstrumentedPointer(m_document);
+    info.reportInstrumentedPointer(m_next);
+    info.reportInstrumentedPointer(m_previous);
 }
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/dom/QualifiedName.h (122579 => 122580)


--- trunk/Source/WebCore/dom/QualifiedName.h	2012-07-13 15:05:00 UTC (rev 122579)
+++ trunk/Source/WebCore/dom/QualifiedName.h	2012-07-13 15:09:10 UTC (rev 122580)
@@ -52,11 +52,11 @@
 
         void reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
         {
-            memoryObjectInfo->reportObjectInfo(this, MemoryInstrumentation::DOM);
-            memoryObjectInfo->reportObject(m_prefix);
-            memoryObjectInfo->reportObject(m_localName);
-            memoryObjectInfo->reportObject(m_namespace);
-            memoryObjectInfo->reportObject(m_localNameUpper);
+            MemoryClassInfo<QualifiedNameImpl> info(memoryObjectInfo, this, MemoryInstrumentation::DOM);
+            info.reportObject(m_prefix);
+            info.reportObject(m_localName);
+            info.reportObject(m_namespace);
+            info.reportObject(m_localNameUpper);
         }
     private:
         QualifiedNameImpl(const AtomicString& prefix, const AtomicString& localName, const AtomicString& namespaceURI)
@@ -104,8 +104,8 @@
     
     void reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
     {
-        memoryObjectInfo->reportObjectInfo(this, MemoryInstrumentation::DOM);
-        memoryObjectInfo->reportInstrumentedPointer(m_impl);
+        MemoryClassInfo<QualifiedName> info(memoryObjectInfo, this, MemoryInstrumentation::DOM);
+        info.reportInstrumentedPointer(m_impl);
     }
 private:
     void init(const AtomicString& prefix, const AtomicString& localName, const AtomicString& namespaceURI);

Modified: trunk/Source/WebCore/platform/TreeShared.h (122579 => 122580)


--- trunk/Source/WebCore/platform/TreeShared.h	2012-07-13 15:05:00 UTC (rev 122579)
+++ trunk/Source/WebCore/platform/TreeShared.h	2012-07-13 15:09:10 UTC (rev 122580)
@@ -113,8 +113,8 @@
 
     void reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
     {
-        memoryObjectInfo->reportObjectInfo(this, MemoryInstrumentation::DOM);
-        memoryObjectInfo->reportInstrumentedPointer(m_parent);
+        MemoryClassInfo<TreeShared<NodeType, ParentNodeType> > info(memoryObjectInfo, this, MemoryInstrumentation::DOM);
+        info.reportInstrumentedPointer(m_parent);
     }
 
 private:
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to