Bug 613551 - "JSGC_MAX_MALLOC_BYTES is too large on mobile" [r=jst] a=blocking-fennec

--HG--
extra : rebase_source : 5899ff657273a08bed317edadc3eeab090d94208
This commit is contained in:
Doug Turner 2010-12-02 14:38:00 -08:00
parent af4f48c099
commit 04c946cf13

View File

@ -4004,26 +4004,24 @@ ReportAllJSExceptionsPrefChangedCallback(const char* aPrefName, void* aClosure)
static int static int
SetMemoryHighWaterMarkPrefChangedCallback(const char* aPrefName, void* aClosure) SetMemoryHighWaterMarkPrefChangedCallback(const char* aPrefName, void* aClosure)
{ {
PRInt32 highwatermark = nsContentUtils::GetIntPref(aPrefName, 32); PRInt32 highwatermark = nsContentUtils::GetIntPref(aPrefName, 128);
if (highwatermark >= 32) { JS_SetGCParameter(nsJSRuntime::sRuntime, JSGC_MAX_MALLOC_BYTES,
/* highwatermark * 1024L * 1024L);
* There are two ways to allocate memory in SpiderMonkey. One is return 0;
* to use jsmalloc() and the other is to use GC-owned memory }
* (e.g. js_NewGCThing()).
* static int
* In the browser, we don't cap the amount of GC-owned memory. SetMemoryMaxPrefChangedCallback(const char* aPrefName, void* aClosure)
*/ {
JS_SetGCParameter(nsJSRuntime::sRuntime, JSGC_MAX_MALLOC_BYTES, PRUint32 max = nsContentUtils::GetIntPref(aPrefName, -1);
128L * 1024L * 1024L); if (max == -1UL)
JS_SetGCParameter(nsJSRuntime::sRuntime, JSGC_MAX_BYTES, max = 0xffffffff;
0xffffffff); else
} else { max = max * 1024L * 1024L;
JS_SetGCParameter(nsJSRuntime::sRuntime, JSGC_MAX_MALLOC_BYTES,
highwatermark * 1024L * 1024L); JS_SetGCParameter(nsJSRuntime::sRuntime, JSGC_MAX_BYTES,
JS_SetGCParameter(nsJSRuntime::sRuntime, JSGC_MAX_BYTES, max);
highwatermark * 1024L * 1024L);
}
return 0; return 0;
} }
@ -4161,6 +4159,12 @@ nsJSRuntime::Init()
SetMemoryHighWaterMarkPrefChangedCallback("javascript.options.mem.high_water_mark", SetMemoryHighWaterMarkPrefChangedCallback("javascript.options.mem.high_water_mark",
nsnull); nsnull);
nsContentUtils::RegisterPrefCallback("javascript.options.mem.max",
SetMemoryMaxPrefChangedCallback,
nsnull);
SetMemoryMaxPrefChangedCallback("javascript.options.mem.max",
nsnull);
nsContentUtils::RegisterPrefCallback("javascript.options.mem.gc_frequency", nsContentUtils::RegisterPrefCallback("javascript.options.mem.gc_frequency",
SetMemoryGCFrequencyPrefChangedCallback, SetMemoryGCFrequencyPrefChangedCallback,
nsnull); nsnull);