mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-12 21:05:36 +00:00
Bug 1283855
part 12 - Make some GC APIs take JSContext instead of JSRuntime. r=sfink
This commit is contained in:
parent
4ba1239131
commit
c8334f438a
@ -2309,7 +2309,7 @@ SetMemoryHighWaterMarkPrefChangedCallback(const char* aPrefName, void* aClosure)
|
||||
{
|
||||
int32_t highwatermark = Preferences::GetInt(aPrefName, 128);
|
||||
|
||||
JS_SetGCParameter(sRuntime, JSGC_MAX_MALLOC_BYTES,
|
||||
JS_SetGCParameter(JS_GetContext(sRuntime), JSGC_MAX_MALLOC_BYTES,
|
||||
highwatermark * 1024L * 1024L);
|
||||
}
|
||||
|
||||
@ -2319,7 +2319,7 @@ SetMemoryMaxPrefChangedCallback(const char* aPrefName, void* aClosure)
|
||||
int32_t pref = Preferences::GetInt(aPrefName, -1);
|
||||
// handle overflow and negative pref values
|
||||
uint32_t max = (pref <= 0 || pref >= 0x1000) ? -1 : (uint32_t)pref * 1024 * 1024;
|
||||
JS_SetGCParameter(sRuntime, JSGC_MAX_BYTES, max);
|
||||
JS_SetGCParameter(JS_GetContext(sRuntime), JSGC_MAX_BYTES, max);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -2335,7 +2335,7 @@ SetMemoryGCModePrefChangedCallback(const char* aPrefName, void* aClosure)
|
||||
} else {
|
||||
mode = JSGC_MODE_GLOBAL;
|
||||
}
|
||||
JS_SetGCParameter(sRuntime, JSGC_MODE, mode);
|
||||
JS_SetGCParameter(JS_GetContext(sRuntime), JSGC_MODE, mode);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -2344,14 +2344,14 @@ SetMemoryGCSliceTimePrefChangedCallback(const char* aPrefName, void* aClosure)
|
||||
int32_t pref = Preferences::GetInt(aPrefName, -1);
|
||||
// handle overflow and negative pref values
|
||||
if (pref > 0 && pref < 100000)
|
||||
JS_SetGCParameter(sRuntime, JSGC_SLICE_TIME_BUDGET, pref);
|
||||
JS_SetGCParameter(JS_GetContext(sRuntime), JSGC_SLICE_TIME_BUDGET, pref);
|
||||
}
|
||||
|
||||
static void
|
||||
SetMemoryGCCompactingPrefChangedCallback(const char* aPrefName, void* aClosure)
|
||||
{
|
||||
bool pref = Preferences::GetBool(aPrefName);
|
||||
JS_SetGCParameter(sRuntime, JSGC_COMPACTING_ENABLED, pref);
|
||||
JS_SetGCParameter(JS_GetContext(sRuntime), JSGC_COMPACTING_ENABLED, pref);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -2360,28 +2360,28 @@ SetMemoryGCPrefChangedCallback(const char* aPrefName, void* aClosure)
|
||||
int32_t pref = Preferences::GetInt(aPrefName, -1);
|
||||
// handle overflow and negative pref values
|
||||
if (pref >= 0 && pref < 10000)
|
||||
JS_SetGCParameter(sRuntime, (JSGCParamKey)(intptr_t)aClosure, pref);
|
||||
JS_SetGCParameter(JS_GetContext(sRuntime), (JSGCParamKey)(intptr_t)aClosure, pref);
|
||||
}
|
||||
|
||||
static void
|
||||
SetMemoryGCDynamicHeapGrowthPrefChangedCallback(const char* aPrefName, void* aClosure)
|
||||
{
|
||||
bool pref = Preferences::GetBool(aPrefName);
|
||||
JS_SetGCParameter(sRuntime, JSGC_DYNAMIC_HEAP_GROWTH, pref);
|
||||
JS_SetGCParameter(JS_GetContext(sRuntime), JSGC_DYNAMIC_HEAP_GROWTH, pref);
|
||||
}
|
||||
|
||||
static void
|
||||
SetMemoryGCDynamicMarkSlicePrefChangedCallback(const char* aPrefName, void* aClosure)
|
||||
{
|
||||
bool pref = Preferences::GetBool(aPrefName);
|
||||
JS_SetGCParameter(sRuntime, JSGC_DYNAMIC_MARK_SLICE, pref);
|
||||
JS_SetGCParameter(JS_GetContext(sRuntime), JSGC_DYNAMIC_MARK_SLICE, pref);
|
||||
}
|
||||
|
||||
static void
|
||||
SetMemoryGCRefreshFrameSlicesEnabledPrefChangedCallback(const char* aPrefName, void* aClosure)
|
||||
{
|
||||
bool pref = Preferences::GetBool(aPrefName);
|
||||
JS_SetGCParameter(sRuntime, JSGC_REFRESH_FRAME_SLICES_ENABLED, pref);
|
||||
JS_SetGCParameter(JS_GetContext(sRuntime), JSGC_REFRESH_FRAME_SLICES_ENABLED, pref);
|
||||
}
|
||||
|
||||
|
||||
|
@ -767,7 +767,7 @@ InitJSContextForWorker(WorkerPrivate* aWorkerPrivate, JSRuntime* aRuntime)
|
||||
const JSSettings::JSGCSetting& setting = gcSettings[index];
|
||||
if (setting.IsSet()) {
|
||||
NS_ASSERTION(setting.value, "Can't handle 0 values!");
|
||||
JS_SetGCParameter(aRuntime, setting.key, setting.value);
|
||||
JS_SetGCParameter(workerCx, setting.key, setting.value);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6363,7 +6363,7 @@ WorkerPrivate::UpdateJSWorkerMemoryParameterInternal(JSContext* aCx,
|
||||
// supported though. We really need some way to revert to a default value
|
||||
// here.
|
||||
if (aValue) {
|
||||
JS_SetGCParameter(JS_GetRuntime(aCx), aKey, aValue);
|
||||
JS_SetGCParameter(aCx, aKey, aValue);
|
||||
}
|
||||
|
||||
for (uint32_t index = 0; index < mChildWorkers.Length(); index++) {
|
||||
|
@ -3349,13 +3349,13 @@ SetGCCallback(JSContext* cx, unsigned argc, Value* vp)
|
||||
}
|
||||
|
||||
if (gcCallback::prevMajorGC) {
|
||||
JS_SetGCCallback(cx->runtime(), nullptr, nullptr);
|
||||
JS_SetGCCallback(cx, nullptr, nullptr);
|
||||
js_delete<gcCallback::MajorGC>(gcCallback::prevMajorGC);
|
||||
gcCallback::prevMajorGC = nullptr;
|
||||
}
|
||||
|
||||
if (gcCallback::prevMinorGC) {
|
||||
JS_SetGCCallback(cx->runtime(), nullptr, nullptr);
|
||||
JS_SetGCCallback(cx, nullptr, nullptr);
|
||||
js_delete<gcCallback::MinorGC>(gcCallback::prevMinorGC);
|
||||
gcCallback::prevMinorGC = nullptr;
|
||||
}
|
||||
@ -3369,7 +3369,7 @@ SetGCCallback(JSContext* cx, unsigned argc, Value* vp)
|
||||
|
||||
info->phases = phases;
|
||||
info->active = true;
|
||||
JS_SetGCCallback(cx->runtime(), gcCallback::minorGC, info);
|
||||
JS_SetGCCallback(cx, gcCallback::minorGC, info);
|
||||
} else if (strcmp(action.ptr(), "majorGC") == 0) {
|
||||
if (!JS_GetProperty(cx, opts, "depth", &v))
|
||||
return false;
|
||||
@ -3391,7 +3391,7 @@ SetGCCallback(JSContext* cx, unsigned argc, Value* vp)
|
||||
|
||||
info->phases = phases;
|
||||
info->depth = depth;
|
||||
JS_SetGCCallback(cx->runtime(), gcCallback::majorGC, info);
|
||||
JS_SetGCCallback(cx, gcCallback::majorGC, info);
|
||||
} else {
|
||||
JS_ReportError(cx, "Unknown GC callback action");
|
||||
return false;
|
||||
|
@ -68,10 +68,11 @@ main(int argc, const char** argv)
|
||||
{
|
||||
if (!JS_Init()) return 1;
|
||||
JSRuntime* runtime = checkPtr(JS_NewRuntime(1024 * 1024));
|
||||
JS_SetGCParameter(runtime, JSGC_MAX_BYTES, 0xffffffff);
|
||||
JSContext* cx = JS_GetContext(runtime);
|
||||
|
||||
JS_SetGCParameter(cx, JSGC_MAX_BYTES, 0xffffffff);
|
||||
JS_SetNativeStackQuota(runtime, 5000000);
|
||||
|
||||
JSContext* cx = JS_GetContext(runtime);
|
||||
checkBool(JS::InitSelfHostedCode(cx));
|
||||
JS::SetWarningReporter(cx, reportWarning);
|
||||
|
||||
|
@ -11,7 +11,7 @@ static bool IsCompartmentGCBuffer[BufferSize];
|
||||
|
||||
BEGIN_TEST(testGCFinalizeCallback)
|
||||
{
|
||||
JS_SetGCParameter(rt, JSGC_MODE, JSGC_MODE_INCREMENTAL);
|
||||
JS_SetGCParameter(cx, JSGC_MODE, JSGC_MODE_INCREMENTAL);
|
||||
|
||||
/* Full GC, non-incremental. */
|
||||
FinalizeCalls = 0;
|
||||
|
@ -162,7 +162,7 @@ BEGIN_TEST(testIncrementalRoots)
|
||||
// descendants. It shouldn't make it all the way through (it gets a budget
|
||||
// of 1000, and the graph is about 3000 objects deep).
|
||||
js::SliceBudget budget(js::WorkBudget(1000));
|
||||
JS_SetGCParameter(rt, JSGC_MODE, JSGC_MODE_INCREMENTAL);
|
||||
JS_SetGCParameter(cx, JSGC_MODE, JSGC_MODE_INCREMENTAL);
|
||||
rt->gc.startDebugGC(GC_NORMAL, budget);
|
||||
|
||||
// We'd better be between iGC slices now. There's always a risk that
|
||||
|
@ -22,7 +22,7 @@ virtual JSRuntime * createRuntime() override
|
||||
JSRuntime* rt = JS_NewRuntime(0);
|
||||
if (!rt)
|
||||
return nullptr;
|
||||
JS_SetGCParameter(rt, JSGC_MAX_BYTES, (uint32_t)-1);
|
||||
JS_SetGCParameter(JS_GetContext(rt), JSGC_MAX_BYTES, (uint32_t)-1);
|
||||
setNativeStackQuota(rt);
|
||||
return rt;
|
||||
}
|
||||
|
@ -70,7 +70,7 @@ END_TEST(testWeakMap_basicOperations)
|
||||
|
||||
BEGIN_TEST(testWeakMap_keyDelegates)
|
||||
{
|
||||
JS_SetGCParameter(rt, JSGC_MODE, JSGC_MODE_INCREMENTAL);
|
||||
JS_SetGCParameter(cx, JSGC_MODE, JSGC_MODE_INCREMENTAL);
|
||||
JS_GC(rt);
|
||||
JS::RootedObject map(cx, JS::NewWeakMapObject(cx));
|
||||
CHECK(map);
|
||||
|
@ -1349,10 +1349,10 @@ JS_MaybeGC(JSContext* cx)
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(void)
|
||||
JS_SetGCCallback(JSRuntime* rt, JSGCCallback cb, void* data)
|
||||
JS_SetGCCallback(JSContext* cx, JSGCCallback cb, void* data)
|
||||
{
|
||||
AssertHeapIsIdle(rt);
|
||||
rt->gc.setGCCallback(cb, data);
|
||||
AssertHeapIsIdle(cx);
|
||||
cx->gc.setGCCallback(cb, data);
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(void)
|
||||
@ -1418,11 +1418,11 @@ JS_UpdateWeakPointerAfterGCUnbarriered(JSObject** objp)
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(void)
|
||||
JS_SetGCParameter(JSRuntime* rt, JSGCParamKey key, uint32_t value)
|
||||
JS_SetGCParameter(JSContext* cx, JSGCParamKey key, uint32_t value)
|
||||
{
|
||||
rt->gc.waitBackgroundSweepEnd();
|
||||
AutoLockGC lock(rt);
|
||||
MOZ_ALWAYS_TRUE(rt->gc.setParameter(key, value, lock));
|
||||
cx->gc.waitBackgroundSweepEnd();
|
||||
AutoLockGC lock(cx);
|
||||
MOZ_ALWAYS_TRUE(cx->gc.setParameter(key, value, lock));
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(uint32_t)
|
||||
@ -1439,7 +1439,7 @@ struct JSGCConfig {
|
||||
};
|
||||
|
||||
JS_PUBLIC_API(void)
|
||||
JS_SetGCParametersBasedOnAvailableMemory(JSRuntime* rt, uint32_t availMem)
|
||||
JS_SetGCParametersBasedOnAvailableMemory(JSContext* cx, uint32_t availMem)
|
||||
{
|
||||
static const JSGCConfig minimal[NumGCConfigs] = {
|
||||
{JSGC_MAX_MALLOC_BYTES, 6 * 1024 * 1024},
|
||||
@ -1481,7 +1481,7 @@ JS_SetGCParametersBasedOnAvailableMemory(JSRuntime* rt, uint32_t availMem)
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < NumGCConfigs; i++)
|
||||
JS_SetGCParameter(rt, config[i].key, config[i].value);
|
||||
JS_SetGCParameter(cx, config[i].key, config[i].value);
|
||||
}
|
||||
|
||||
|
||||
@ -6499,11 +6499,11 @@ JSAutoByteString::encodeLatin1(ExclusiveContext* cx, JSString* str)
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(void)
|
||||
JS::SetLargeAllocationFailureCallback(JSRuntime* rt, JS::LargeAllocationFailureCallback lafc,
|
||||
JS::SetLargeAllocationFailureCallback(JSContext* cx, JS::LargeAllocationFailureCallback lafc,
|
||||
void* data)
|
||||
{
|
||||
rt->largeAllocationFailureCallback = lafc;
|
||||
rt->largeAllocationFailureCallbackData = data;
|
||||
cx->largeAllocationFailureCallback = lafc;
|
||||
cx->largeAllocationFailureCallbackData = data;
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(void)
|
||||
|
@ -1614,7 +1614,7 @@ extern JS_PUBLIC_API(void)
|
||||
JS_MaybeGC(JSContext* cx);
|
||||
|
||||
extern JS_PUBLIC_API(void)
|
||||
JS_SetGCCallback(JSRuntime* rt, JSGCCallback cb, void* data);
|
||||
JS_SetGCCallback(JSContext* cx, JSGCCallback cb, void* data);
|
||||
|
||||
extern JS_PUBLIC_API(void)
|
||||
JS_SetObjectsTenuredCallback(JSContext* cx, JSObjectsTenuredCallback cb,
|
||||
@ -1764,13 +1764,13 @@ typedef enum JSGCParamKey {
|
||||
} JSGCParamKey;
|
||||
|
||||
extern JS_PUBLIC_API(void)
|
||||
JS_SetGCParameter(JSRuntime* rt, JSGCParamKey key, uint32_t value);
|
||||
JS_SetGCParameter(JSContext* cx, JSGCParamKey key, uint32_t value);
|
||||
|
||||
extern JS_PUBLIC_API(uint32_t)
|
||||
JS_GetGCParameter(JSRuntime* rt, JSGCParamKey key);
|
||||
|
||||
extern JS_PUBLIC_API(void)
|
||||
JS_SetGCParametersBasedOnAvailableMemory(JSRuntime* rt, uint32_t availMem);
|
||||
JS_SetGCParametersBasedOnAvailableMemory(JSContext* cx, uint32_t availMem);
|
||||
|
||||
/**
|
||||
* Create a new JSString whose chars member refers to external memory, i.e.,
|
||||
@ -5875,7 +5875,7 @@ typedef void
|
||||
(* LargeAllocationFailureCallback)(void* data);
|
||||
|
||||
extern JS_PUBLIC_API(void)
|
||||
SetLargeAllocationFailureCallback(JSRuntime* rt, LargeAllocationFailureCallback afc, void* data);
|
||||
SetLargeAllocationFailureCallback(JSContext* cx, LargeAllocationFailureCallback afc, void* data);
|
||||
|
||||
/**
|
||||
* Unlike the error reporter, which is only called if the exception for an OOM
|
||||
|
@ -2966,7 +2966,7 @@ WorkerMain(void* arg)
|
||||
|
||||
EnvironmentPreparer environmentPreparer(cx);
|
||||
|
||||
JS::SetLargeAllocationFailureCallback(rt, my_LargeAllocFailCallback, (void*)cx);
|
||||
JS::SetLargeAllocationFailureCallback(cx, my_LargeAllocFailCallback, (void*)cx);
|
||||
|
||||
do {
|
||||
JSAutoRequest ar(cx);
|
||||
@ -2991,7 +2991,7 @@ WorkerMain(void* arg)
|
||||
JS_ExecuteScript(cx, script, &result);
|
||||
} while (0);
|
||||
|
||||
JS::SetLargeAllocationFailureCallback(rt, nullptr, nullptr);
|
||||
JS::SetLargeAllocationFailureCallback(cx, nullptr, nullptr);
|
||||
|
||||
#ifdef SPIDERMONKEY_PROMISE
|
||||
JS::SetGetIncumbentGlobalCallback(rt, nullptr);
|
||||
@ -7390,11 +7390,11 @@ main(int argc, char** argv, char** envp)
|
||||
if (!SetRuntimeOptions(rt, op))
|
||||
return 1;
|
||||
|
||||
JS_SetGCParameter(rt, JSGC_MAX_BYTES, 0xffffffff);
|
||||
JS_SetGCParameter(cx, JSGC_MAX_BYTES, 0xffffffff);
|
||||
|
||||
size_t availMem = op.getIntOption("available-memory");
|
||||
if (availMem > 0)
|
||||
JS_SetGCParametersBasedOnAvailableMemory(rt, availMem);
|
||||
JS_SetGCParametersBasedOnAvailableMemory(cx, availMem);
|
||||
|
||||
JS_SetTrustedPrincipals(rt, &ShellPrincipals::fullyTrusted);
|
||||
JS_SetSecurityCallbacks(rt, &ShellPrincipals::securityCallbacks);
|
||||
@ -7419,18 +7419,18 @@ main(int argc, char** argv, char** envp)
|
||||
|
||||
EnvironmentPreparer environmentPreparer(cx);
|
||||
|
||||
JS_SetGCParameter(rt, JSGC_MODE, JSGC_MODE_INCREMENTAL);
|
||||
JS_SetGCParameter(cx, JSGC_MODE, JSGC_MODE_INCREMENTAL);
|
||||
|
||||
JS::SetLargeAllocationFailureCallback(rt, my_LargeAllocFailCallback, (void*)cx);
|
||||
JS::SetLargeAllocationFailureCallback(cx, my_LargeAllocFailCallback, (void*)cx);
|
||||
|
||||
// Set some parameters to allow incremental GC in low memory conditions,
|
||||
// as is done for the browser, except in more-deterministic builds or when
|
||||
// disabled by command line options.
|
||||
#ifndef JS_MORE_DETERMINISTIC
|
||||
if (!op.getBoolOption("no-incremental-gc")) {
|
||||
JS_SetGCParameter(rt, JSGC_DYNAMIC_HEAP_GROWTH, 1);
|
||||
JS_SetGCParameter(rt, JSGC_DYNAMIC_MARK_SLICE, 1);
|
||||
JS_SetGCParameter(rt, JSGC_SLICE_TIME_BUDGET, 10);
|
||||
JS_SetGCParameter(cx, JSGC_DYNAMIC_HEAP_GROWTH, 1);
|
||||
JS_SetGCParameter(cx, JSGC_DYNAMIC_MARK_SLICE, 1);
|
||||
JS_SetGCParameter(cx, JSGC_SLICE_TIME_BUDGET, 10);
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -7443,7 +7443,7 @@ main(int argc, char** argv, char** envp)
|
||||
printf("OOM max count: %" PRIu64 "\n", js::oom::counter);
|
||||
#endif
|
||||
|
||||
JS::SetLargeAllocationFailureCallback(rt, nullptr, nullptr);
|
||||
JS::SetLargeAllocationFailureCallback(cx, nullptr, nullptr);
|
||||
|
||||
#ifdef SPIDERMONKEY_PROMISE
|
||||
JS::SetGetIncumbentGlobalCallback(rt, nullptr);
|
||||
|
@ -3474,7 +3474,7 @@ XPCJSRuntime::Initialize()
|
||||
// This leaves the maximum-JS_malloc-bytes threshold still in effect
|
||||
// to cause period, and we hope hygienic, last-ditch GCs from within
|
||||
// the GC's allocator.
|
||||
JS_SetGCParameter(runtime, JSGC_MAX_BYTES, 0xffffffff);
|
||||
JS_SetGCParameter(cx, JSGC_MAX_BYTES, 0xffffffff);
|
||||
|
||||
// The JS engine permits us to set different stack limits for system code,
|
||||
// trusted script, and untrusted script. We have tests that ensure that
|
||||
|
@ -517,7 +517,7 @@ CycleCollectedJSRuntime::Initialize(JSRuntime* aParentRuntime,
|
||||
MOZ_CRASH("JS_AddExtraGCRootsTracer failed");
|
||||
}
|
||||
JS_SetGrayGCRootsTracer(mJSRuntime, TraceGrayJS, this);
|
||||
JS_SetGCCallback(mJSRuntime, GCCallback, this);
|
||||
JS_SetGCCallback(mJSContext, GCCallback, this);
|
||||
mPrevGCSliceCallback = JS::SetGCSliceCallback(mJSRuntime, GCSliceCallback);
|
||||
|
||||
if (NS_IsMainThread()) {
|
||||
@ -534,7 +534,7 @@ CycleCollectedJSRuntime::Initialize(JSRuntime* aParentRuntime,
|
||||
|
||||
JS_SetObjectsTenuredCallback(mJSContext, JSObjectsTenuredCb, this);
|
||||
JS::SetOutOfMemoryCallback(mJSContext, OutOfMemoryCallback, this);
|
||||
JS::SetLargeAllocationFailureCallback(mJSRuntime,
|
||||
JS::SetLargeAllocationFailureCallback(mJSContext,
|
||||
LargeAllocationFailureCallback, this);
|
||||
JS_SetDestroyZoneCallback(mJSContext, XPCStringConvert::FreeZoneCache);
|
||||
JS_SetSweepZoneCallback(mJSContext, XPCStringConvert::ClearZoneCache);
|
||||
|
Loading…
Reference in New Issue
Block a user