mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-11 20:35:50 +00:00
Bug 830125 - Add the preferences memory reporter off a runnable, so as to avoid recursive GetService calls. r=njn
This commit is contained in:
parent
eec2430465
commit
e34f230a7f
@ -177,6 +177,8 @@ SizeOfObserverEntryExcludingThis(ValueObserverHashKey* aKey,
|
||||
int64_t
|
||||
Preferences::GetPreferencesMemoryUsed()
|
||||
{
|
||||
NS_ENSURE_TRUE(InitStaticMembers(), 0);
|
||||
|
||||
size_t n = 0;
|
||||
n += PreferencesMallocSizeOf(sPreferences);
|
||||
if (gHashTable.ops) {
|
||||
@ -209,6 +211,18 @@ NS_MEMORY_REPORTER_IMPLEMENT(Preferences,
|
||||
Preferences::GetPreferencesMemoryUsed,
|
||||
"Memory used by the preferences system.")
|
||||
|
||||
namespace {
|
||||
class AddPreferencesMemoryReporterRunnable : public nsRunnable
|
||||
{
|
||||
NS_IMETHOD Run()
|
||||
{
|
||||
nsCOMPtr<nsIMemoryReporter> reporter =
|
||||
new NS_MEMORY_REPORTER_NAME(Preferences);
|
||||
return NS_RegisterMemoryReporter(reporter);
|
||||
}
|
||||
};
|
||||
} // anonymous namespace
|
||||
|
||||
// static
|
||||
Preferences*
|
||||
Preferences::GetInstanceForService()
|
||||
@ -239,8 +253,13 @@ Preferences::GetInstanceForService()
|
||||
gObserverTable = new nsRefPtrHashtable<ValueObserverHashKey, ValueObserver>();
|
||||
gObserverTable->Init();
|
||||
|
||||
nsCOMPtr<nsIMemoryReporter> reporter(new NS_MEMORY_REPORTER_NAME(Preferences));
|
||||
NS_RegisterMemoryReporter(reporter);
|
||||
// Preferences;:GetInstanceForService() can be called from GetService(), and
|
||||
// NS_RegisterMemoryReporter calls GetService(nsIMemoryReporter). To avoid a
|
||||
// potential recursive GetService() call, we can't register the memory
|
||||
// reporter here; instead, do it off a runnable.
|
||||
nsRefPtr<AddPreferencesMemoryReporterRunnable> runnable =
|
||||
new AddPreferencesMemoryReporterRunnable();
|
||||
NS_DispatchToMainThread(runnable);
|
||||
|
||||
NS_ADDREF(sPreferences);
|
||||
return sPreferences;
|
||||
|
Loading…
Reference in New Issue
Block a user