mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 946870 - make the cookie service report its memory; r=ehsan,njn
This commit is contained in:
parent
17d3c88a1e
commit
af8818a3c9
@ -111,6 +111,14 @@ nsCookie::Create(const nsACString &aName,
|
||||
aIsSession, aIsSecure, aIsHttpOnly);
|
||||
}
|
||||
|
||||
size_t
|
||||
nsCookie::SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const
|
||||
{
|
||||
// There is no need to measure the sizes of the individual string
|
||||
// members, since the strings are stored in-line with the nsCookie.
|
||||
return aMallocSizeOf(this);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* nsCookie:
|
||||
* xpcom impl
|
||||
|
@ -10,6 +10,8 @@
|
||||
#include "nsICookie2.h"
|
||||
#include "nsString.h"
|
||||
|
||||
#include "mozilla/MemoryReporting.h"
|
||||
|
||||
/**
|
||||
* The nsCookie class is the main cookie storage medium for use within cookie
|
||||
* code. It implements nsICookie2, which extends nsICookie, a frozen interface
|
||||
@ -76,6 +78,8 @@ class nsCookie : public nsICookie2
|
||||
|
||||
virtual ~nsCookie() {}
|
||||
|
||||
size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
|
||||
|
||||
// fast (inline, non-xpcom) getters
|
||||
inline const nsDependentCString Name() const { return nsDependentCString(mName, mValue - 1); }
|
||||
inline const nsDependentCString Value() const { return nsDependentCString(mValue, mHost - 1); }
|
||||
@ -104,6 +108,8 @@ class nsCookie : public nsICookie2
|
||||
// so we save on the overhead of using nsCStrings. However, we
|
||||
// store a terminating null for each string, so we can hand them
|
||||
// out as nsAFlatCStrings.
|
||||
//
|
||||
// Please update SizeOfIncludingThis if this strategy changes.
|
||||
const char *mName;
|
||||
const char *mValue;
|
||||
const char *mHost;
|
||||
|
@ -598,6 +598,70 @@ NS_IMPL_ISUPPORTS1(AppClearDataObserver, nsIObserver)
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
size_t
|
||||
nsCookieKey::SizeOfExcludingThis(MallocSizeOf aMallocSizeOf) const
|
||||
{
|
||||
return mBaseDomain.SizeOfExcludingThisIfUnshared(aMallocSizeOf);
|
||||
}
|
||||
|
||||
size_t
|
||||
nsCookieEntry::SizeOfExcludingThis(MallocSizeOf aMallocSizeOf) const
|
||||
{
|
||||
size_t amount = nsCookieKey::SizeOfExcludingThis(aMallocSizeOf);
|
||||
|
||||
amount += mCookies.SizeOfExcludingThis(aMallocSizeOf);
|
||||
for (uint32_t i = 0; i < mCookies.Length(); ++i) {
|
||||
amount += mCookies[i]->SizeOfIncludingThis(aMallocSizeOf);
|
||||
}
|
||||
|
||||
return amount;
|
||||
}
|
||||
|
||||
static size_t
|
||||
HostTableEntrySizeOfExcludingThis(nsCookieEntry *aEntry,
|
||||
MallocSizeOf aMallocSizeOf,
|
||||
void *arg)
|
||||
{
|
||||
return aEntry->SizeOfExcludingThis(aMallocSizeOf);
|
||||
}
|
||||
|
||||
size_t
|
||||
CookieDomainTuple::SizeOfExcludingThis(MallocSizeOf aMallocSizeOf) const
|
||||
{
|
||||
size_t amount = 0;
|
||||
|
||||
amount += key.SizeOfExcludingThis(aMallocSizeOf);
|
||||
amount += cookie->SizeOfIncludingThis(aMallocSizeOf);
|
||||
|
||||
return amount;
|
||||
}
|
||||
|
||||
static size_t
|
||||
ReadSetEntrySizeOfExcludingThis(nsCookieKey *aEntry,
|
||||
MallocSizeOf aMallocSizeOf,
|
||||
void *)
|
||||
{
|
||||
return aEntry->SizeOfExcludingThis(aMallocSizeOf);
|
||||
}
|
||||
|
||||
size_t
|
||||
DBState::SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const
|
||||
{
|
||||
size_t amount = 0;
|
||||
|
||||
amount += aMallocSizeOf(this);
|
||||
amount += hostTable.SizeOfExcludingThis(HostTableEntrySizeOfExcludingThis,
|
||||
aMallocSizeOf);
|
||||
amount += hostArray.SizeOfExcludingThis(aMallocSizeOf);
|
||||
for (uint32_t i = 0; i < hostArray.Length(); ++i) {
|
||||
amount += hostArray[i].SizeOfExcludingThis(aMallocSizeOf);
|
||||
}
|
||||
amount += readSet.SizeOfExcludingThis(ReadSetEntrySizeOfExcludingThis,
|
||||
aMallocSizeOf);
|
||||
|
||||
return amount;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* nsCookieService impl:
|
||||
* singleton instance ctor/dtor methods
|
||||
@ -653,15 +717,17 @@ nsCookieService::AppClearDataObserverInit()
|
||||
* public methods
|
||||
******************************************************************************/
|
||||
|
||||
NS_IMPL_ISUPPORTS5(nsCookieService,
|
||||
nsICookieService,
|
||||
nsICookieManager,
|
||||
nsICookieManager2,
|
||||
nsIObserver,
|
||||
nsISupportsWeakReference)
|
||||
NS_IMPL_ISUPPORTS_INHERITED5(nsCookieService, MemoryUniReporter,
|
||||
nsICookieService,
|
||||
nsICookieManager,
|
||||
nsICookieManager2,
|
||||
nsIObserver,
|
||||
nsISupportsWeakReference)
|
||||
|
||||
nsCookieService::nsCookieService()
|
||||
: mDBState(nullptr)
|
||||
: MemoryUniReporter("explicit/cookie-service", KIND_HEAP, UNITS_BYTES,
|
||||
"Memory used by the cookie service.")
|
||||
, mDBState(nullptr)
|
||||
, mCookieBehavior(BEHAVIOR_ACCEPT)
|
||||
, mThirdPartySession(false)
|
||||
, mMaxNumberOfCookies(kMaxNumberOfCookies)
|
||||
@ -700,6 +766,8 @@ nsCookieService::Init()
|
||||
// Init our default, and possibly private DBStates.
|
||||
InitDBStates();
|
||||
|
||||
RegisterWeakMemoryReporter(this);
|
||||
|
||||
mObserverService = mozilla::services::GetObserverService();
|
||||
NS_ENSURE_STATE(mObserverService);
|
||||
mObserverService->AddObserver(this, "profile-before-change", true);
|
||||
@ -1480,6 +1548,8 @@ nsCookieService::~nsCookieService()
|
||||
{
|
||||
CloseDBStates();
|
||||
|
||||
UnregisterWeakMemoryReporter(this);
|
||||
|
||||
gCookieService = nullptr;
|
||||
}
|
||||
|
||||
@ -4269,3 +4339,23 @@ nsCookieService::UpdateCookieInList(nsCookie *aCookie,
|
||||
}
|
||||
}
|
||||
|
||||
size_t
|
||||
nsCookieService::SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const
|
||||
{
|
||||
size_t n = aMallocSizeOf(this);
|
||||
|
||||
if (mDefaultDBState) {
|
||||
n += mDefaultDBState->SizeOfIncludingThis(aMallocSizeOf);
|
||||
}
|
||||
if (mPrivateDBState) {
|
||||
n += mPrivateDBState->SizeOfIncludingThis(aMallocSizeOf);
|
||||
}
|
||||
|
||||
return n;
|
||||
}
|
||||
|
||||
int64_t
|
||||
nsCookieService::Amount()
|
||||
{
|
||||
return SizeOfIncludingThis(MallocSizeOf);
|
||||
}
|
||||
|
@ -16,6 +16,7 @@
|
||||
#include "nsString.h"
|
||||
#include "nsAutoPtr.h"
|
||||
#include "nsHashKeys.h"
|
||||
#include "nsIMemoryReporter.h"
|
||||
#include "nsTHashtable.h"
|
||||
#include "mozIStorageStatement.h"
|
||||
#include "mozIStorageAsyncStatement.h"
|
||||
@ -25,6 +26,8 @@
|
||||
#include "mozIStorageCompletionCallback.h"
|
||||
#include "mozIStorageStatementCallback.h"
|
||||
|
||||
#include "mozilla/MemoryReporting.h"
|
||||
|
||||
class nsICookiePermission;
|
||||
class nsIEffectiveTLDService;
|
||||
class nsIIDNService;
|
||||
@ -101,6 +104,8 @@ public:
|
||||
return mozilla::HashString(temp);
|
||||
}
|
||||
|
||||
size_t SizeOfExcludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
|
||||
|
||||
enum { ALLOW_MEMMOVE = true };
|
||||
|
||||
nsCString mBaseDomain;
|
||||
@ -133,6 +138,8 @@ class nsCookieEntry : public nsCookieKey
|
||||
|
||||
inline ArrayType& GetCookies() { return mCookies; }
|
||||
|
||||
size_t SizeOfExcludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
|
||||
|
||||
private:
|
||||
ArrayType mCookies;
|
||||
};
|
||||
@ -142,6 +149,8 @@ struct CookieDomainTuple
|
||||
{
|
||||
nsCookieKey key;
|
||||
nsRefPtr<nsCookie> cookie;
|
||||
|
||||
size_t SizeOfExcludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
|
||||
};
|
||||
|
||||
// encapsulates in-memory and on-disk DB states, so we can
|
||||
@ -154,6 +163,8 @@ struct DBState
|
||||
|
||||
NS_INLINE_DECL_REFCOUNTING(DBState)
|
||||
|
||||
size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
|
||||
|
||||
// State of the database connection.
|
||||
enum CorruptFlag {
|
||||
OK, // normal
|
||||
@ -220,14 +231,19 @@ enum OpenDBResult
|
||||
* class declaration
|
||||
******************************************************************************/
|
||||
|
||||
class nsCookieService : public nsICookieService
|
||||
class nsCookieService : public mozilla::MemoryUniReporter
|
||||
, public nsICookieService
|
||||
, public nsICookieManager2
|
||||
, public nsIObserver
|
||||
, public nsSupportsWeakReference
|
||||
{
|
||||
private:
|
||||
int64_t Amount() MOZ_OVERRIDE;
|
||||
size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
|
||||
|
||||
public:
|
||||
// nsISupports
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_DECL_ISUPPORTS_INHERITED
|
||||
NS_DECL_NSIOBSERVER
|
||||
NS_DECL_NSICOOKIESERVICE
|
||||
NS_DECL_NSICOOKIEMANAGER
|
||||
|
Loading…
Reference in New Issue
Block a user