Bug 1283855 part 12 - Make some GC APIs take JSContext instead of JSRuntime. r=sfink

This commit is contained in:
Jan de Mooij 2016-07-05 14:35:21 +02:00
parent 4ba1239131
commit c8334f438a
14 changed files with 51 additions and 50 deletions

View File

@ -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);
}

View File

@ -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);
}
}

View File

@ -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++) {

View File

@ -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;

View File

@ -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);

View File

@ -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;

View File

@ -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

View File

@ -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;
}

View File

@ -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);

View File

@ -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)

View File

@ -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

View File

@ -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);

View File

@ -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

View File

@ -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);