зеркало из https://github.com/mozilla/pjs.git
Bug 768282 - Run GCCyle only once for CC_FORCED GCs (r=mccr8)
This commit is contained in:
Родитель
28461068f1
Коммит
1041c09ce9
|
@ -593,7 +593,8 @@ SizeOfJSContext();
|
||||||
D(DOM_WORKER) \
|
D(DOM_WORKER) \
|
||||||
D(INTER_SLICE_GC) \
|
D(INTER_SLICE_GC) \
|
||||||
D(REFRESH_FRAME) \
|
D(REFRESH_FRAME) \
|
||||||
D(FULL_GC_TIMER)
|
D(FULL_GC_TIMER) \
|
||||||
|
D(SHUTDOWN_CC)
|
||||||
|
|
||||||
namespace gcreason {
|
namespace gcreason {
|
||||||
|
|
||||||
|
|
|
@ -3799,13 +3799,15 @@ static bool
|
||||||
ShouldCleanUpEverything(JSRuntime *rt, gcreason::Reason reason)
|
ShouldCleanUpEverything(JSRuntime *rt, gcreason::Reason reason)
|
||||||
{
|
{
|
||||||
// During shutdown, we must clean everything up, for the sake of leak
|
// During shutdown, we must clean everything up, for the sake of leak
|
||||||
// detection. When a runtime has no contexts, or we're doing a forced GC,
|
// detection. When a runtime has no contexts, or we're doing a GC before a
|
||||||
// those are strong indications that we're shutting down.
|
// shutdown CC, those are strong indications that we're shutting down.
|
||||||
//
|
//
|
||||||
// DEBUG_MODE_GC indicates we're discarding code because the debug mode
|
// DEBUG_MODE_GC indicates we're discarding code because the debug mode
|
||||||
// has changed; debug mode affects the results of bytecode analysis, so
|
// has changed; debug mode affects the results of bytecode analysis, so
|
||||||
// we need to clear everything away.
|
// we need to clear everything away.
|
||||||
return !rt->hasContexts() || reason == gcreason::CC_FORCED || reason == gcreason::DEBUG_MODE_GC;
|
return !rt->hasContexts() ||
|
||||||
|
reason == gcreason::SHUTDOWN_CC ||
|
||||||
|
reason == gcreason::DEBUG_MODE_GC;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -3824,7 +3826,7 @@ Collect(JSRuntime *rt, bool incremental, int64_t budget,
|
||||||
#ifdef JS_GC_ZEAL
|
#ifdef JS_GC_ZEAL
|
||||||
bool restartVerify = rt->gcVerifyData &&
|
bool restartVerify = rt->gcVerifyData &&
|
||||||
rt->gcZeal() == ZealVerifierValue &&
|
rt->gcZeal() == ZealVerifierValue &&
|
||||||
reason != gcreason::CC_FORCED &&
|
reason != gcreason::SHUTDOWN_CC &&
|
||||||
rt->hasContexts();
|
rt->hasContexts();
|
||||||
|
|
||||||
struct AutoVerifyBarriers {
|
struct AutoVerifyBarriers {
|
||||||
|
|
|
@ -2605,7 +2605,7 @@ nsCycleCollector::GCIfNeeded(bool aForceGC)
|
||||||
// mJSRuntime->Collect() must be called from the main thread,
|
// mJSRuntime->Collect() must be called from the main thread,
|
||||||
// because it invokes XPCJSRuntime::GCCallback(cx, JSGC_BEGIN)
|
// because it invokes XPCJSRuntime::GCCallback(cx, JSGC_BEGIN)
|
||||||
// which returns false if not in the main thread.
|
// which returns false if not in the main thread.
|
||||||
mJSRuntime->Collect(js::gcreason::CC_FORCED, nsGCNormal);
|
mJSRuntime->Collect(aForceGC ? js::gcreason::SHUTDOWN_CC : js::gcreason::CC_FORCED, nsGCNormal);
|
||||||
timeLog.Checkpoint("GC()");
|
timeLog.Checkpoint("GC()");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче