Web Inspector: NMI instrument ShadowRoot. It gives us ~400k on plus.google.com
https://bugs.webkit.org/show_bug.cgi?id=100866
Reviewed by Yury Semikhatsky.
Plain vanilla memory instrumentation code for HTMLInputElement which has a ElementShadow.
* CMakeLists.txt:
* GNUmakefile.list.am:
* Target.pri:
* WebCore.gypi:
* WebCore.vcproj/WebCore.vcproj:
* dom/DocumentOrderedMap.cpp:
(WebCore::DocumentOrderedMap::reportMemoryUsage):
(WebCore):
* dom/DocumentOrderedMap.h:
(DocumentOrderedMap):
* dom/Element.cpp:
(WebCore::Element::reportMemoryUsage):
(WebCore):
* dom/Element.h:
* dom/ElementRareData.cpp: Added.
(WebCore):
(WebCore::ElementRareData::reportMemoryUsage):
* dom/ElementRareData.h:
(ElementRareData):
* dom/ElementShadow.cpp:
(WebCore::ElementShadow::reportMemoryUsage):
(WebCore):
* dom/ElementShadow.h:
(ElementShadow):
* dom/Node.cpp:
(WebCore::Node::reportMemoryUsage):
* dom/NodeRareData.cpp: Added.
(WebCore):
(WebCore::NodeListsNodeData::reportMemoryUsage):
(WebCore::NodeRareData::reportMemoryUsage):
* dom/NodeRareData.h:
(NodeListsNodeData):
(NodeRareData):
* dom/ShadowRoot.cpp:
(WebCore):
(WebCore::ShadowRoot::reportMemoryUsage):
* dom/ShadowRoot.h:
(ShadowRoot):
* dom/TreeScope.cpp:
(WebCore::TreeScope::reportMemoryUsage):
(WebCore):
* dom/TreeScope.h:
(TreeScope):
* html/HTMLFormControlElement.cpp:
(WebCore::HTMLFormControlElement::reportMemoryUsage):
(WebCore):
* html/HTMLFormControlElement.h:
(HTMLFormControlElement):
* html/HTMLInputElement.cpp:
(WebCore::HTMLInputElement::reportMemoryUsage):
(WebCore):
* html/HTMLInputElement.h:
(HTMLInputElement):
* html/HTMLTextFormControlElement.cpp:
(WebCore::HTMLTextFormControlElement::reportMemoryUsage):
(WebCore):
* html/HTMLTextFormControlElement.h:
(HTMLTextFormControlElement):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@133275 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/CMakeLists.txt b/Source/WebCore/CMakeLists.txt
index 5134465..2a57fb0 100644
--- a/Source/WebCore/CMakeLists.txt
+++ b/Source/WebCore/CMakeLists.txt
@@ -1154,8 +1154,9 @@
dom/DynamicNodeList.cpp
dom/EditingText.cpp
dom/Element.cpp
- dom/ElementShadow.cpp
dom/ElementAttributeData.cpp
+ dom/ElementRareData.cpp
+ dom/ElementShadow.cpp
dom/EntityReference.cpp
dom/ErrorEvent.cpp
dom/Event.cpp
@@ -1193,6 +1194,7 @@
dom/NodeFilterCondition.cpp
dom/NodeFilter.cpp
dom/NodeIterator.cpp
+ dom/NodeRareData.cpp
dom/NodeRenderingContext.cpp
dom/Notation.cpp
dom/OverflowEvent.cpp
diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index 689c08b..10f2112 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,71 @@
+2012-11-01 Ilya Tikhonovsky <loislo@chromium.org>
+
+ Web Inspector: NMI instrument ShadowRoot. It gives us ~400k on plus.google.com
+ https://bugs.webkit.org/show_bug.cgi?id=100866
+
+ Reviewed by Yury Semikhatsky.
+
+ Plain vanilla memory instrumentation code for HTMLInputElement which has a ElementShadow.
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * Target.pri:
+ * WebCore.gypi:
+ * WebCore.vcproj/WebCore.vcproj:
+ * dom/DocumentOrderedMap.cpp:
+ (WebCore::DocumentOrderedMap::reportMemoryUsage):
+ (WebCore):
+ * dom/DocumentOrderedMap.h:
+ (DocumentOrderedMap):
+ * dom/Element.cpp:
+ (WebCore::Element::reportMemoryUsage):
+ (WebCore):
+ * dom/Element.h:
+ * dom/ElementRareData.cpp: Added.
+ (WebCore):
+ (WebCore::ElementRareData::reportMemoryUsage):
+ * dom/ElementRareData.h:
+ (ElementRareData):
+ * dom/ElementShadow.cpp:
+ (WebCore::ElementShadow::reportMemoryUsage):
+ (WebCore):
+ * dom/ElementShadow.h:
+ (ElementShadow):
+ * dom/Node.cpp:
+ (WebCore::Node::reportMemoryUsage):
+ * dom/NodeRareData.cpp: Added.
+ (WebCore):
+ (WebCore::NodeListsNodeData::reportMemoryUsage):
+ (WebCore::NodeRareData::reportMemoryUsage):
+ * dom/NodeRareData.h:
+ (NodeListsNodeData):
+ (NodeRareData):
+ * dom/ShadowRoot.cpp:
+ (WebCore):
+ (WebCore::ShadowRoot::reportMemoryUsage):
+ * dom/ShadowRoot.h:
+ (ShadowRoot):
+ * dom/TreeScope.cpp:
+ (WebCore::TreeScope::reportMemoryUsage):
+ (WebCore):
+ * dom/TreeScope.h:
+ (TreeScope):
+ * html/HTMLFormControlElement.cpp:
+ (WebCore::HTMLFormControlElement::reportMemoryUsage):
+ (WebCore):
+ * html/HTMLFormControlElement.h:
+ (HTMLFormControlElement):
+ * html/HTMLInputElement.cpp:
+ (WebCore::HTMLInputElement::reportMemoryUsage):
+ (WebCore):
+ * html/HTMLInputElement.h:
+ (HTMLInputElement):
+ * html/HTMLTextFormControlElement.cpp:
+ (WebCore::HTMLTextFormControlElement::reportMemoryUsage):
+ (WebCore):
+ * html/HTMLTextFormControlElement.h:
+ (HTMLTextFormControlElement):
+
2012-11-02 Vsevolod Vlasov <vsevik@chromium.org>
Web Inspector: Cookie info in Network Resources Cookies tab shows "Invalid Date"
diff --git a/Source/WebCore/GNUmakefile.list.am b/Source/WebCore/GNUmakefile.list.am
index afd3bd5..773064b 100644
--- a/Source/WebCore/GNUmakefile.list.am
+++ b/Source/WebCore/GNUmakefile.list.am
@@ -2800,11 +2800,12 @@
Source/WebCore/dom/EditingText.h \
Source/WebCore/dom/Element.cpp \
Source/WebCore/dom/Element.h \
- Source/WebCore/dom/ElementShadow.cpp \
- Source/WebCore/dom/ElementShadow.h \
Source/WebCore/dom/ElementAttributeData.cpp \
Source/WebCore/dom/ElementAttributeData.h \
+ Source/WebCore/dom/ElementRareData.cpp \
Source/WebCore/dom/ElementRareData.h \
+ Source/WebCore/dom/ElementShadow.cpp \
+ Source/WebCore/dom/ElementShadow.h \
Source/WebCore/dom/Entity.h \
Source/WebCore/dom/EntityReference.cpp \
Source/WebCore/dom/EntityReference.h \
@@ -2887,6 +2888,7 @@
Source/WebCore/dom/NodeFilterCondition.h \
Source/WebCore/dom/NodeFilter.cpp \
Source/WebCore/dom/NodeFilter.h \
+ Source/WebCore/dom/NodeRareData.cpp \
Source/WebCore/dom/NodeRenderingContext.cpp \
Source/WebCore/dom/Node.h \
Source/WebCore/dom/NodeIterator.cpp \
diff --git a/Source/WebCore/Target.pri b/Source/WebCore/Target.pri
index 54d50d7..e616b4f 100644
--- a/Source/WebCore/Target.pri
+++ b/Source/WebCore/Target.pri
@@ -388,8 +388,9 @@
dom/DynamicNodeList.cpp \
dom/EditingText.cpp \
dom/Element.cpp \
- dom/ElementShadow.cpp \
dom/ElementAttributeData.cpp \
+ dom/ElementRareData.cpp \
+ dom/ElementShadow.cpp \
dom/EntityReference.cpp \
dom/ErrorEvent.cpp \
dom/Event.cpp \
@@ -428,6 +429,7 @@
dom/NodeFilterCondition.cpp \
dom/NodeFilter.cpp \
dom/NodeIterator.cpp \
+ dom/NodeRareData.cpp \
dom/NodeRenderingContext.cpp \
dom/Notation.cpp \
dom/StaticHashSetNodeList.cpp \
@@ -1596,6 +1598,7 @@
dom/NodeFilter.h \
dom/Node.h \
dom/NodeIterator.h \
+ dom/NodeRareData.h \
dom/NodeRenderingContext.h \
dom/Notation.h \
dom/StaticHashSetNodeList.h \
diff --git a/Source/WebCore/WebCore.gypi b/Source/WebCore/WebCore.gypi
index 9b2859f..c8387d1 100644
--- a/Source/WebCore/WebCore.gypi
+++ b/Source/WebCore/WebCore.gypi
@@ -3856,6 +3856,7 @@
'dom/ElementShadow.cpp',
'dom/Element.cpp',
'dom/ElementAttributeData.cpp',
+ 'dom/ElementRareData.cpp',
'dom/ElementRareData.h',
'dom/Entity.h',
'dom/EntityReference.cpp',
@@ -3925,6 +3926,7 @@
'dom/NodeFilterCondition.h',
'dom/NodeIterator.cpp',
'dom/NodeIterator.h',
+ 'dom/NodeRareData.cpp',
'dom/NodeRareData.h',
'dom/NodeRenderingContext.cpp',
'dom/NodeRenderingContext.h',
diff --git a/Source/WebCore/WebCore.vcproj/WebCore.vcproj b/Source/WebCore/WebCore.vcproj/WebCore.vcproj
index 0a6ee00..d045b93 100755
--- a/Source/WebCore/WebCore.vcproj/WebCore.vcproj
+++ b/Source/WebCore/WebCore.vcproj/WebCore.vcproj
@@ -51131,6 +51131,10 @@
>
</File>
<File
+ RelativePath="..\dom\ElementRareData.cpp"
+ >
+ </File>
+ <File
RelativePath="..\dom\Entity.h"
>
</File>
@@ -52907,6 +52911,10 @@
>
</File>
<File
+ RelativePath="..\dom\NodeRareData.cpp"
+ >
+ </File>
+ <File
RelativePath="..\dom\NodeFilter.cpp"
>
<FileConfiguration
diff --git a/Source/WebCore/WebCore.xcodeproj/project.pbxproj b/Source/WebCore/WebCore.xcodeproj/project.pbxproj
index 1891bc4..5d8d5bb 100644
--- a/Source/WebCore/WebCore.xcodeproj/project.pbxproj
+++ b/Source/WebCore/WebCore.xcodeproj/project.pbxproj
@@ -1487,6 +1487,8 @@
4FB390AD15EF61F3007AD51F /* GeneratedImage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4FB390AC15EF61F3007AD51F /* GeneratedImage.cpp */; };
4FD8D0F2119C718B002FA825 /* ScriptGCEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4FD8D0F0119C718B002FA825 /* ScriptGCEvent.cpp */; };
4FD8D0F3119C718B002FA825 /* ScriptGCEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FD8D0F1119C718B002FA825 /* ScriptGCEvent.h */; };
+ 4FFC022B1643B710004E1638 /* NodeRareData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4FAB48661643A67E00F70C07 /* NodeRareData.cpp */; };
+ 4FFC022D1643B726004E1638 /* ElementRareData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4FAB48641643A66D00F70C07 /* ElementRareData.cpp */; };
501BAAA913950E2C00F7ACEB /* WindRule.h in Headers */ = {isa = PBXBuildFile; fileRef = 501BAAA813950E2C00F7ACEB /* WindRule.h */; settings = {ATTRIBUTES = (Private, ); }; };
5038BC0714711CDB0095E0D1 /* WebKitCSSShaderValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5038BC0614711CDB0095E0D1 /* WebKitCSSShaderValue.cpp */; };
5038BE2F1472AD230095E0D1 /* StyleCachedShader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5038BE2D1472AD230095E0D1 /* StyleCachedShader.cpp */; };
@@ -8701,6 +8703,8 @@
4F8565E81530356E00FAE776 /* MemoryInstrumentationImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemoryInstrumentationImpl.h; sourceTree = "<group>"; };
4FA3B908125CD12100300BAD /* InspectorState.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorState.cpp; sourceTree = "<group>"; };
4FA3B909125CD12200300BAD /* InspectorState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorState.h; sourceTree = "<group>"; };
+ 4FAB48641643A66D00F70C07 /* ElementRareData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ElementRareData.cpp; sourceTree = "<group>"; };
+ 4FAB48661643A67E00F70C07 /* NodeRareData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NodeRareData.cpp; sourceTree = "<group>"; };
4FB390AC15EF61F3007AD51F /* GeneratedImage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GeneratedImage.cpp; sourceTree = "<group>"; };
4FD8D0F0119C718B002FA825 /* ScriptGCEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScriptGCEvent.cpp; sourceTree = "<group>"; };
4FD8D0F1119C718B002FA825 /* ScriptGCEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptGCEvent.h; sourceTree = "<group>"; };
@@ -21822,6 +21826,7 @@
93EEC1EA09C2877700C515D1 /* Element.idl */,
2CF6878714D32EB500340F39 /* ElementAttributeData.cpp */,
2CF6878914D32EFF00340F39 /* ElementAttributeData.h */,
+ 4FAB48641643A66D00F70C07 /* ElementRareData.cpp */,
637B7ADE0E8767B800E32194 /* ElementRareData.h */,
57CF4C8414F7597A00ECFF14 /* ElementShadow.cpp */,
57CF4C8514F7597A00ECFF14 /* ElementShadow.h */,
@@ -21937,6 +21942,7 @@
1A750D870A90E394000FF215 /* NodeIterator.idl */,
A81872100977D3C0005826D9 /* NodeList.h */,
85ACA9FA0A9B631000671E90 /* NodeList.idl */,
+ 4FAB48661643A67E00F70C07 /* NodeRareData.cpp */,
63189AE20E83A33300012E41 /* NodeRareData.h */,
A7F5D94D1384F02D00A29A87 /* NodeRenderingContext.cpp */,
A7F5D94E1384F02D00A29A87 /* NodeRenderingContext.h */,
@@ -28796,6 +28802,8 @@
1AA21250163F0DA80000E63F /* AtomicStringCF.cpp in Sources */,
50D32857163B313F0016111E /* ValidatedCustomFilterOperation.cpp in Sources */,
3FFFF9A8159D9A550020BBD5 /* WebKitCSSViewportRule.cpp in Sources */,
+ 4FFC022B1643B710004E1638 /* NodeRareData.cpp in Sources */,
+ 4FFC022D1643B726004E1638 /* ElementRareData.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
diff --git a/Source/WebCore/dom/DocumentOrderedMap.cpp b/Source/WebCore/dom/DocumentOrderedMap.cpp
index bbd8b3b..2fd5e43 100644
--- a/Source/WebCore/dom/DocumentOrderedMap.cpp
+++ b/Source/WebCore/dom/DocumentOrderedMap.cpp
@@ -35,6 +35,9 @@
#include "HTMLMapElement.h"
#include "HTMLNames.h"
#include "TreeScope.h"
+#include "WebCoreMemoryInstrumentation.h"
+#include <wtf/MemoryInstrumentationHashCountedSet.h>
+#include <wtf/MemoryInstrumentationHashMap.h>
namespace WebCore {
@@ -159,4 +162,11 @@
return get<keyMatchesLabelForAttribute>(key, scope);
}
+void DocumentOrderedMap::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
+{
+ MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::DOM);
+ info.addMember(m_map);
+ info.addMember(m_duplicateCounts);
+}
+
} // namespace WebCore
diff --git a/Source/WebCore/dom/DocumentOrderedMap.h b/Source/WebCore/dom/DocumentOrderedMap.h
index 1f9039e..f7deb3b 100644
--- a/Source/WebCore/dom/DocumentOrderedMap.h
+++ b/Source/WebCore/dom/DocumentOrderedMap.h
@@ -56,6 +56,8 @@
void checkConsistency() const;
+ void reportMemoryUsage(MemoryObjectInfo*) const;
+
private:
template<bool keyMatches(AtomicStringImpl*, Element*)> Element* get(AtomicStringImpl*, const TreeScope*) const;
diff --git a/Source/WebCore/dom/Element.cpp b/Source/WebCore/dom/Element.cpp
index 86b31f1..d20704f 100644
--- a/Source/WebCore/dom/Element.cpp
+++ b/Source/WebCore/dom/Element.cpp
@@ -73,6 +73,7 @@
#include "TextIterator.h"
#include "UndoManager.h"
#include "VoidCallback.h"
+#include "WebCoreMemoryInstrumentation.h"
#include "WebKitAnimationList.h"
#include "XMLNSNames.h"
#include "XMLNames.h"
@@ -2398,4 +2399,12 @@
m_attributeData = m_attributeData->makeMutableCopy();
}
+void Element::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
+{
+ MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::DOM);
+ ContainerNode::reportMemoryUsage(memoryObjectInfo);
+ info.addMember(m_tagName);
+ info.addMember(m_attributeData);
+}
+
} // namespace WebCore
diff --git a/Source/WebCore/dom/Element.h b/Source/WebCore/dom/Element.h
index f135b46..5135838 100644
--- a/Source/WebCore/dom/Element.h
+++ b/Source/WebCore/dom/Element.h
@@ -437,13 +437,7 @@
IntSize savedLayerScrollOffset() const;
void setSavedLayerScrollOffset(const IntSize&);
- virtual void reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
- {
- MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::DOM);
- ContainerNode::reportMemoryUsage(memoryObjectInfo);
- info.addMember(m_tagName);
- info.addMember(m_attributeData);
- }
+ virtual void reportMemoryUsage(MemoryObjectInfo*) const OVERRIDE;
protected:
Element(const QualifiedName& tagName, Document* document, ConstructionType type)
diff --git a/Source/WebCore/dom/ElementRareData.cpp b/Source/WebCore/dom/ElementRareData.cpp
new file mode 100644
index 0000000..e083ce7
--- /dev/null
+++ b/Source/WebCore/dom/ElementRareData.cpp
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2012 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "ElementRareData.h"
+
+#include "RenderStyle.h"
+#include "WebCoreMemoryInstrumentation.h"
+
+namespace WebCore {
+
+void ElementRareData::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
+{
+ MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::DOM);
+ NodeRareData::reportMemoryUsage(memoryObjectInfo);
+ info.addMember(m_cachedCollections);
+ info.addMember(m_computedStyle);
+ info.addMember(m_shadowPseudoId);
+
+ info.addMember(m_datasetDOMStringMap);
+ info.addMember(m_classList);
+ info.addMember(m_shadow);
+ info.addMember(m_attributeMap);
+}
+
+} // namespace WebCore
diff --git a/Source/WebCore/dom/ElementRareData.h b/Source/WebCore/dom/ElementRareData.h
index b4bc8e2..1beacbf 100644
--- a/Source/WebCore/dom/ElementRareData.h
+++ b/Source/WebCore/dom/ElementRareData.h
@@ -107,6 +107,8 @@
}
}
+ virtual void reportMemoryUsage(MemoryObjectInfo*) const OVERRIDE;
+
typedef FixedArray<HTMLCollection*, NumNodeCollectionTypes> CachedHTMLCollectionArray;
OwnPtr<CachedHTMLCollectionArray> m_cachedCollections;
diff --git a/Source/WebCore/dom/ElementShadow.cpp b/Source/WebCore/dom/ElementShadow.cpp
index 51a27da..6f87f16 100644
--- a/Source/WebCore/dom/ElementShadow.cpp
+++ b/Source/WebCore/dom/ElementShadow.cpp
@@ -203,4 +203,16 @@
m_distributor.finishInivalidation();
}
+void ElementShadow::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
+{
+ MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::DOM);
+ info.addMember(m_shadowRoots);
+ ShadowRoot* shadowRoot = m_shadowRoots.head();
+ while (shadowRoot) {
+ info.addMember(shadowRoot);
+ shadowRoot = shadowRoot->next();
+ }
+ info.addMember(m_distributor);
+}
+
} // namespace
diff --git a/Source/WebCore/dom/ElementShadow.h b/Source/WebCore/dom/ElementShadow.h
index e96df25..2f6f56c 100644
--- a/Source/WebCore/dom/ElementShadow.h
+++ b/Source/WebCore/dom/ElementShadow.h
@@ -69,6 +69,8 @@
ContentDistributor& distributor();
const ContentDistributor& distributor() const;
+ void reportMemoryUsage(MemoryObjectInfo*) const;
+
private:
void invalidateDistribution(Element* host);
diff --git a/Source/WebCore/dom/Node.cpp b/Source/WebCore/dom/Node.cpp
index 1d71ab0..4bbb62c 100644
--- a/Source/WebCore/dom/Node.cpp
+++ b/Source/WebCore/dom/Node.cpp
@@ -2830,6 +2830,8 @@
info.addMember(m_previous);
if (m_renderer)
info.addMember(m_renderer->style());
+ if (hasRareData())
+ info.addMember(rareData());
}
void Node::textRects(Vector<IntRect>& rects) const
diff --git a/Source/WebCore/dom/NodeRareData.cpp b/Source/WebCore/dom/NodeRareData.cpp
new file mode 100644
index 0000000..087f9c3
--- /dev/null
+++ b/Source/WebCore/dom/NodeRareData.cpp
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2012 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "NodeRareData.h"
+
+#include "WebCoreMemoryInstrumentation.h"
+#include <wtf/MemoryInstrumentationHashMap.h>
+#include <wtf/MemoryInstrumentationHashSet.h>
+#include <wtf/MemoryInstrumentationVector.h>
+
+namespace WebCore {
+
+void NodeListsNodeData::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
+{
+ MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::DOM);
+ info.addMember(m_atomicNameCaches);
+ info.addMember(m_nameCaches);
+ info.addMember(m_tagNodeListCacheNS);
+}
+
+void NodeRareData::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
+{
+ MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::DOM);
+ info.addMember(m_treeScope);
+ info.addMember(m_nodeLists);
+ info.addMember(m_childNodeList);
+
+#if ENABLE(MUTATION_OBSERVERS)
+ info.addMember(m_mutationObserverRegistry);
+ info.addMember(m_transientMutationObserverRegistry);
+#endif
+
+#if ENABLE(MICRODATA)
+ info.addMember(m_itemProp);
+ info.addMember(m_itemRef);
+ info.addMember(m_itemType);
+#endif
+}
+
+} // namespace WebCore
diff --git a/Source/WebCore/dom/NodeRareData.h b/Source/WebCore/dom/NodeRareData.h
index 5b3a583..5e5f5a7 100644
--- a/Source/WebCore/dom/NodeRareData.h
+++ b/Source/WebCore/dom/NodeRareData.h
@@ -158,6 +158,8 @@
}
}
+ void reportMemoryUsage(MemoryObjectInfo*) const;
+
private:
NodeListsNodeData() { }
@@ -308,6 +310,8 @@
bool isFocused() const { return m_isFocused; }
void setFocused(bool focused) { m_isFocused = focused; }
+ virtual void reportMemoryUsage(MemoryObjectInfo*) const;
+
protected:
// for ElementRareData
bool needsFocusAppearanceUpdateSoonAfterAttach() const { return m_needsFocusAppearanceUpdateSoonAfterAttach; }
diff --git a/Source/WebCore/dom/ShadowRoot.cpp b/Source/WebCore/dom/ShadowRoot.cpp
index e1884e0..b0b0e6d 100644
--- a/Source/WebCore/dom/ShadowRoot.cpp
+++ b/Source/WebCore/dom/ShadowRoot.cpp
@@ -260,4 +260,15 @@
setHasScopedHTMLStyleChild(m_numberOfStyles > 0);
}
+
+void ShadowRoot::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
+{
+ MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::DOM);
+ DocumentFragment::reportMemoryUsage(memoryObjectInfo);
+ TreeScope::reportMemoryUsage(memoryObjectInfo);
+ info.addMember(m_prev);
+ info.addMember(m_next);
+ info.addMember(m_insertionPointAssignedTo);
+}
+
}
diff --git a/Source/WebCore/dom/ShadowRoot.h b/Source/WebCore/dom/ShadowRoot.h
index cc08955..cefeb6bb 100644
--- a/Source/WebCore/dom/ShadowRoot.h
+++ b/Source/WebCore/dom/ShadowRoot.h
@@ -100,6 +100,8 @@
PassRefPtr<Node> cloneNode(bool, ExceptionCode&);
+ virtual void reportMemoryUsage(MemoryObjectInfo*) const OVERRIDE;
+
private:
explicit ShadowRoot(Document*);
virtual ~ShadowRoot();
diff --git a/Source/WebCore/dom/TreeScope.cpp b/Source/WebCore/dom/TreeScope.cpp
index ec723d3..cc593c6 100644
--- a/Source/WebCore/dom/TreeScope.cpp
+++ b/Source/WebCore/dom/TreeScope.cpp
@@ -280,6 +280,18 @@
return 0;
}
+void TreeScope::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
+{
+ MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::DOM);
+ info.addMember(m_rootNode);
+ info.addMember(m_parentTreeScope);
+ info.addMember(m_elementsById);
+ info.addMember(m_imageMapsByName);
+ info.addMember(m_labelsByForAttribute);
+ info.addMember(m_idTargetObserverRegistry);
+ info.addMember(m_selection);
+}
+
static void listTreeScopes(Node* node, Vector<TreeScope*, 5>& treeScopes)
{
while (true) {
diff --git a/Source/WebCore/dom/TreeScope.h b/Source/WebCore/dom/TreeScope.h
index 9cae54d..4a034a2 100644
--- a/Source/WebCore/dom/TreeScope.h
+++ b/Source/WebCore/dom/TreeScope.h
@@ -88,6 +88,8 @@
IdTargetObserverRegistry& idTargetObserverRegistry() const { return *m_idTargetObserverRegistry.get(); }
+ virtual void reportMemoryUsage(MemoryObjectInfo*) const;
+
protected:
explicit TreeScope(ContainerNode*);
virtual ~TreeScope();
diff --git a/Source/WebCore/html/HTMLFormControlElement.cpp b/Source/WebCore/html/HTMLFormControlElement.cpp
index 437be05..cf16f43 100644
--- a/Source/WebCore/html/HTMLFormControlElement.cpp
+++ b/Source/WebCore/html/HTMLFormControlElement.cpp
@@ -498,4 +498,11 @@
return 0;
}
+void HTMLFormControlElement::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
+{
+ MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::DOM);
+ LabelableElement::reportMemoryUsage(memoryObjectInfo);
+ info.addMember(m_validationMessage);
+}
+
} // namespace Webcore
diff --git a/Source/WebCore/html/HTMLFormControlElement.h b/Source/WebCore/html/HTMLFormControlElement.h
index 24de976..b88b1b0 100644
--- a/Source/WebCore/html/HTMLFormControlElement.h
+++ b/Source/WebCore/html/HTMLFormControlElement.h
@@ -112,6 +112,8 @@
using Node::ref;
using Node::deref;
+ virtual void reportMemoryUsage(MemoryObjectInfo*) const OVERRIDE;
+
protected:
HTMLFormControlElement(const QualifiedName& tagName, Document*, HTMLFormElement*);
diff --git a/Source/WebCore/html/HTMLInputElement.cpp b/Source/WebCore/html/HTMLInputElement.cpp
index e02df26..45d0b3a 100644
--- a/Source/WebCore/html/HTMLInputElement.cpp
+++ b/Source/WebCore/html/HTMLInputElement.cpp
@@ -1901,4 +1901,17 @@
HTMLTextFormControlElement::setRangeText(replacement, start, end, selectionMode, ec);
}
+void HTMLInputElement::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
+{
+ MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::DOM);
+ HTMLTextFormControlElement::reportMemoryUsage(memoryObjectInfo);
+ info.addMember(m_name);
+ info.addMember(m_valueIfDirty);
+ info.addMember(m_suggestedValue);
+ info.addMember(m_inputType);
+#if ENABLE(DATALIST_ELEMENT)
+ info.addMember(m_listAttributeTargetObserver);
+#endif
+}
+
} // namespace
diff --git a/Source/WebCore/html/HTMLInputElement.h b/Source/WebCore/html/HTMLInputElement.h
index ef4d76e..e1d1681 100644
--- a/Source/WebCore/html/HTMLInputElement.h
+++ b/Source/WebCore/html/HTMLInputElement.h
@@ -291,6 +291,8 @@
virtual void setRangeText(const String& replacement, ExceptionCode&) OVERRIDE;
virtual void setRangeText(const String& replacement, unsigned start, unsigned end, const String& selectionMode, ExceptionCode&) OVERRIDE;
+ virtual void reportMemoryUsage(MemoryObjectInfo*) const OVERRIDE;
+
protected:
HTMLInputElement(const QualifiedName&, Document*, HTMLFormElement*, bool createdByParser);
void createShadowSubtree();
diff --git a/Source/WebCore/html/HTMLTextFormControlElement.cpp b/Source/WebCore/html/HTMLTextFormControlElement.cpp
index 7aacfcb..d52a825 100644
--- a/Source/WebCore/html/HTMLTextFormControlElement.cpp
+++ b/Source/WebCore/html/HTMLTextFormControlElement.cpp
@@ -672,4 +672,11 @@
return "ltr";
}
+void HTMLTextFormControlElement::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
+{
+ MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::DOM);
+ HTMLFormControlElementWithState::reportMemoryUsage(memoryObjectInfo);
+ info.addMember(m_textAsOfLastFormControlChangeEvent);
+}
+
} // namespace Webcore
diff --git a/Source/WebCore/html/HTMLTextFormControlElement.h b/Source/WebCore/html/HTMLTextFormControlElement.h
index 9a5fa61..1faf8fc 100644
--- a/Source/WebCore/html/HTMLTextFormControlElement.h
+++ b/Source/WebCore/html/HTMLTextFormControlElement.h
@@ -87,6 +87,8 @@
void setTextAsOfLastFormControlChangeEvent(const String& text) { m_textAsOfLastFormControlChangeEvent = text; }
+ virtual void reportMemoryUsage(MemoryObjectInfo*) const OVERRIDE;
+
protected:
HTMLTextFormControlElement(const QualifiedName&, Document*, HTMLFormElement*);
bool isPlaceholderEmpty() const;