From 36d22d82aa202bb199967e9512281e9a53db42c9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 21:33:14 +0200 Subject: Adding upstream version 115.7.0esr. Signed-off-by: Daniel Baumann --- testing/mochitest/ShutdownLeaksCollector.sys.mjs | 61 ++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 testing/mochitest/ShutdownLeaksCollector.sys.mjs (limited to 'testing/mochitest/ShutdownLeaksCollector.sys.mjs') diff --git a/testing/mochitest/ShutdownLeaksCollector.sys.mjs b/testing/mochitest/ShutdownLeaksCollector.sys.mjs new file mode 100644 index 0000000000..44b2025429 --- /dev/null +++ b/testing/mochitest/ShutdownLeaksCollector.sys.mjs @@ -0,0 +1,61 @@ +/* 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/. */ + +import { setTimeout } from "resource://gre/modules/Timer.sys.mjs"; + +// This listens for the message "browser-test:collect-request". When it gets it, +// it runs some GCs and CCs, then prints out a message indicating the collections +// are complete. Mochitest uses this information to determine when windows and +// docshells should be destroyed. + +export var ContentCollector = { + init() { + let processType = Services.appinfo.processType; + if (processType == Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT) { + // In the main process, we handle triggering collections in browser-test.js + return; + } + + Services.cpmm.addMessageListener("browser-test:collect-request", this); + }, + + receiveMessage(aMessage) { + switch (aMessage.name) { + case "browser-test:collect-request": + Services.obs.notifyObservers(null, "memory-pressure", "heap-minimize"); + + Cu.forceGC(); + Cu.forceCC(); + + let shutdownCleanup = aCallback => { + Cu.schedulePreciseShrinkingGC(() => { + // Run the GC and CC a few times to make sure that as much + // as possible is freed. + Cu.forceGC(); + Cu.forceCC(); + aCallback(); + }); + }; + + shutdownCleanup(() => { + setTimeout(() => { + shutdownCleanup(() => { + this.finish(); + }); + }, 1000); + }); + + break; + } + }, + + finish() { + let pid = Services.appinfo.processID; + dump("Completed ShutdownLeaks collections in process " + pid + "\n"); + + Services.cpmm.removeMessageListener("browser-test:collect-request", this); + }, +}; + +ContentCollector.init(); -- cgit v1.2.3