diff options
Diffstat (limited to 'toolkit/components/terminator')
-rw-r--r-- | toolkit/components/terminator/TerminatorTelemetry.sys.mjs | 119 | ||||
-rw-r--r-- | toolkit/components/terminator/components.conf | 15 | ||||
-rw-r--r-- | toolkit/components/terminator/moz.build | 8 | ||||
-rw-r--r-- | toolkit/components/terminator/nsITerminatorTest.idl | 17 | ||||
-rw-r--r-- | toolkit/components/terminator/nsTerminator.cpp | 236 | ||||
-rw-r--r-- | toolkit/components/terminator/nsTerminator.h | 4 | ||||
-rw-r--r-- | toolkit/components/terminator/tests/xpcshell/test_terminator_advance_phases.js (renamed from toolkit/components/terminator/tests/xpcshell/test_terminator_record.js) | 42 | ||||
-rw-r--r-- | toolkit/components/terminator/tests/xpcshell/test_terminator_reload.js | 88 | ||||
-rw-r--r-- | toolkit/components/terminator/tests/xpcshell/xpcshell.toml | 7 |
9 files changed, 55 insertions, 481 deletions
diff --git a/toolkit/components/terminator/TerminatorTelemetry.sys.mjs b/toolkit/components/terminator/TerminatorTelemetry.sys.mjs deleted file mode 100644 index 9903027436..0000000000 --- a/toolkit/components/terminator/TerminatorTelemetry.sys.mjs +++ /dev/null @@ -1,119 +0,0 @@ -/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ -/* vim: set ts=2 et sw=2 tw=80 filetype=javascript: */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -/** - * Read the data saved by nsTerminator during shutdown and feed it to the - * relevant telemetry histograms. - */ - -const lazy = {}; - -ChromeUtils.defineESModuleGetters(lazy, { - setTimeout: "resource://gre/modules/Timer.sys.mjs", -}); - -export function nsTerminatorTelemetry() { - this._wasNotified = false; - this._deferred = Promise.withResolvers(); - - IOUtils.sendTelemetry.addBlocker( - "TerminatoryTelemetry: Waiting to submit telemetry", - this._deferred.promise, - () => ({ - wasNotified: this._wasNotified, - }) - ); -} - -var HISTOGRAMS = { - "quit-application": "SHUTDOWN_PHASE_DURATION_TICKS_QUIT_APPLICATION", - "profile-change-net-teardown": - "SHUTDOWN_PHASE_DURATION_TICKS_PROFILE_CHANGE_NET_TEARDOWN", - "profile-change-teardown": - "SHUTDOWN_PHASE_DURATION_TICKS_PROFILE_CHANGE_TEARDOWN", - "profile-before-change": - "SHUTDOWN_PHASE_DURATION_TICKS_PROFILE_BEFORE_CHANGE", - "profile-before-change-qm": - "SHUTDOWN_PHASE_DURATION_TICKS_PROFILE_BEFORE_CHANGE_QM", - "xpcom-will-shutdown": "SHUTDOWN_PHASE_DURATION_TICKS_XPCOM_WILL_SHUTDOWN", - "xpcom-shutdown": "SHUTDOWN_PHASE_DURATION_TICKS_XPCOM_SHUTDOWN", - - // The following keys appear in the JSON, but do not have associated - // histograms. - "xpcom-shutdown-threads": null, - XPCOMShutdownFinal: null, - CCPostLastCycleCollection: null, -}; - -nsTerminatorTelemetry.prototype = { - classID: Components.ID("{3f78ada1-cba2-442a-82dd-d5fb300ddea7}"), - - // nsISupports - - QueryInterface: ChromeUtils.generateQI(["nsIObserver"]), - - // nsIObserver - - observe: function DS_observe(aSubject, aTopic, aData) { - this._wasNotified = true; - - (async () => { - try { - // - // This data is hardly critical, reading it can wait for a few seconds. - // - await new Promise(resolve => lazy.setTimeout(resolve, 3000)); - - let PATH = PathUtils.join( - Services.dirsvc.get("ProfLD", Ci.nsIFile).path, - "ShutdownDuration.json" - ); - let data; - try { - data = await IOUtils.readJSON(PATH); - } catch (ex) { - if (DOMException.isInstance(ex) && ex.name == "NotFoundError") { - return; - } - // Let other errors be reported by Promise's error-reporting. - throw ex; - } - - // Clean up - await IOUtils.remove(PATH); - await IOUtils.remove(PATH + ".tmp"); - - for (let k of Object.keys(data)) { - let id = HISTOGRAMS[k]; - if (id === null) { - // No histogram associated with this entry. - continue; - } - - try { - let histogram = Services.telemetry.getHistogramById(id); - histogram.add(Number.parseInt(data[k])); - } catch (ex) { - // Make sure that the error is reported and causes test failures, - // but otherwise, ignore it. - Promise.reject(ex); - continue; - } - } - - // Inform observers that we are done. - Services.obs.notifyObservers( - null, - "shutdown-terminator-telemetry-updated" - ); - } finally { - this._deferred.resolve(); - } - })(); - }, -}; - -// Module diff --git a/toolkit/components/terminator/components.conf b/toolkit/components/terminator/components.conf deleted file mode 100644 index 14c4c2c562..0000000000 --- a/toolkit/components/terminator/components.conf +++ /dev/null @@ -1,15 +0,0 @@ -# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- -# vim: set filetype=python: -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -Classes = [ - { - 'cid': '{3f78ada1-cba2-442a-82dd-d5fb300ddea7}', - 'contract_ids': ['@mozilla.org/toolkit/shutdown-terminator-telemetry;1'], - 'esModule': 'resource://gre/modules/TerminatorTelemetry.sys.mjs', - 'constructor': 'nsTerminatorTelemetry', - 'categories': {'profile-after-change': 'nsTerminatorTelemetry'}, - }, -] diff --git a/toolkit/components/terminator/moz.build b/toolkit/components/terminator/moz.build index f869b86d95..a13789c2da 100644 --- a/toolkit/components/terminator/moz.build +++ b/toolkit/components/terminator/moz.build @@ -21,12 +21,10 @@ EXTRA_COMPONENTS += [ "terminator.manifest", ] -EXTRA_JS_MODULES += [ - "TerminatorTelemetry.sys.mjs", +XPIDL_SOURCES += [ + "nsITerminatorTest.idl", ] -XPCOM_MANIFESTS += [ - "components.conf", -] +XPIDL_MODULE = "toolkit_terminator" FINAL_LIBRARY = "xul" diff --git a/toolkit/components/terminator/nsITerminatorTest.idl b/toolkit/components/terminator/nsITerminatorTest.idl new file mode 100644 index 0000000000..22f06a11dc --- /dev/null +++ b/toolkit/components/terminator/nsITerminatorTest.idl @@ -0,0 +1,17 @@ +/* -*- Mode: C++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 8 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "nsISupports.idl" + +[scriptable, uuid(a76599ef-78a4-441f-b258-4908dedef42d)] +interface nsITerminatorTest : nsISupports +{ + + /** + * This method is used to test the shutdown phases of nsTerminator. It is + * not meant to be used outside of tests. + */ + [implicit_jscontext] jsval getTicksForShutdownPhases(); +}; diff --git a/toolkit/components/terminator/nsTerminator.cpp b/toolkit/components/terminator/nsTerminator.cpp index 5a1f9693b8..6339962022 100644 --- a/toolkit/components/terminator/nsTerminator.cpp +++ b/toolkit/components/terminator/nsTerminator.cpp @@ -245,131 +245,9 @@ void RunWatchdog(void* arg) { } } -//////////////////////////////////////////// -// -// Writer thread -// -// This nspr thread is in charge of writing to disk statistics produced by the -// watchdog thread and collected by the main thread. Note that we use a nspr -// thread rather than usual XPCOM I/O simply because we outlive XPCOM and its -// threads. -// - -// -// Communication between the main thread and the writer thread. -// -// Main thread: -// -// * Whenever a shutdown step has been completed, the main thread -// obtains the number of ticks from the watchdog threads, builds -// a string representing all the data gathered so far, places -// this string in `gWriteData`, and wakes up the writer thread -// using `gWriteReady`. If `gWriteData` already contained a non-null -// pointer, this means that the writer thread is lagging behind the -// main thread, and the main thread cleans up the memory. -// -// Writer thread: -// -// * When awake, the writer thread swaps `gWriteData` to nullptr. If -// `gWriteData` contained data to write, the . If so, the writer -// thread writes the data to a file named "ShutdownDuration.json.tmp", -// then moves that file to "ShutdownDuration.json" and cleans up the -// data. If `gWriteData` contains a nullptr, the writer goes to sleep -// until it is awkened using `gWriteReady`. -// -// -// The data written by the writer thread will be read by another -// module upon the next restart and fed to Telemetry. -// -Atomic<nsCString*> gWriteData(nullptr); -PRMonitor* gWriteReady = nullptr; - -void RunWriter(void* arg) { - AUTO_PROFILER_REGISTER_THREAD("Shutdown Statistics Writer"); - NS_SetCurrentThreadName("Shutdown Statistics Writer"); - - MOZ_LSAN_INTENTIONALLY_LEAK_OBJECT(arg); - // Shutdown will generally complete before we have a chance to - // deallocate. This is not a leak. - - // Setup destinationPath and tmpFilePath - - nsCString destinationPath; - destinationPath.Adopt(static_cast<char*>(arg)); - nsAutoCString tmpFilePath; - tmpFilePath.Append(destinationPath); - tmpFilePath.AppendLiteral(".tmp"); - - // Cleanup any file leftover from a previous run - Unused << PR_Delete(tmpFilePath.get()); - Unused << PR_Delete(destinationPath.get()); - - while (true) { - // - // Check whether we have received data from the main thread. - // - // We perform the check before waiting on `gWriteReady` as we may - // have received data while we were busy writing. - // - // Also note that gWriteData may have been modified several times - // since we last checked. That's ok, we are not losing any important - // data (since we keep adding data), and we are not leaking memory - // (since the main thread deallocates any data that hasn't been - // consumed by the writer thread). - // - UniquePtr<nsCString> data(gWriteData.exchange(nullptr)); - if (!data) { - // Data is not available yet. - // Wait until the main thread provides it. - PR_EnterMonitor(gWriteReady); - PR_Wait(gWriteReady, PR_INTERVAL_NO_TIMEOUT); - PR_ExitMonitor(gWriteReady); - continue; - } - - MOZ_LSAN_INTENTIONALLY_LEAK_OBJECT(data.get()); - // Shutdown may complete before we have a chance to deallocate. - // This is not a leak. - - // - // Write to a temporary file - // - // In case of any error, we simply give up. Since the data is - // hardly critical, we don't want to spend too much effort - // salvaging it. - // - UniquePtr<PRFileDesc, PR_CloseDelete> tmpFileDesc(PR_Open( - tmpFilePath.get(), PR_WRONLY | PR_TRUNCATE | PR_CREATE_FILE, 00600)); - - // Shutdown may complete before we have a chance to close the file. - // This is not a leak. - MOZ_LSAN_INTENTIONALLY_LEAK_OBJECT(tmpFileDesc.get()); - - if (tmpFileDesc == nullptr) { - break; - } - if (PR_Write(tmpFileDesc.get(), data->get(), data->Length()) == -1) { - break; - } - tmpFileDesc.reset(); - - // - // Rename on top of destination file. - // - // This is not sufficient to guarantee that the destination file - // will be written correctly, but, again, we don't care enough - // about the data to make more efforts. - // - Unused << PR_Delete(destinationPath.get()); - if (PR_Rename(tmpFilePath.get(), destinationPath.get()) != PR_SUCCESS) { - break; - } - } -} - } // namespace -NS_IMPL_ISUPPORTS(nsTerminator, nsIObserver) +NS_IMPL_ISUPPORTS(nsTerminator, nsIObserver, nsITerminatorTest) nsTerminator::nsTerminator() : mInitialized(false), mCurrentStep(-1) {} @@ -379,12 +257,6 @@ void nsTerminator::Start() { MOZ_ASSERT(!mInitialized); StartWatchdog(); -#if !defined(NS_FREE_PERMANENT_DATA) - // Only allow nsTerminator to write on non-leak-checked builds so we don't - // get leak warnings on shutdown for intentional leaks (see bug 1242084). - // This will be enabled again by bug 1255484 when 1255478 lands. - StartWriter(); -#endif // !defined(NS_FREE_PERMANENT_DATA) mInitialized = true; } @@ -470,41 +342,6 @@ void nsTerminator::StartWatchdog() { MOZ_ASSERT(watchdogThread); } -// Prepare, allocate and start the writer thread. By design, it will never -// finish, nor be deallocated. In case of error, we degrade -// gracefully to not writing Telemetry data. -void nsTerminator::StartWriter() { - if (!Telemetry::CanRecordExtended()) { - return; - } - nsCOMPtr<nsIFile> profLD; - nsresult rv = NS_GetSpecialDirectory(NS_APP_USER_PROFILE_LOCAL_50_DIR, - getter_AddRefs(profLD)); - if (NS_FAILED(rv)) { - return; - } - - rv = profLD->Append(u"ShutdownDuration.json"_ns); - if (NS_FAILED(rv)) { - return; - } - - nsAutoString path; - rv = profLD->GetPath(path); - if (NS_FAILED(rv)) { - return; - } - - gWriteReady = PR_NewMonitor(); - MOZ_LSAN_INTENTIONALLY_LEAK_OBJECT( - gWriteReady); // We will never deallocate this object - PRThread* writerThread = CreateSystemThread(RunWriter, ToNewUTF8String(path)); - - if (!writerThread) { - return; - } -} - // This helper is here to preserve the existing crash reporting behavior // based on observer topic names, using the shutdown phase name only for // phases without associated topic. @@ -531,12 +368,6 @@ void nsTerminator::AdvancePhase(mozilla::ShutdownPhase aPhase) { } UpdateHeartbeat(step); -#if !defined(NS_FREE_PERMANENT_DATA) - // Only allow nsTerminator to write on non-leak checked builds so we don't get - // leak warnings on shutdown for intentional leaks (see bug 1242084). This - // will be enabled again by bug 1255484 when 1255478 lands. - UpdateTelemetry(); -#endif // !defined(NS_FREE_PERMANENT_DATA) UpdateCrashReport(GetReadableNameForPhase(aPhase)); } @@ -555,58 +386,25 @@ void nsTerminator::UpdateHeartbeat(int32_t aStep) { } } -void nsTerminator::UpdateTelemetry() { - if (!Telemetry::CanRecordExtended() || !gWriteReady) { - return; - } - - // - // We need Telemetry data on the effective duration of each step, - // to be able to tune the time-to-crash of each of both the - // Terminator and AsyncShutdown. However, at this stage, it is too - // late to record such data into Telemetry, so we write it to disk - // and read it upon the next startup. - // - - // Build JSON. - UniquePtr<nsCString> telemetryData(new nsCString()); - telemetryData->AppendLiteral("{"); - size_t fields = 0; - for (auto& shutdownStep : sShutdownSteps) { - if (shutdownStep.mTicks < 0) { - // Ignore this field. - continue; - } - if (fields++ > 0) { - telemetryData->AppendLiteral(", "); - } - telemetryData->AppendLiteral(R"(")"); - telemetryData->Append(GetReadableNameForPhase(shutdownStep.mPhase)); - telemetryData->AppendLiteral(R"(": )"); - telemetryData->AppendInt(shutdownStep.mTicks); - } - telemetryData->AppendLiteral("}"); - - if (fields == 0) { - // Nothing to write - return; - } - - // - // Send data to the worker thread. - // - delete gWriteData.exchange( - telemetryData.release()); // Clear any data that hasn't been written yet - - // In case the worker thread was sleeping, wake it up. - PR_EnterMonitor(gWriteReady); - PR_Notify(gWriteReady); - PR_ExitMonitor(gWriteReady); -} - void nsTerminator::UpdateCrashReport(const char* aTopic) { // In case of crash, we wish to know where in shutdown we are CrashReporter::RecordAnnotationCString( CrashReporter::Annotation::ShutdownProgress, aTopic); } + +NS_IMETHODIMP +nsTerminator::GetTicksForShutdownPhases(JSContext* aCx, + JS::MutableHandle<JS::Value> aRetval) { + JS::Rooted<JSObject*> obj(aCx, JS_NewPlainObject(aCx)); + aRetval.setObject(*obj); + + for (auto& shutdownStep : sShutdownSteps) { + if (shutdownStep.mTicks >= 0) { + JS_DefineProperty(aCx, obj, GetReadableNameForPhase(shutdownStep.mPhase), + shutdownStep.mTicks, JSPROP_ENUMERATE); + } + } + + return NS_OK; +} // namespace mozilla } // namespace mozilla diff --git a/toolkit/components/terminator/nsTerminator.h b/toolkit/components/terminator/nsTerminator.h index 46c3e17b92..0de6ebe778 100644 --- a/toolkit/components/terminator/nsTerminator.h +++ b/toolkit/components/terminator/nsTerminator.h @@ -9,13 +9,15 @@ #include "nsISupports.h" #include "nsIObserver.h" +#include "nsITerminatorTest.h" namespace mozilla { -class nsTerminator final : public nsIObserver { +class nsTerminator final : public nsIObserver, public nsITerminatorTest { public: NS_DECL_ISUPPORTS NS_DECL_NSIOBSERVER + NS_DECL_NSITERMINATORTEST nsTerminator(); void AdvancePhase(mozilla::ShutdownPhase aPhase); diff --git a/toolkit/components/terminator/tests/xpcshell/test_terminator_record.js b/toolkit/components/terminator/tests/xpcshell/test_terminator_advance_phases.js index 62cee636f3..42f0e3686f 100644 --- a/toolkit/components/terminator/tests/xpcshell/test_terminator_record.js +++ b/toolkit/components/terminator/tests/xpcshell/test_terminator_advance_phases.js @@ -4,14 +4,13 @@ "use strict"; -// Test that the Shutdown Terminator records durations correctly +// Test that the Shutdown Terminator advances through the shutdown phases +// correctly. const { setTimeout } = ChromeUtils.importESModule( "resource://gre/modules/Timer.sys.mjs" ); -var PATH; -var PATH_TMP; var terminator; var HEARTBEAT_MS = 100; @@ -34,8 +33,6 @@ let MeasuredDurations = []; add_task(async function init() { do_get_profile(); - PATH = PathUtils.join(PathUtils.localProfileDir, "ShutdownDuration.json"); - PATH_TMP = PATH + ".tmp"; // Initialize the terminator // (normally, this is done through the manifest file, but xpcshell @@ -44,23 +41,12 @@ add_task(async function init() { terminator = Cc["@mozilla.org/toolkit/shutdown-terminator;1"].createInstance( Ci.nsIObserver ); -}); - -var promiseShutdownDurationData = async function () { - // Wait until PATH exists. - // Timeout if it is never created. - while (true) { - if (await IOUtils.exists(PATH)) { - break; - } - - // Wait just a very short period to not increase measured values. - // Usually the file should appear almost immediately. - await new Promise(resolve => setTimeout(resolve, 50)); - } - return IOUtils.readJSON(PATH); -}; + Assert.ok( + terminator instanceof Ci.nsITerminatorTest, + "Terminator should implement nsITerminatorTest" + ); +}); var currentPhase = 0; @@ -72,13 +58,16 @@ var advancePhase = async function () { terminator.observe(null, key, null); await new Promise(resolve => setTimeout(resolve, msDuration)); - let data = await promiseShutdownDurationData(); + let data = terminator.getTicksForShutdownPhases(); - Assert.ok(KEYS[currentPhase] in data, "The file contains the expected key"); + Assert.ok( + KEYS[currentPhase] in data, + "The KEYS object contains the expected key" + ); Assert.equal( Object.keys(data).length, currentPhase + 1, - "File does not contain more durations than expected" + "KEYS object does not contain more durations than expected" ); DATA[currentPhase] = data; @@ -108,9 +97,6 @@ add_task(async function test_record() { morePhases = await advancePhase(); - await IOUtils.remove(PATH); - await IOUtils.remove(PATH_TMP); - // We measure the effective time that passed as wall-clock and include all // file IO overhead as the terminator will do so in its measurement, too. MeasuredDurations[currentPhase - 1] = Math.floor( @@ -166,6 +152,6 @@ add_task(async function test_record() { .sort() .join(", "), KEYS.sort().join(", "), - "The last file contains all expected keys" + "The KEYS object contains all expected keys" ); }); diff --git a/toolkit/components/terminator/tests/xpcshell/test_terminator_reload.js b/toolkit/components/terminator/tests/xpcshell/test_terminator_reload.js deleted file mode 100644 index 79aecd818b..0000000000 --- a/toolkit/components/terminator/tests/xpcshell/test_terminator_reload.js +++ /dev/null @@ -1,88 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - -"use strict"; - -// Test that the Shutdown Terminator reloads durations correctly - -const HISTOGRAMS = { - "quit-application": "SHUTDOWN_PHASE_DURATION_TICKS_QUIT_APPLICATION", - "profile-change-net-teardown": - "SHUTDOWN_PHASE_DURATION_TICKS_PROFILE_CHANGE_NET_TEARDOWN", - "profile-change-teardown": - "SHUTDOWN_PHASE_DURATION_TICKS_PROFILE_CHANGE_TEARDOWN", - "profile-before-change": - "SHUTDOWN_PHASE_DURATION_TICKS_PROFILE_BEFORE_CHANGE", - "profile-before-change-qm": - "SHUTDOWN_PHASE_DURATION_TICKS_PROFILE_BEFORE_CHANGE_QM", - "xpcom-will-shutdown": "SHUTDOWN_PHASE_DURATION_TICKS_XPCOM_WILL_SHUTDOWN", - "xpcom-shutdown": "SHUTDOWN_PHASE_DURATION_TICKS_XPCOM_SHUTDOWN", -}; - -let PATH; - -add_setup(async function init() { - do_get_profile(); - PATH = PathUtils.join(PathUtils.localProfileDir, "ShutdownDuration.json"); -}); - -add_task(async function test_reload() { - info("Forging data"); - let data = {}; - let telemetrySnapshots = Services.telemetry.getSnapshotForHistograms( - "main", - false /* clear */ - ).parent; - let i = 0; - for (let k of Object.keys(HISTOGRAMS)) { - let id = HISTOGRAMS[k]; - data[k] = i++; - Assert.equal( - telemetrySnapshots[id] || undefined, - undefined, - "Histogram " + id + " is empty" - ); - } - - // Extra fields that nsTerminator reports that we do not have histograms for. - data["xpcom-shutdown-threads"] = 123; - data.XPCOMShutdownFinal = 456; - data.CCPostLastCycleCollection = 789; - - await IOUtils.writeJSON(PATH, data); - - const TOPIC = "shutdown-terminator-telemetry-updated"; - - let wait = new Promise(resolve => - Services.obs.addObserver(function observer() { - info("Telemetry has been updated"); - Services.obs.removeObserver(observer, TOPIC); - resolve(); - }, TOPIC) - ); - - info("Starting nsTerminatorTelemetry"); - let tt = Cc[ - "@mozilla.org/toolkit/shutdown-terminator-telemetry;1" - ].createInstance(Ci.nsIObserver); - tt.observe(null, "profile-after-change", ""); - - info("Waiting until telemetry is updated"); - // Now wait until Telemetry is updated - await wait; - - telemetrySnapshots = Services.telemetry.getSnapshotForHistograms( - "main", - false /* clear */ - ).parent; - for (let k of Object.keys(HISTOGRAMS)) { - let id = HISTOGRAMS[k]; - info("Testing histogram " + id); - let snapshot = telemetrySnapshots[id]; - let count = 0; - for (let x of Object.values(snapshot.values)) { - count += x; - } - Assert.equal(count, 1, "We have added one item"); - } -}); diff --git a/toolkit/components/terminator/tests/xpcshell/xpcshell.toml b/toolkit/components/terminator/tests/xpcshell/xpcshell.toml index cb328ca2c8..67cc36f265 100644 --- a/toolkit/components/terminator/tests/xpcshell/xpcshell.toml +++ b/toolkit/components/terminator/tests/xpcshell/xpcshell.toml @@ -1,15 +1,10 @@ [DEFAULT] head = "" -["test_terminator_record.js"] +["test_terminator_advance_phases.js"] skip-if = [ "debug", "asan", # Disabled by bug 1242084, bug 1255484 will enable it again "ccov", # Bug 1607583 tracks the ccov failure "tsan", # Bug 1683730 made this timeout for tsan. ] -run-sequentially = "very high failure rate in parallel" - -["test_terminator_reload.js"] -skip-if = ["os == 'android'"] -run-sequentially = "very high failure rate in parallel" |