/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set ts=8 sts=2 et sw=2 tw=80: */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "nsIMemoryReporter.h" #include "mozilla/Mutex.h" #include "nsTHashtable.h" #include "nsHashKeys.h" using mozilla::Mutex; class nsMemoryReporterManager : public nsIMemoryReporterManager { public: NS_DECL_THREADSAFE_ISUPPORTS NS_DECL_NSIMEMORYREPORTERMANAGER nsMemoryReporterManager(); virtual ~nsMemoryReporterManager(); // Functions that (a) implement distinguished amounts, and (b) are outside of // this module. struct AmountFns { mozilla::InfallibleAmountFn mJSMainRuntimeGCHeap; mozilla::InfallibleAmountFn mJSMainRuntimeTemporaryPeak; mozilla::InfallibleAmountFn mJSMainRuntimeCompartmentsSystem; mozilla::InfallibleAmountFn mJSMainRuntimeCompartmentsUser; mozilla::InfallibleAmountFn mImagesContentUsedUncompressed; mozilla::InfallibleAmountFn mStorageSQLite; mozilla::InfallibleAmountFn mLowMemoryEventsVirtual; mozilla::InfallibleAmountFn mLowMemoryEventsPhysical; mozilla::InfallibleAmountFn mGhostWindows; }; AmountFns mAmountFns; private: nsresult RegisterReporterHelper(nsIMemoryReporter *aReporter, bool aForce); nsTHashtable mReporters; Mutex mMutex; bool mIsRegistrationBlocked; }; #define NS_MEMORY_REPORTER_MANAGER_CID \ { 0xfb97e4f5, 0x32dd, 0x497a, \ { 0xba, 0xa2, 0x7d, 0x1e, 0x55, 0x7, 0x99, 0x10 } }