Web Inspector: extract HashSet instrumentation from core NMI code and put it into MemoryInstrumentationHashSet.h
https://bugs.webkit.org/show_bug.cgi?id=97198

Reviewed by Yury Semikhatsky.

Current implementation has overloads for HashSet.
This prevents us from instrumenting complex cases like Vector<HashSet<...> >.

Source/WebCore:

* css/CSSCursorImageValue.cpp:
(WebCore::CSSCursorImageValue::reportDescendantMemoryUsage):
* css/StyleResolver.cpp:
(WebCore::StyleResolver::Features::reportMemoryUsage):
(WebCore::StyleResolver::collectMatchingRulesForList):
* dom/Document.cpp:
(WebCore::Document::reportMemoryUsage):
* dom/DocumentEventQueue.cpp:
(WebCore::DocumentEventQueue::reportMemoryUsage):
* loader/DocumentLoader.cpp:
(WebCore::DocumentLoader::reportMemoryUsage):
* loader/FrameLoader.cpp:
(WebCore::FrameLoader::reportMemoryUsage):
* loader/cache/CachedResource.cpp:
(WebCore::CachedResource::reportMemoryUsage):
* loader/cache/CachedResourceLoader.cpp:
(WebCore::CachedResourceLoader::reportMemoryUsage):

Source/WebKit/chromium:

* tests/MemoryInstrumentationTest.cpp:
(WebCore::TEST):
(WebCore):

Source/WTF:

* GNUmakefile.list.am:
* WTF.gypi:
* WTF.pro:
* WTF.vcproj/WTF.vcproj:
* WTF.xcodeproj/project.pbxproj:
* wtf/HashSet.h:
(WTF):
(HashSet):
* wtf/HashTable.h:
(WTF):
(HashTable):
* wtf/MemoryInstrumentation.h:
(WTF::MemoryClassInfo::addCollectionElements):
(WTF::MemoryClassInfo::addHashCountedSet):
* wtf/MemoryInstrumentationHashSet.h: Added.
(WTF):
(WTF::reportMemoryUsage):
* wtf/MemoryInstrumentationHashTable.h: Added.
(WTF):
(WTF::reportMemoryUsage):

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@129637 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/dom/Document.cpp b/Source/WebCore/dom/Document.cpp
index df2ebeff..00de0e7 100644
--- a/Source/WebCore/dom/Document.cpp
+++ b/Source/WebCore/dom/Document.cpp
@@ -109,6 +109,7 @@
 #include "Language.h"
 #include "Localizer.h"
 #include "Logging.h"
+#include "MediaCanStartListener.h"
 #include "MediaQueryList.h"
 #include "MediaQueryMatcher.h"
 #include "MouseEventWithHitTestResults.h"
@@ -174,6 +175,7 @@
 #include <wtf/CurrentTime.h>
 #include <wtf/HashFunctions.h>
 #include <wtf/MainThread.h>
+#include <wtf/MemoryInstrumentationHashSet.h>
 #include <wtf/MemoryInstrumentationVector.h>
 #include <wtf/PassRefPtr.h>
 #include <wtf/StdLibExtras.h>
@@ -5865,8 +5867,8 @@
 void Document::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
 {
     MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::DOM);
-    info.addMember(m_styleResolver);
     ContainerNode::reportMemoryUsage(memoryObjectInfo);
+    info.addMember(m_styleResolver);
     info.addMember(m_customFonts);
     info.addMember(m_url);
     info.addMember(m_baseURL);
@@ -5876,12 +5878,16 @@
     info.addMember(m_firstPartyForCookies);
     info.addMember(m_documentURI);
     info.addMember(m_baseTarget);
+    info.addMember(m_docType);
+    info.addMember(m_implementation);
+    info.addMember(m_elemSheet);
     info.addMember(m_frame);
     info.addMember(m_cachedResourceLoader);
-    info.addMember(m_elemSheet);
     info.addMember(m_styleSheetCollection);
-    info.addHashSet(m_nodeIterators);
-    info.addHashSet(m_ranges);
+    info.addMember(m_styleSheetList);
+    info.addMember(m_formController);
+    info.addMember(m_nodeIterators);
+    info.addMember(m_ranges);
     info.addMember(m_title.string());
     info.addMember(m_rawTitle.string());
     info.addMember(m_xmlEncoding);
@@ -5894,12 +5900,12 @@
 #endif
     info.addHashMap(m_cssCanvasElements);
     info.addMember(m_iconURLs);
-    info.addHashSet(m_documentSuspensionCallbackElements);
-    info.addHashSet(m_mediaVolumeCallbackElements);
-    info.addHashSet(m_privateBrowsingStateChangedElements);
+    info.addMember(m_documentSuspensionCallbackElements);
+    info.addMember(m_mediaVolumeCallbackElements);
+    info.addMember(m_privateBrowsingStateChangedElements);
     info.addHashMap(m_elementsByAccessKey);
     info.addMember(m_eventQueue);
-    info.addHashSet(m_mediaCanStartListeners);
+    info.addMember(m_mediaCanStartListeners);
     info.addMember(m_pendingTasks);
 }
 
diff --git a/Source/WebCore/dom/DocumentEventQueue.cpp b/Source/WebCore/dom/DocumentEventQueue.cpp
index 6396f01..f3601cf 100644
--- a/Source/WebCore/dom/DocumentEventQueue.cpp
+++ b/Source/WebCore/dom/DocumentEventQueue.cpp
@@ -35,6 +35,7 @@
 #include "ScriptExecutionContext.h"
 #include "SuspendableTimer.h"
 #include "WebCoreMemoryInstrumentation.h"
+#include <wtf/MemoryInstrumentationHashSet.h>
 
 namespace WebCore {
     
@@ -112,8 +113,8 @@
 {
     MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::DOM);
     info.addMember(m_pendingEventTimer);
-    info.addInstrumentedHashSet(m_queuedEvents);
-    info.addInstrumentedHashSet(m_nodesWithQueuedScrollEvents);
+    info.addMember(m_queuedEvents);
+    info.addMember(m_nodesWithQueuedScrollEvents);
 }
 
 bool DocumentEventQueue::cancelEvent(Event* event)