mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-04 19:33:18 +00:00
Bug 800187 (part 1) - Add memory reporter for the nsStyleSheetService. r=bz.
--HG-- extra : rebase_source : fc5c04daa0fd919f11470b090e38e9e8a5f19db6
This commit is contained in:
parent
3ee916ea11
commit
33aebdc9f2
@ -19,6 +19,24 @@
|
||||
#include "nsNetUtil.h"
|
||||
#include "nsIObserverService.h"
|
||||
#include "nsLayoutStatics.h"
|
||||
#include "nsIMemoryReporter.h"
|
||||
|
||||
NS_MEMORY_REPORTER_MALLOC_SIZEOF_FUN(LayoutStyleSheetServiceMallocSizeOf,
|
||||
"layout/style-sheet-service")
|
||||
|
||||
static int64_t
|
||||
GetStyleSheetServiceSize()
|
||||
{
|
||||
return nsStyleSheetService::SizeOfIncludingThis(
|
||||
LayoutStyleSheetServiceMallocSizeOf);
|
||||
}
|
||||
|
||||
NS_MEMORY_REPORTER_IMPLEMENT(StyleSheetService,
|
||||
"explicit/layout/style-sheet-service",
|
||||
KIND_HEAP,
|
||||
nsIMemoryReporter::UNITS_BYTES,
|
||||
GetStyleSheetServiceSize,
|
||||
"Memory used for style sheets held by the style sheet service.")
|
||||
|
||||
nsStyleSheetService *nsStyleSheetService::gInstance = nullptr;
|
||||
|
||||
@ -28,12 +46,18 @@ nsStyleSheetService::nsStyleSheetService()
|
||||
NS_ASSERTION(!gInstance, "Someone is using CreateInstance instead of GetService");
|
||||
gInstance = this;
|
||||
nsLayoutStatics::AddRef();
|
||||
|
||||
mReporter = new NS_MEMORY_REPORTER_NAME(StyleSheetService);
|
||||
(void)::NS_RegisterMemoryReporter(mReporter);
|
||||
}
|
||||
|
||||
nsStyleSheetService::~nsStyleSheetService()
|
||||
{
|
||||
gInstance = nullptr;
|
||||
nsLayoutStatics::Release();
|
||||
|
||||
(void)::NS_UnregisterMemoryReporter(mReporter);
|
||||
mReporter = nullptr;
|
||||
}
|
||||
|
||||
NS_IMPL_ISUPPORTS1(nsStyleSheetService, nsIStyleSheetService)
|
||||
@ -173,7 +197,7 @@ nsStyleSheetService::UnregisterSheet(nsIURI *sheetURI, uint32_t aSheetType)
|
||||
NS_ENSURE_TRUE(foundIndex >= 0, NS_ERROR_INVALID_ARG);
|
||||
nsCOMPtr<nsIStyleSheet> sheet = mSheets[aSheetType][foundIndex];
|
||||
mSheets[aSheetType].RemoveObjectAt(foundIndex);
|
||||
|
||||
|
||||
const char* message = (aSheetType == AGENT_SHEET) ?
|
||||
"agent-sheet-removed" : "user-sheet-removed";
|
||||
nsCOMPtr<nsIObserverService> serv =
|
||||
@ -183,3 +207,34 @@ nsStyleSheetService::UnregisterSheet(nsIURI *sheetURI, uint32_t aSheetType)
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
size_t
|
||||
nsStyleSheetService::SizeOfIncludingThis(nsMallocSizeOfFun aMallocSizeOf)
|
||||
{
|
||||
if (!nsStyleSheetService::gInstance) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return nsStyleSheetService::gInstance->
|
||||
SizeOfIncludingThisHelper(aMallocSizeOf);
|
||||
}
|
||||
|
||||
static size_t
|
||||
SizeOfElementIncludingThis(nsIStyleSheet* aElement,
|
||||
nsMallocSizeOfFun aMallocSizeOf, void *aData)
|
||||
{
|
||||
return aElement->SizeOfIncludingThis(aMallocSizeOf);
|
||||
}
|
||||
|
||||
size_t
|
||||
nsStyleSheetService::SizeOfIncludingThisHelper(nsMallocSizeOfFun aMallocSizeOf) const
|
||||
{
|
||||
size_t n = aMallocSizeOf(this);
|
||||
n += mSheets[AGENT_SHEET].SizeOfExcludingThis(SizeOfElementIncludingThis,
|
||||
aMallocSizeOf);
|
||||
n += mSheets[USER_SHEET].SizeOfExcludingThis(SizeOfElementIncludingThis,
|
||||
aMallocSizeOf);
|
||||
return n;
|
||||
}
|
||||
|
||||
|
||||
|
@ -22,6 +22,8 @@ class nsICategoryManager;
|
||||
#define NS_STYLESHEETSERVICE_CONTRACTID \
|
||||
"@mozilla.org/content/style-sheet-service;1"
|
||||
|
||||
class nsIMemoryReporter;
|
||||
|
||||
class nsStyleSheetService MOZ_FINAL : public nsIStyleSheetService
|
||||
{
|
||||
public:
|
||||
@ -36,6 +38,8 @@ class nsStyleSheetService MOZ_FINAL : public nsIStyleSheetService
|
||||
nsCOMArray<nsIStyleSheet>* AgentStyleSheets() { return &mSheets[AGENT_SHEET]; }
|
||||
nsCOMArray<nsIStyleSheet>* UserStyleSheets() { return &mSheets[USER_SHEET]; }
|
||||
|
||||
static size_t SizeOfIncludingThis(nsMallocSizeOfFun aMallocSizeOf);
|
||||
|
||||
static nsStyleSheetService *gInstance;
|
||||
|
||||
private:
|
||||
@ -52,8 +56,12 @@ class nsStyleSheetService MOZ_FINAL : public nsIStyleSheetService
|
||||
// new sheet will be the last sheet in mSheets[aSheetType].
|
||||
NS_HIDDEN_(nsresult) LoadAndRegisterSheetInternal(nsIURI *aSheetURI,
|
||||
uint32_t aSheetType);
|
||||
|
||||
|
||||
size_t SizeOfIncludingThisHelper(nsMallocSizeOfFun aMallocSizeOf) const;
|
||||
|
||||
nsCOMArray<nsIStyleSheet> mSheets[2];
|
||||
|
||||
nsIMemoryReporter* mReporter;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -26,7 +26,7 @@ GetStylesheetCacheSize()
|
||||
LayoutStyleSheetCacheMallocSizeOf);
|
||||
}
|
||||
|
||||
NS_MEMORY_REPORTER_IMPLEMENT(Sheets,
|
||||
NS_MEMORY_REPORTER_IMPLEMENT(StyleSheetCache,
|
||||
"explicit/layout/style-sheet-cache",
|
||||
KIND_HEAP,
|
||||
nsIMemoryReporter::UNITS_BYTES,
|
||||
@ -161,11 +161,12 @@ nsLayoutStylesheetCache::Shutdown()
|
||||
size_t
|
||||
nsLayoutStylesheetCache::SizeOfIncludingThis(nsMallocSizeOfFun aMallocSizeOf)
|
||||
{
|
||||
if (nsLayoutStylesheetCache::gStyleCache) {
|
||||
return nsLayoutStylesheetCache::gStyleCache->
|
||||
SizeOfIncludingThisHelper(aMallocSizeOf);
|
||||
if (!nsLayoutStylesheetCache::gStyleCache) {
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
|
||||
return nsLayoutStylesheetCache::gStyleCache->
|
||||
SizeOfIncludingThisHelper(aMallocSizeOf);
|
||||
}
|
||||
|
||||
size_t
|
||||
@ -226,14 +227,14 @@ nsLayoutStylesheetCache::nsLayoutStylesheetCache()
|
||||
}
|
||||
NS_ASSERTION(mFullScreenOverrideSheet, "Could not load full-screen-override.css");
|
||||
|
||||
mSheetsReporter = new NS_MEMORY_REPORTER_NAME(Sheets);
|
||||
(void)::NS_RegisterMemoryReporter(mSheetsReporter);
|
||||
mReporter = new NS_MEMORY_REPORTER_NAME(StyleSheetCache);
|
||||
(void)::NS_RegisterMemoryReporter(mReporter);
|
||||
}
|
||||
|
||||
nsLayoutStylesheetCache::~nsLayoutStylesheetCache()
|
||||
{
|
||||
(void)::NS_UnregisterMemoryReporter(mSheetsReporter);
|
||||
mSheetsReporter = nullptr;
|
||||
(void)::NS_UnregisterMemoryReporter(mReporter);
|
||||
mReporter = nullptr;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -63,7 +63,7 @@ private:
|
||||
nsRefPtr<nsCSSStyleSheet> mQuirkSheet;
|
||||
nsRefPtr<nsCSSStyleSheet> mFullScreenOverrideSheet;
|
||||
|
||||
nsIMemoryReporter* mSheetsReporter;
|
||||
nsIMemoryReporter* mReporter;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user