mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1246855 (part 2) - Measure CompartmentPrivates during memory reporting. r=terrence.
This also expands the coverage to include the hash table elements in the mWrappedJSMap.
This commit is contained in:
parent
b1264afac3
commit
c1d7c00a37
@ -713,7 +713,8 @@ struct CompartmentStats
|
||||
macro(Other, MallocHeap, regexpCompartment) \
|
||||
macro(Other, MallocHeap, savedStacksSet) \
|
||||
macro(Other, MallocHeap, nonSyntacticLexicalScopesTable) \
|
||||
macro(Other, MallocHeap, jitCompartment)
|
||||
macro(Other, MallocHeap, jitCompartment) \
|
||||
macro(Other, MallocHeap, privateData)
|
||||
|
||||
CompartmentStats()
|
||||
: FOR_EACH_SIZE(ZERO_SIZE)
|
||||
|
@ -717,6 +717,13 @@ JS_SetDestroyCompartmentCallback(JSRuntime* rt, JSDestroyCompartmentCallback cal
|
||||
rt->destroyCompartmentCallback = callback;
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(void)
|
||||
JS_SetSizeOfIncludingThisCompartmentCallback(JSRuntime* rt,
|
||||
JSSizeOfIncludingThisCompartmentCallback callback)
|
||||
{
|
||||
rt->sizeOfIncludingThisCompartmentCallback = callback;
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(void)
|
||||
JS_SetDestroyZoneCallback(JSRuntime* rt, JSZoneCallback callback)
|
||||
{
|
||||
|
@ -687,6 +687,10 @@ struct JSWrapObjectCallbacks
|
||||
typedef void
|
||||
(* JSDestroyCompartmentCallback)(JSFreeOp* fop, JSCompartment* compartment);
|
||||
|
||||
typedef size_t
|
||||
(* JSSizeOfIncludingThisCompartmentCallback)(mozilla::MallocSizeOf mallocSizeOf,
|
||||
JSCompartment* compartment);
|
||||
|
||||
typedef void
|
||||
(* JSZoneCallback)(JS::Zone* zone);
|
||||
|
||||
@ -1315,6 +1319,10 @@ JS_GetImplementationVersion(void);
|
||||
extern JS_PUBLIC_API(void)
|
||||
JS_SetDestroyCompartmentCallback(JSRuntime* rt, JSDestroyCompartmentCallback callback);
|
||||
|
||||
extern JS_PUBLIC_API(void)
|
||||
JS_SetSizeOfIncludingThisCompartmentCallback(JSRuntime* rt,
|
||||
JSSizeOfIncludingThisCompartmentCallback callback);
|
||||
|
||||
extern JS_PUBLIC_API(void)
|
||||
JS_SetDestroyZoneCallback(JSRuntime* rt, JSZoneCallback callback);
|
||||
|
||||
|
@ -1114,7 +1114,8 @@ JSCompartment::addSizeOfIncludingThis(mozilla::MallocSizeOf mallocSizeOf,
|
||||
size_t* regexpCompartment,
|
||||
size_t* savedStacksSet,
|
||||
size_t* nonSyntacticLexicalScopesArg,
|
||||
size_t* jitCompartment)
|
||||
size_t* jitCompartment,
|
||||
size_t* privateData)
|
||||
{
|
||||
*compartmentObject += mallocSizeOf(this);
|
||||
objectGroups.addSizeOfExcludingThis(mallocSizeOf, tiAllocationSiteTables,
|
||||
@ -1134,6 +1135,10 @@ JSCompartment::addSizeOfIncludingThis(mozilla::MallocSizeOf mallocSizeOf,
|
||||
*nonSyntacticLexicalScopesArg += nonSyntacticLexicalScopes_->sizeOfIncludingThis(mallocSizeOf);
|
||||
if (jitCompartment_)
|
||||
*jitCompartment += jitCompartment_->sizeOfIncludingThis(mallocSizeOf);
|
||||
|
||||
auto callback = runtime_->sizeOfIncludingThisCompartmentCallback;
|
||||
if (callback)
|
||||
*privateData += callback(mallocSizeOf, this);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -412,7 +412,8 @@ struct JSCompartment
|
||||
size_t* regexpCompartment,
|
||||
size_t* savedStacksSet,
|
||||
size_t* nonSyntacticLexicalScopes,
|
||||
size_t* jitCompartment);
|
||||
size_t* jitCompartment,
|
||||
size_t* privateData);
|
||||
|
||||
/*
|
||||
* Shared scope property tree, and arena-pool for allocating its nodes.
|
||||
|
@ -344,7 +344,8 @@ StatsCompartmentCallback(JSRuntime* rt, void* data, JSCompartment* compartment)
|
||||
&cStats.regexpCompartment,
|
||||
&cStats.savedStacksSet,
|
||||
&cStats.nonSyntacticLexicalScopesTable,
|
||||
&cStats.jitCompartment);
|
||||
&cStats.jitCompartment,
|
||||
&cStats.privateData);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -166,6 +166,7 @@ JSRuntime::JSRuntime(JSRuntime* parentRuntime)
|
||||
nativeStackBase(GetNativeStackBase()),
|
||||
cxCallback(nullptr),
|
||||
destroyCompartmentCallback(nullptr),
|
||||
sizeOfIncludingThisCompartmentCallback(nullptr),
|
||||
destroyZoneCallback(nullptr),
|
||||
sweepZoneCallback(nullptr),
|
||||
compartmentNameCallback(nullptr),
|
||||
|
@ -1058,6 +1058,9 @@ struct JSRuntime : public JS::shadow::Runtime,
|
||||
/* Compartment destroy callback. */
|
||||
JSDestroyCompartmentCallback destroyCompartmentCallback;
|
||||
|
||||
/* Compartment memory reporting callback. */
|
||||
JSSizeOfIncludingThisCompartmentCallback sizeOfIncludingThisCompartmentCallback;
|
||||
|
||||
/* Zone destroy callback. */
|
||||
JSZoneCallback destroyZoneCallback;
|
||||
|
||||
|
@ -585,6 +585,13 @@ CompartmentDestroyedCallback(JSFreeOp* fop, JSCompartment* compartment)
|
||||
JS_SetCompartmentPrivate(compartment, nullptr);
|
||||
}
|
||||
|
||||
static size_t
|
||||
CompartmentSizeOfIncludingThisCallback(MallocSizeOf mallocSizeOf, JSCompartment* compartment)
|
||||
{
|
||||
CompartmentPrivate* priv = CompartmentPrivate::Get(compartment);
|
||||
return priv ? priv->SizeOfIncludingThis(mallocSizeOf) : 0;
|
||||
}
|
||||
|
||||
void XPCJSRuntime::TraceNativeBlackRoots(JSTracer* trc)
|
||||
{
|
||||
// Skip this part if XPConnect is shutting down. We get into
|
||||
@ -1516,7 +1523,10 @@ XPCJSRuntime::SizeOfIncludingThis(MallocSizeOf mallocSizeOf)
|
||||
size_t
|
||||
CompartmentPrivate::SizeOfIncludingThis(MallocSizeOf mallocSizeOf)
|
||||
{
|
||||
return mallocSizeOf(this) + mWrappedJSMap->SizeOfWrappedJS(mallocSizeOf);
|
||||
size_t n = mallocSizeOf(this);
|
||||
n += mWrappedJSMap->SizeOfIncludingThis(mallocSizeOf);
|
||||
n += mWrappedJSMap->SizeOfWrappedJS(mallocSizeOf);
|
||||
return n;
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
@ -2373,6 +2383,11 @@ ReportCompartmentStats(const JS::CompartmentStats& cStats,
|
||||
cStats.jitCompartment,
|
||||
"The JIT compartment.");
|
||||
|
||||
ZCREPORT_BYTES(cJSPathPrefix + NS_LITERAL_CSTRING("private-data"),
|
||||
cStats.privateData,
|
||||
"Extra data attached to the compartment by XPConnect, including "
|
||||
"its wrapped-js.");
|
||||
|
||||
if (sundriesGCHeap > 0) {
|
||||
// We deliberately don't use ZCREPORT_GC_BYTES here.
|
||||
REPORT_GC_BYTES(cJSPathPrefix + NS_LITERAL_CSTRING("sundries/gc-heap"),
|
||||
@ -3447,6 +3462,7 @@ XPCJSRuntime::XPCJSRuntime(nsXPConnect* aXPConnect)
|
||||
|
||||
JS_SetErrorReporter(runtime, xpc::SystemErrorReporter);
|
||||
JS_SetDestroyCompartmentCallback(runtime, CompartmentDestroyedCallback);
|
||||
JS_SetSizeOfIncludingThisCompartmentCallback(runtime, CompartmentSizeOfIncludingThisCallback);
|
||||
JS_SetCompartmentNameCallback(runtime, CompartmentNameCallback);
|
||||
mPrevGCSliceCallback = JS::SetGCSliceCallback(runtime, GCSliceCallback);
|
||||
JS_AddFinalizeCallback(runtime, FinalizeCallback, nullptr);
|
||||
|
Loading…
Reference in New Issue
Block a user