author | Andrea Marchesini <amarchesini@mozilla.com> |
Mon, 27 Oct 2014 09:38:14 +0000 | |
changeset 236733 | 14c6cf6337ccf8016bc0392c7200193056d544cc |
parent 236732 | 7e8eda44373ce1ec70903ee9a0c4f234e3817837 |
child 236734 | fca1182ed15d954a517f5088d3b23b32972e92a7 |
push id | 4311 |
push user | raliiev@mozilla.com |
push date | Mon, 12 Jan 2015 19:37:41 +0000 |
treeherder | mozilla-beta@150c9fed433b [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | khuey |
bugs | 1082178 |
milestone | 36.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
|
--- a/dom/workers/RuntimeService.cpp +++ b/dom/workers/RuntimeService.cpp @@ -169,16 +169,19 @@ const uint32_t kNoIndex = uint32_t(-1); const JS::ContextOptions kRequiredContextOptions = JS::ContextOptions().setDontReportUncaught(true); uint32_t gMaxWorkersPerDomain = MAX_WORKERS_PER_DOMAIN; // Does not hold an owning reference. RuntimeService* gRuntimeService = nullptr; +// Only true during the call to Init. +bool gRuntimeServiceDuringInit = false; + #ifdef ENABLE_TESTS bool gTestPBackground = false; #endif // ENABLE_TESTS enum { ID_Worker = 0, ID_ChromeWorker, ID_Event, @@ -459,127 +462,132 @@ LoadJSGCMemoryOptions(const char* aPrefN // be no just a "mem." pref here. if (!rts) { NS_ASSERTION(memPrefName.EqualsLiteral(PREF_MEM_OPTIONS_PREFIX), "Huh?!"); } #endif // If we're running in Init() then do this for every pref we care about. // Otherwise we just want to update the parameter that changed. - for (uint32_t index = rts ? JSSettings::kGCSettingsArraySize - 1 : 0; + for (uint32_t index = !gRuntimeServiceDuringInit + ? JSSettings::kGCSettingsArraySize - 1 : 0; index < JSSettings::kGCSettingsArraySize; index++) { LiteralRebindingCString matchName; matchName.RebindLiteral(PREF_MEM_OPTIONS_PREFIX "max"); - if (memPrefName == matchName || (!rts && index == 0)) { + if (memPrefName == matchName || (gRuntimeServiceDuringInit && index == 0)) { int32_t prefValue = GetWorkerPref(matchName, -1); uint32_t value = (prefValue <= 0 || prefValue >= 0x1000) ? uint32_t(-1) : uint32_t(prefValue) * 1024 * 1024; UpdatOtherJSGCMemoryOption(rts, JSGC_MAX_BYTES, value); continue; } matchName.RebindLiteral(PREF_MEM_OPTIONS_PREFIX "high_water_mark"); - if (memPrefName == matchName || (!rts && index == 1)) { + if (memPrefName == matchName || (gRuntimeServiceDuringInit && index == 1)) { int32_t prefValue = GetWorkerPref(matchName, 128); UpdatOtherJSGCMemoryOption(rts, JSGC_MAX_MALLOC_BYTES, uint32_t(prefValue) * 1024 * 1024); continue; } matchName.RebindLiteral(PREF_MEM_OPTIONS_PREFIX "gc_high_frequency_time_limit_ms"); - if (memPrefName == matchName || (!rts && index == 2)) { + if (memPrefName == matchName || (gRuntimeServiceDuringInit && index == 2)) { UpdateCommonJSGCMemoryOption(rts, matchName, JSGC_HIGH_FREQUENCY_TIME_LIMIT); continue; } matchName.RebindLiteral(PREF_MEM_OPTIONS_PREFIX "gc_low_frequency_heap_growth"); - if (memPrefName == matchName || (!rts && index == 3)) { + if (memPrefName == matchName || (gRuntimeServiceDuringInit && index == 3)) { UpdateCommonJSGCMemoryOption(rts, matchName, JSGC_LOW_FREQUENCY_HEAP_GROWTH); continue; } matchName.RebindLiteral(PREF_MEM_OPTIONS_PREFIX "gc_high_frequency_heap_growth_min"); - if (memPrefName == matchName || (!rts && index == 4)) { + if (memPrefName == matchName || (gRuntimeServiceDuringInit && index == 4)) { UpdateCommonJSGCMemoryOption(rts, matchName, JSGC_HIGH_FREQUENCY_HEAP_GROWTH_MIN); continue; } matchName.RebindLiteral(PREF_MEM_OPTIONS_PREFIX "gc_high_frequency_heap_growth_max"); - if (memPrefName == matchName || (!rts && index == 5)) { + if (memPrefName == matchName || (gRuntimeServiceDuringInit && index == 5)) { UpdateCommonJSGCMemoryOption(rts, matchName, JSGC_HIGH_FREQUENCY_HEAP_GROWTH_MAX); continue; } matchName.RebindLiteral(PREF_MEM_OPTIONS_PREFIX "gc_high_frequency_low_limit_mb"); - if (memPrefName == matchName || (!rts && index == 6)) { + if (memPrefName == matchName || (gRuntimeServiceDuringInit && index == 6)) { UpdateCommonJSGCMemoryOption(rts, matchName, JSGC_HIGH_FREQUENCY_LOW_LIMIT); continue; } matchName.RebindLiteral(PREF_MEM_OPTIONS_PREFIX "gc_high_frequency_high_limit_mb"); - if (memPrefName == matchName || (!rts && index == 7)) { + if (memPrefName == matchName || (gRuntimeServiceDuringInit && index == 7)) { UpdateCommonJSGCMemoryOption(rts, matchName, JSGC_HIGH_FREQUENCY_HIGH_LIMIT); continue; } matchName.RebindLiteral(PREF_MEM_OPTIONS_PREFIX "gc_allocation_threshold_mb"); - if (memPrefName == matchName || (!rts && index == 8)) { + if (memPrefName == matchName || (gRuntimeServiceDuringInit && index == 8)) { UpdateCommonJSGCMemoryOption(rts, matchName, JSGC_ALLOCATION_THRESHOLD); continue; } matchName.RebindLiteral(PREF_MEM_OPTIONS_PREFIX "gc_incremental_slice_ms"); - if (memPrefName == matchName || (!rts && index == 9)) { + if (memPrefName == matchName || (gRuntimeServiceDuringInit && index == 9)) { int32_t prefValue = GetWorkerPref(matchName, -1); uint32_t value = (prefValue <= 0 || prefValue >= 100000) ? 0 : uint32_t(prefValue); UpdatOtherJSGCMemoryOption(rts, JSGC_SLICE_TIME_BUDGET, value); continue; } matchName.RebindLiteral(PREF_MEM_OPTIONS_PREFIX "gc_dynamic_heap_growth"); - if (memPrefName == matchName || (!rts && index == 10)) { + if (memPrefName == matchName || + (gRuntimeServiceDuringInit && index == 10)) { bool prefValue = GetWorkerPref(matchName, false); UpdatOtherJSGCMemoryOption(rts, JSGC_DYNAMIC_HEAP_GROWTH, prefValue ? 0 : 1); continue; } matchName.RebindLiteral(PREF_MEM_OPTIONS_PREFIX "gc_dynamic_mark_slice"); - if (memPrefName == matchName || (!rts && index == 11)) { + if (memPrefName == matchName || + (gRuntimeServiceDuringInit && index == 11)) { bool prefValue = GetWorkerPref(matchName, false); UpdatOtherJSGCMemoryOption(rts, JSGC_DYNAMIC_MARK_SLICE, prefValue ? 0 : 1); continue; } matchName.RebindLiteral(PREF_MEM_OPTIONS_PREFIX "gc_min_empty_chunk_count"); - if (memPrefName == matchName || (!rts && index == 12)) { + if (memPrefName == matchName || + (gRuntimeServiceDuringInit && index == 12)) { UpdateCommonJSGCMemoryOption(rts, matchName, JSGC_MIN_EMPTY_CHUNK_COUNT); continue; } matchName.RebindLiteral(PREF_MEM_OPTIONS_PREFIX "gc_max_empty_chunk_count"); - if (memPrefName == matchName || (!rts && index == 13)) { + if (memPrefName == matchName || + (gRuntimeServiceDuringInit && index == 13)) { UpdateCommonJSGCMemoryOption(rts, matchName, JSGC_MAX_EMPTY_CHUNK_COUNT); continue; } #ifdef DEBUG nsAutoCString message("Workers don't support the 'mem."); message.Append(memPrefName); message.AppendLiteral("' preference!"); @@ -1760,16 +1768,19 @@ RuntimeService::Init() false))) { NS_WARNING("Failed to register for memory pressure notifications!"); } if (NS_FAILED(obs->AddObserver(this, NS_IOSERVICE_OFFLINE_STATUS_TOPIC, false))) { NS_WARNING("Failed to register for offline notification event!"); } + MOZ_ASSERT(!gRuntimeServiceDuringInit, "This should be false!"); + gRuntimeServiceDuringInit = true; + if (NS_FAILED(Preferences::RegisterCallback( LoadJSGCMemoryOptions, PREF_JS_OPTIONS_PREFIX PREF_MEM_OPTIONS_PREFIX, nullptr)) || NS_FAILED(Preferences::RegisterCallbackAndCall( LoadJSGCMemoryOptions, PREF_WORKERS_OPTIONS_PREFIX PREF_MEM_OPTIONS_PREFIX, nullptr)) || @@ -1817,16 +1828,19 @@ RuntimeService::Init() nullptr)) || NS_FAILED(Preferences::RegisterCallbackAndCall( JSVersionChanged, PREF_WORKERS_LATEST_JS_VERSION, nullptr))) { NS_WARNING("Failed to register pref callbacks!"); } + MOZ_ASSERT(gRuntimeServiceDuringInit, "Should be true!"); + gRuntimeServiceDuringInit = false; + // We assume atomic 32bit reads/writes. If this assumption doesn't hold on // some wacky platform then the worst that could happen is that the close // handler will run for a slightly different amount of time. if (NS_FAILED(Preferences::AddIntVarCache( &sDefaultJSSettings.content.maxScriptRuntime, PREF_MAX_SCRIPT_RUN_TIME_CONTENT, MAX_SCRIPT_RUN_TIME_SEC)) || NS_FAILED(Preferences::AddIntVarCache(