author | Terrence Cole <terrence@mozilla.com> |
Thu, 07 Mar 2013 10:47:56 -0800 | |
changeset 124146 | 7da6d3d93cccfd896e7a6f45d5af86895387f15d |
parent 124145 | 6ba3337f676fe705d548b44b2c8f5c8d7a32f754 |
child 124147 | 1ccebe00cd2c243cbc67e3011d0e0c724d7ef39e |
push id | 24408 |
push user | ryanvm@gmail.com |
push date | Fri, 08 Mar 2013 04:58:11 +0000 |
treeherder | mozilla-central@cb432984d5ce [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | billm |
bugs | 848599 |
milestone | 22.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
js/public/GCAPI.h | file | annotate | diff | comparison | revisions | |
js/src/jsapi.cpp | file | annotate | diff | comparison | revisions | |
js/src/jsapi.h | file | annotate | diff | comparison | revisions | |
js/src/jsfriendapi.cpp | file | annotate | diff | comparison | revisions | |
js/src/shell/js.cpp | file | annotate | diff | comparison | revisions |
--- a/js/public/GCAPI.h +++ b/js/public/GCAPI.h @@ -147,16 +147,19 @@ extern JS_FRIEND_API(bool) IsIncrementalGCEnabled(JSRuntime *rt); JS_FRIEND_API(bool) IsIncrementalGCInProgress(JSRuntime *rt); extern JS_FRIEND_API(void) DisableIncrementalGC(JSRuntime *rt); +extern JS_FRIEND_API(void) +DisableGenerationalGC(JSRuntime *rt); + extern JS_FRIEND_API(bool) IsIncrementalBarrierNeeded(JSRuntime *rt); extern JS_FRIEND_API(bool) IsIncrementalBarrierNeeded(JSContext *cx); extern JS_FRIEND_API(void) IncrementalReferenceBarrier(void *ptr, JSGCTraceKind kind);
--- a/js/src/jsapi.cpp +++ b/js/src/jsapi.cpp @@ -777,16 +777,17 @@ JSRuntime::JSRuntime(JSUseHelperThreads gcAbortSweepAfterCurrentGroup(false), gcArenasAllocatedDuringSweep(NULL), #ifdef DEBUG gcMarkingValidator(NULL), #endif gcInterFrameGC(0), gcSliceBudget(SliceBudget::Unlimited), gcIncrementalEnabled(true), + gcGenerationalEnabled(true), gcManipulatingDeadZones(false), gcObjectsMarkedInDeadZones(0), gcPoke(false), heapState(Idle), #ifdef JSGC_GENERATIONAL gcNursery(), gcStoreBuffer(&gcNursery), #endif @@ -2884,19 +2885,16 @@ JS_SetGCParameter(JSRuntime *rt, JSGCPar rt->gcDynamicMarkSlice = value; break; case JSGC_ANALYSIS_PURGE_TRIGGER: rt->analysisPurgeTriggerBytes = value * 1024 * 1024; break; case JSGC_ALLOCATION_THRESHOLD: rt->gcAllocationThreshold = value * 1024 * 1024; break; - case JSGC_ENABLE_GENERATIONAL: - rt->gcGenerationalEnabled = bool(value); - break; default: JS_ASSERT(key == JSGC_MODE); rt->gcMode = JSGCMode(value); JS_ASSERT(rt->gcMode == JSGC_MODE_GLOBAL || rt->gcMode == JSGC_MODE_COMPARTMENT || rt->gcMode == JSGC_MODE_INCREMENTAL); return; }
--- a/js/src/jsapi.h +++ b/js/src/jsapi.h @@ -2909,19 +2909,16 @@ typedef enum JSGCParamKey { /* If true, high-frequency GCs will use a longer mark slice. */ JSGC_DYNAMIC_MARK_SLICE = 18, /* Number of megabytes of analysis data to allocate before purging. */ JSGC_ANALYSIS_PURGE_TRIGGER = 19, /* Lower limit after which we limit the heap growth. */ JSGC_ALLOCATION_THRESHOLD = 20, - - /* Enable the generational GC. */ - JSGC_ENABLE_GENERATIONAL = 21 } JSGCParamKey; typedef enum JSGCMode { /* Perform only global GCs. */ JSGC_MODE_GLOBAL = 0, /* Perform per-compartment GCs until too much garbage has accumulated. */ JSGC_MODE_COMPARTMENT = 1,
--- a/js/src/jsfriendapi.cpp +++ b/js/src/jsfriendapi.cpp @@ -841,16 +841,25 @@ JS::IsIncrementalGCInProgress(JSRuntime } JS_FRIEND_API(void) JS::DisableIncrementalGC(JSRuntime *rt) { rt->gcIncrementalEnabled = false; } +extern JS_FRIEND_API(void) +JS::DisableGenerationalGC(JSRuntime *rt) +{ + rt->gcGenerationalEnabled = false; +#ifdef JSGC_GENERATIONAL + rt->gcStoreBuffer.disable(); +#endif +} + JS_FRIEND_API(bool) JS::IsIncrementalBarrierNeeded(JSRuntime *rt) { return (rt->gcIncrementalState == gc::MARK && !rt->isHeapBusy()); } JS_FRIEND_API(bool) JS::IsIncrementalBarrierNeeded(JSContext *cx)
--- a/js/src/shell/js.cpp +++ b/js/src/shell/js.cpp @@ -5251,17 +5251,18 @@ main(int argc, char **argv, char **envp) if (!rt) return 1; gTimeoutFunc = NullValue(); if (!JS_AddNamedValueRootRT(rt, &gTimeoutFunc, "gTimeoutFunc")) return 1; JS_SetGCParameter(rt, JSGC_MAX_BYTES, 0xffffffff); #ifdef JSGC_GENERATIONAL - JS_SetGCParameter(rt, JSGC_ENABLE_GENERATIONAL, op.getBoolOption("ggc")); + if (!op.getBoolOption("ggc")) + JS::DisableGenerationalGC(rt); #endif JS_SetTrustedPrincipals(rt, &shellTrustedPrincipals); JS_SetSecurityCallbacks(rt, &securityCallbacks); JS_SetNativeStackQuota(rt, gMaxStackSize); if (!InitWatchdog(rt))