Web Inspector: native memory instrumentation: cover MemoryCache with MemoryInstrumentation
https://bugs.webkit.org/show_bug.cgi?id=91734
Reviewed by Yury Semikhatsky.
Old version of native memory instrumentation doesn't mark the memory cache objects as visited.
As a result MI could count the same objects multiple times.
The new version just traverses through MemoryCache the same way as through DOM.
Also not all the cached resource types were counted.
* dom/Document.cpp:
(WebCore::Document::reportMemoryUsage):
* dom/MemoryInstrumentation.h:
* inspector/InspectorMemoryAgent.cpp:
(MemoryBlockName):
(WebCore):
(WebCore::collectDomTreeInfo):
(WebCore::InspectorMemoryAgent::getProcessMemoryDistribution):
* loader/cache/CachedCSSStyleSheet.cpp:
(WebCore::CachedCSSStyleSheet::reportMemoryUsage):
(WebCore):
* loader/cache/CachedCSSStyleSheet.h:
(WebCore):
(CachedCSSStyleSheet):
* loader/cache/CachedFont.cpp:
(WebCore::CachedFont::reportMemoryUsage):
(WebCore):
* loader/cache/CachedFont.h:
(CachedFont):
* loader/cache/CachedImage.cpp:
(WebCore::CachedImage::reportMemoryUsage):
(WebCore):
* loader/cache/CachedImage.h:
(CachedImage):
* loader/cache/CachedRawResource.cpp:
(WebCore::CachedRawResource::reportMemoryUsage):
(WebCore):
* loader/cache/CachedRawResource.h:
(WebCore):
(CachedRawResource):
* loader/cache/CachedResource.cpp:
(WebCore::CachedResource::reportMemoryUsage):
(WebCore):
* loader/cache/CachedResource.h:
(WebCore):
(CachedResource):
* loader/cache/CachedResourceHandle.cpp:
(WebCore::CachedResourceHandleBase::reportMemoryUsage):
(WebCore):
* loader/cache/CachedResourceHandle.h:
(WebCore):
(CachedResourceHandleBase):
* loader/cache/CachedResourceLoader.cpp:
(WebCore):
(WebCore::CachedResourceLoader::reportMemoryUsage):
* loader/cache/CachedResourceLoader.h:
(WebCore):
(CachedResourceLoader):
* loader/cache/CachedSVGDocument.cpp:
(WebCore::CachedSVGDocument::reportMemoryUsage):
(WebCore):
* loader/cache/CachedSVGDocument.h:
(CachedSVGDocument):
* loader/cache/CachedScript.cpp:
(WebCore::CachedScript::reportMemoryUsage):
(WebCore):
* loader/cache/CachedScript.h:
(WebCore):
(CachedScript):
* loader/cache/CachedShader.cpp:
(WebCore::CachedShader::reportMemoryUsage):
(WebCore):
* loader/cache/CachedShader.h:
(WebCore):
(CachedShader):
* loader/cache/CachedXSLStyleSheet.cpp:
(WebCore::CachedXSLStyleSheet::reportMemoryUsage):
(WebCore):
* loader/cache/CachedXSLStyleSheet.h:
(WebCore):
(CachedXSLStyleSheet):
* loader/cache/MemoryCache.cpp:
(WebCore::MemoryCache::reportMemoryUsage):
(WebCore):
* loader/cache/MemoryCache.h:
(WebCore):
(MemoryCache):
* platform/PurgeableBuffer.h:
(WebCore):
(PurgeableBuffer):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@124744 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/loader/cache/CachedCSSStyleSheet.cpp b/Source/WebCore/loader/cache/CachedCSSStyleSheet.cpp
index c05d730..bab1756 100644
--- a/Source/WebCore/loader/cache/CachedCSSStyleSheet.cpp
+++ b/Source/WebCore/loader/cache/CachedCSSStyleSheet.cpp
@@ -32,6 +32,7 @@
#include "CachedStyleSheetClient.h"
#include "HTTPParsers.h"
#include "MemoryCache.h"
+#include "MemoryInstrumentation.h"
#include "SharedBuffer.h"
#include "StyleSheetContents.h"
#include "TextResourceDecoder.h"
@@ -198,4 +199,13 @@
setDecodedSize(m_parsedStyleSheetCache->estimatedSizeInBytes());
}
+void CachedCSSStyleSheet::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
+{
+ MemoryClassInfo<CachedCSSStyleSheet> info(memoryObjectInfo, this, MemoryInstrumentation::CachedResourceCSS);
+ CachedResource::reportMemoryUsage(memoryObjectInfo);
+ info.addMember(m_decoder);
+ info.addInstrumentedMember(m_parsedStyleSheetCache);
+ info.addMember(m_decodedSheetText);
+}
+
}
diff --git a/Source/WebCore/loader/cache/CachedCSSStyleSheet.h b/Source/WebCore/loader/cache/CachedCSSStyleSheet.h
index 9ad6f14..434ba45 100644
--- a/Source/WebCore/loader/cache/CachedCSSStyleSheet.h
+++ b/Source/WebCore/loader/cache/CachedCSSStyleSheet.h
@@ -32,6 +32,7 @@
namespace WebCore {
class CachedResourceClient;
+ class MemoryObjectInfo;
class SharedBuffer;
class StyleSheetContents;
class TextResourceDecoder;
@@ -58,6 +59,8 @@
PassRefPtr<StyleSheetContents> restoreParsedStyleSheet(const CSSParserContext&);
void saveParsedStyleSheet(PassRefPtr<StyleSheetContents>);
+ virtual void reportMemoryUsage(MemoryObjectInfo*) const OVERRIDE;
+
private:
bool canUseSheet(bool enforceMIMEType, bool* hasValidMIMEType) const;
virtual PurgePriority purgePriority() const { return PurgeLast; }
diff --git a/Source/WebCore/loader/cache/CachedFont.cpp b/Source/WebCore/loader/cache/CachedFont.cpp
index fddd79d..8185330 100644
--- a/Source/WebCore/loader/cache/CachedFont.cpp
+++ b/Source/WebCore/loader/cache/CachedFont.cpp
@@ -36,6 +36,7 @@
#include "CachedResourceLoader.h"
#include "FontPlatformData.h"
#include "MemoryCache.h"
+#include "MemoryInstrumentation.h"
#include "SharedBuffer.h"
#include "TextResourceDecoder.h"
#include <wtf/Vector.h>
@@ -206,4 +207,16 @@
checkNotify();
}
+void CachedFont::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
+{
+ MemoryClassInfo<CachedFont> info(memoryObjectInfo, this, MemoryInstrumentation::CachedResourceFont);
+ CachedResource::reportMemoryUsage(memoryObjectInfo);
+#if ENABLE(SVG_FONTS)
+ info.addInstrumentedMember(m_externalSVGDocument);
+#endif
+#ifdef STORE_FONT_CUSTOM_PLATFORM_DATA
+ info.addMember(m_fontData);
+#endif
+}
+
}
diff --git a/Source/WebCore/loader/cache/CachedFont.h b/Source/WebCore/loader/cache/CachedFont.h
index 3cafc1e..cff342a 100644
--- a/Source/WebCore/loader/cache/CachedFont.h
+++ b/Source/WebCore/loader/cache/CachedFont.h
@@ -70,6 +70,8 @@
SVGFontElement* getSVGFontById(const String&) const;
#endif
+ virtual void reportMemoryUsage(MemoryObjectInfo*) const OVERRIDE;
+
private:
FontCustomPlatformData* m_fontData;
bool m_loadInitiated;
diff --git a/Source/WebCore/loader/cache/CachedImage.cpp b/Source/WebCore/loader/cache/CachedImage.cpp
index 313475c..dd818ac 100644
--- a/Source/WebCore/loader/cache/CachedImage.cpp
+++ b/Source/WebCore/loader/cache/CachedImage.cpp
@@ -467,4 +467,14 @@
notifyObservers(&rect);
}
+void CachedImage::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
+{
+ MemoryClassInfo<CachedImage> info(memoryObjectInfo, this, MemoryInstrumentation::CachedResourceImage);
+ CachedResource::reportMemoryUsage(memoryObjectInfo);
+ info.addMember(m_image);
+#if ENABLE(SVG)
+ info.addMember(m_svgImageCache);
+#endif
+}
+
} // namespace WebCore
diff --git a/Source/WebCore/loader/cache/CachedImage.h b/Source/WebCore/loader/cache/CachedImage.h
index b992151..e34c164 100644
--- a/Source/WebCore/loader/cache/CachedImage.h
+++ b/Source/WebCore/loader/cache/CachedImage.h
@@ -93,6 +93,8 @@
virtual void animationAdvanced(const Image*);
virtual void changedInRect(const Image*, const IntRect&);
+ virtual void reportMemoryUsage(MemoryObjectInfo*) const OVERRIDE;
+
private:
Image* lookupOrCreateImageForRenderer(const RenderObject*);
diff --git a/Source/WebCore/loader/cache/CachedRawResource.cpp b/Source/WebCore/loader/cache/CachedRawResource.cpp
index b0a7033..e385b7a 100644
--- a/Source/WebCore/loader/cache/CachedRawResource.cpp
+++ b/Source/WebCore/loader/cache/CachedRawResource.cpp
@@ -29,6 +29,7 @@
#include "CachedResourceClient.h"
#include "CachedResourceClientWalker.h"
#include "CachedResourceLoader.h"
+#include "MemoryInstrumentation.h"
#include "SharedBuffer.h"
#include "SubresourceLoader.h"
#include <wtf/PassRefPtr.h>
@@ -159,4 +160,11 @@
return true;
}
+void CachedRawResource::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
+{
+ MemoryClassInfo<CachedRawResource> info(memoryObjectInfo, this, MemoryInstrumentation::CachedResource);
+ CachedResource::reportMemoryUsage(memoryObjectInfo);
+}
+
+
} // namespace WebCore
diff --git a/Source/WebCore/loader/cache/CachedRawResource.h b/Source/WebCore/loader/cache/CachedRawResource.h
index e296ab8..c349b86 100644
--- a/Source/WebCore/loader/cache/CachedRawResource.h
+++ b/Source/WebCore/loader/cache/CachedRawResource.h
@@ -29,6 +29,7 @@
namespace WebCore {
class CachedRawResourceCallback;
class CachedRawResourceClient;
+class MemoryObjectInfo;
class CachedRawResource : public CachedResource {
public:
@@ -44,6 +45,8 @@
bool canReuse(const ResourceRequest&) const;
+ virtual void reportMemoryUsage(MemoryObjectInfo*) const OVERRIDE;
+
private:
virtual void didAddClient(CachedResourceClient*);
virtual void data(PassRefPtr<SharedBuffer> data, bool allDataReceived);
diff --git a/Source/WebCore/loader/cache/CachedResource.cpp b/Source/WebCore/loader/cache/CachedResource.cpp
index 41cd601..f59f311 100755
--- a/Source/WebCore/loader/cache/CachedResource.cpp
+++ b/Source/WebCore/loader/cache/CachedResource.cpp
@@ -37,6 +37,7 @@
#include "InspectorInstrumentation.h"
#include "KURL.h"
#include "Logging.h"
+#include "MemoryInstrumentation.h"
#include "PurgeableBuffer.h"
#include "ResourceHandle.h"
#include "ResourceLoadScheduler.h"
@@ -800,4 +801,27 @@
m_resource->didAddClient(m_client);
}
+void CachedResource::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
+{
+ MemoryClassInfo<CachedResource> info(memoryObjectInfo, this, MemoryInstrumentation::CachedResource);
+ info.addMember(m_resourceRequest);
+ info.addHashSet(m_clients);
+ info.addMember(m_accept);
+ info.addInstrumentedMember(m_loader);
+ info.addMember(m_response);
+ info.addInstrumentedMember(m_data);
+ info.addMember(m_cachedMetadata.get());
+ info.addInstrumentedMember(m_nextInAllResourcesList);
+ info.addInstrumentedMember(m_prevInAllResourcesList);
+ info.addInstrumentedMember(m_nextInLiveResourcesList);
+ info.addInstrumentedMember(m_prevInLiveResourcesList);
+ info.addInstrumentedMember(m_owningCachedResourceLoader);
+ info.addInstrumentedMember(m_resourceToRevalidate);
+ info.addInstrumentedMember(m_proxyResource);
+ info.addInstrumentedHashSet(m_handlesToRevalidate);
+
+ if (m_purgeableData && !m_purgeableData->wasPurged())
+ info.addRawBuffer(m_purgeableData.get(), m_purgeableData->size());
+}
+
}
diff --git a/Source/WebCore/loader/cache/CachedResource.h b/Source/WebCore/loader/cache/CachedResource.h
index ea63f93..f61ad58 100644
--- a/Source/WebCore/loader/cache/CachedResource.h
+++ b/Source/WebCore/loader/cache/CachedResource.h
@@ -47,6 +47,7 @@
class CachedResourceLoader;
class Frame;
class InspectorResource;
+class MemoryObjectInfo;
class PurgeableBuffer;
class SecurityOrigin;
class SubresourceLoader;
@@ -250,6 +251,8 @@
void setLoadFinishTime(double finishTime) { m_loadFinishTime = finishTime; }
double loadFinishTime() const { return m_loadFinishTime; }
+ virtual void reportMemoryUsage(MemoryObjectInfo*) const;
+
protected:
void checkNotify();
diff --git a/Source/WebCore/loader/cache/CachedResourceHandle.cpp b/Source/WebCore/loader/cache/CachedResourceHandle.cpp
index 871292c..c4e7d44 100644
--- a/Source/WebCore/loader/cache/CachedResourceHandle.cpp
+++ b/Source/WebCore/loader/cache/CachedResourceHandle.cpp
@@ -26,6 +26,8 @@
#include "config.h"
#include "CachedResourceHandle.h"
+#include "MemoryInstrumentation.h"
+
namespace WebCore {
void CachedResourceHandleBase::setResource(CachedResource* resource)
@@ -39,4 +41,11 @@
m_resource->registerHandle(this);
}
+void CachedResourceHandleBase::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
+{
+ MemoryClassInfo<CachedResourceHandleBase> info(memoryObjectInfo, this, MemoryInstrumentation::CachedResource);
+ info.addInstrumentedMember(m_resource);
+}
+
+
}
diff --git a/Source/WebCore/loader/cache/CachedResourceHandle.h b/Source/WebCore/loader/cache/CachedResourceHandle.h
index 95cd0ff..15d44c7 100644
--- a/Source/WebCore/loader/cache/CachedResourceHandle.h
+++ b/Source/WebCore/loader/cache/CachedResourceHandle.h
@@ -30,6 +30,8 @@
namespace WebCore {
+class MemoryObjectInfo;
+
class CachedResourceHandleBase {
public:
~CachedResourceHandleBase() { if (m_resource) m_resource->unregisterHandle(this); }
@@ -41,6 +43,8 @@
typedef CachedResource* CachedResourceHandleBase::*UnspecifiedBoolType;
operator UnspecifiedBoolType() const { return m_resource ? &CachedResourceHandleBase::m_resource : 0; }
+ void reportMemoryUsage(MemoryObjectInfo*) const;
+
protected:
CachedResourceHandleBase() : m_resource(0) {}
CachedResourceHandleBase(CachedResource* res) { m_resource = res; if (m_resource) m_resource->registerHandle(this); }
diff --git a/Source/WebCore/loader/cache/CachedResourceLoader.cpp b/Source/WebCore/loader/cache/CachedResourceLoader.cpp
index 9a88724..25ab560 100644
--- a/Source/WebCore/loader/cache/CachedResourceLoader.cpp
+++ b/Source/WebCore/loader/cache/CachedResourceLoader.cpp
@@ -877,5 +877,18 @@
printf("IMAGES: %d (%d hits, hit rate %d%%)\n", images, images - imageMisses, (images - imageMisses) * 100 / images);
}
#endif
-
+
+void CachedResourceLoader::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
+{
+ MemoryClassInfo<CachedResourceLoader> info(memoryObjectInfo, this, MemoryInstrumentation::Loader);
+ info.addHashMap(m_documentResources);
+ for (DocumentResourceMap::const_iterator i = m_documentResources.begin(); i != m_documentResources.end(); ++i) {
+ info.addMember(i->first);
+ info.addInstrumentedMember(i->second);
+ }
+ info.addHashSet(m_validatedURLs);
+ info.addListHashSet(*m_preloads);
+ info.addMember(m_pendingPreloads);
+}
+
}
diff --git a/Source/WebCore/loader/cache/CachedResourceLoader.h b/Source/WebCore/loader/cache/CachedResourceLoader.h
index 5eeb387..3f1c233 100644
--- a/Source/WebCore/loader/cache/CachedResourceLoader.h
+++ b/Source/WebCore/loader/cache/CachedResourceLoader.h
@@ -52,6 +52,7 @@
class Frame;
class ImageLoader;
class KURL;
+class MemoryObjectInfo;
// The CachedResourceLoader manages the loading of scripts/images/stylesheets for a single document.
class CachedResourceLoader {
@@ -119,6 +120,8 @@
void printPreloadStats();
bool canRequest(CachedResource::Type, const KURL&, bool forPreload = false);
+ void reportMemoryUsage(MemoryObjectInfo*) const;
+
private:
CachedResourceHandle<CachedResource> requestResource(CachedResource::Type, ResourceRequest&, const String& charset, const ResourceLoaderOptions&, ResourceLoadPriority = ResourceLoadPriorityUnresolved, bool isPreload = false);
CachedResourceHandle<CachedResource> revalidateResource(CachedResource*, ResourceLoadPriority, const ResourceLoaderOptions&);
diff --git a/Source/WebCore/loader/cache/CachedSVGDocument.cpp b/Source/WebCore/loader/cache/CachedSVGDocument.cpp
index f03fadb..ec677f8 100644
--- a/Source/WebCore/loader/cache/CachedSVGDocument.cpp
+++ b/Source/WebCore/loader/cache/CachedSVGDocument.cpp
@@ -71,6 +71,14 @@
checkNotify();
}
+void CachedSVGDocument::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
+{
+ MemoryClassInfo<CachedSVGDocument> info(memoryObjectInfo, this, MemoryInstrumentation::CachedResourceSVG);
+ CachedResource::reportMemoryUsage(memoryObjectInfo);
+ info.addInstrumentedMember(m_document);
+ info.addMember(m_decoder);
+}
+
}
#endif
diff --git a/Source/WebCore/loader/cache/CachedSVGDocument.h b/Source/WebCore/loader/cache/CachedSVGDocument.h
index b05ef67..54d5a88 100644
--- a/Source/WebCore/loader/cache/CachedSVGDocument.h
+++ b/Source/WebCore/loader/cache/CachedSVGDocument.h
@@ -43,6 +43,8 @@
virtual String encoding() const;
virtual void data(PassRefPtr<SharedBuffer> data, bool allDataReceived);
+ virtual void reportMemoryUsage(MemoryObjectInfo*) const OVERRIDE;
+
protected:
RefPtr<SVGDocument> m_document;
RefPtr<TextResourceDecoder> m_decoder;
diff --git a/Source/WebCore/loader/cache/CachedScript.cpp b/Source/WebCore/loader/cache/CachedScript.cpp
index 086fa1b..5bcb3b6 100644
--- a/Source/WebCore/loader/cache/CachedScript.cpp
+++ b/Source/WebCore/loader/cache/CachedScript.cpp
@@ -30,6 +30,7 @@
#include "MemoryCache.h"
#include "CachedResourceClient.h"
#include "CachedResourceClientWalker.h"
+#include "MemoryInstrumentation.h"
#include "SharedBuffer.h"
#include "TextResourceDecoder.h"
#include <wtf/Vector.h>
@@ -126,4 +127,15 @@
}
#endif
+void CachedScript::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
+{
+ MemoryClassInfo<CachedScript> info(memoryObjectInfo, this, MemoryInstrumentation::CachedResourceScript);
+ CachedResource::reportMemoryUsage(memoryObjectInfo);
+ info.addMember(m_script);
+ info.addMember(m_decoder);
+#if USE(JSC)
+ info.addMember(m_sourceProviderCache);
+#endif
+}
+
} // namespace WebCore
diff --git a/Source/WebCore/loader/cache/CachedScript.h b/Source/WebCore/loader/cache/CachedScript.h
index 9a4f38a..3df6be9 100644
--- a/Source/WebCore/loader/cache/CachedScript.h
+++ b/Source/WebCore/loader/cache/CachedScript.h
@@ -37,6 +37,7 @@
namespace WebCore {
class CachedResourceLoader;
+ class MemoryObjectInfo;
class TextResourceDecoder;
class CachedScript : public CachedResource {
@@ -57,6 +58,9 @@
JSC::SourceProviderCache* sourceProviderCache() const;
void sourceProviderCacheSizeChanged(int delta);
#endif
+
+ virtual void reportMemoryUsage(MemoryObjectInfo*) const OVERRIDE;
+
private:
virtual PurgePriority purgePriority() const { return PurgeLast; }
diff --git a/Source/WebCore/loader/cache/CachedShader.cpp b/Source/WebCore/loader/cache/CachedShader.cpp
index b8d7c5f..5af9c54 100644
--- a/Source/WebCore/loader/cache/CachedShader.cpp
+++ b/Source/WebCore/loader/cache/CachedShader.cpp
@@ -32,6 +32,7 @@
#if ENABLE(CSS_SHADERS)
#include "CachedShader.h"
+#include "MemoryInstrumentation.h"
#include "SharedBuffer.h"
#include "TextResourceDecoder.h"
#include <wtf/text/StringBuilder.h>
@@ -67,6 +68,14 @@
CachedResource::data(data, allDataReceived);
}
+void CachedShader::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
+{
+ MemoryClassInfo<CachedShader> info(memoryObjectInfo, this, MemoryInstrumentation::CachedResourceShader);
+ CachedResource::reportMemoryUsage(memoryObjectInfo);
+ info.addMember(m_decoder);
+ info.addMember(m_shaderString);
+}
+
} // namespace WebCore
#endif // ENABLE(CSS_SHADERS)
diff --git a/Source/WebCore/loader/cache/CachedShader.h b/Source/WebCore/loader/cache/CachedShader.h
index d1de14d..4286770 100644
--- a/Source/WebCore/loader/cache/CachedShader.h
+++ b/Source/WebCore/loader/cache/CachedShader.h
@@ -36,6 +36,7 @@
namespace WebCore {
+class MemoryObjectInfo;
class TextResourceDecoder;
class CachedShader : public CachedResource {
@@ -46,6 +47,8 @@
const String& shaderString();
void data(PassRefPtr<SharedBuffer>, bool allDataReceived);
+ virtual void reportMemoryUsage(MemoryObjectInfo*) const OVERRIDE;
+
private:
RefPtr<TextResourceDecoder> m_decoder;
String m_shaderString;
diff --git a/Source/WebCore/loader/cache/CachedXSLStyleSheet.cpp b/Source/WebCore/loader/cache/CachedXSLStyleSheet.cpp
index 336fce4..33c9612 100644
--- a/Source/WebCore/loader/cache/CachedXSLStyleSheet.cpp
+++ b/Source/WebCore/loader/cache/CachedXSLStyleSheet.cpp
@@ -29,6 +29,7 @@
#include "CachedResourceClientWalker.h"
#include "CachedStyleSheetClient.h"
+#include "MemoryInstrumentation.h"
#include "SharedBuffer.h"
#include "TextResourceDecoder.h"
#include <wtf/Vector.h>
@@ -96,6 +97,14 @@
checkNotify();
}
+void CachedXSLStyleSheet::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
+{
+ MemoryClassInfo<CachedXSLStyleSheet> info(memoryObjectInfo, this, MemoryInstrumentation::CachedResourceXSLT);
+ CachedResource::reportMemoryUsage(memoryObjectInfo);
+ info.addMember(m_sheet);
+ info.addMember(m_decoder);
+}
+
#endif
}
diff --git a/Source/WebCore/loader/cache/CachedXSLStyleSheet.h b/Source/WebCore/loader/cache/CachedXSLStyleSheet.h
index b8f7283..2aa8dfa 100644
--- a/Source/WebCore/loader/cache/CachedXSLStyleSheet.h
+++ b/Source/WebCore/loader/cache/CachedXSLStyleSheet.h
@@ -32,6 +32,7 @@
namespace WebCore {
class CachedResourceLoader;
+ class MemoryObjectInfo;
class TextResourceDecoder;
#if ENABLE(XSLT)
@@ -50,6 +51,8 @@
void checkNotify();
+ virtual void reportMemoryUsage(MemoryObjectInfo*) const OVERRIDE;
+
protected:
String m_sheet;
RefPtr<TextResourceDecoder> m_decoder;
diff --git a/Source/WebCore/loader/cache/MemoryCache.cpp b/Source/WebCore/loader/cache/MemoryCache.cpp
index 5dc0474..2ce2c3f 100644
--- a/Source/WebCore/loader/cache/MemoryCache.cpp
+++ b/Source/WebCore/loader/cache/MemoryCache.cpp
@@ -36,6 +36,7 @@
#include "FrameView.h"
#include "Image.h"
#include "Logging.h"
+#include "MemoryInstrumentation.h"
#include "ResourceHandle.h"
#include "SecurityOrigin.h"
#include "SecurityOriginHash.h"
@@ -714,6 +715,19 @@
return stats;
}
+void MemoryCache::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
+{
+ MemoryClassInfo<MemoryCache> info(memoryObjectInfo, this, MemoryInstrumentation::MemoryCacheStructures);
+ info.addHashMap(m_resources);
+ CachedResourceMap::const_iterator e = m_resources.end();
+ for (CachedResourceMap::const_iterator i = m_resources.begin(); i != e; ++i) {
+ info.addMember(i->first);
+ info.addInstrumentedMember(i->second);
+ }
+ info.addVector(m_allResources);
+ info.addMember(m_liveDecodedResources);
+}
+
void MemoryCache::setDisabled(bool disabled)
{
m_disabled = disabled;
diff --git a/Source/WebCore/loader/cache/MemoryCache.h b/Source/WebCore/loader/cache/MemoryCache.h
index 6f98326..5a2f949 100644
--- a/Source/WebCore/loader/cache/MemoryCache.h
+++ b/Source/WebCore/loader/cache/MemoryCache.h
@@ -39,6 +39,7 @@
class CachedResource;
class CachedResourceLoader;
class KURL;
+class MemoryObjectInfo;
class ScriptExecutionContext;
class SecurityOrigin;
struct SecurityOriginHash;
@@ -168,6 +169,8 @@
unsigned liveSize() const { return m_liveSize; }
unsigned deadSize() const { return m_deadSize; }
+ void reportMemoryUsage(MemoryObjectInfo*) const;
+
private:
MemoryCache();
~MemoryCache(); // Not implemented to make sure nobody accidentally calls delete -- WebCore does not delete singletons.