Code: Select all
const Cc = Components.classes, Ci = Components.interfaces, Cu = Components.utils;
const gMgr = Cc['@mozilla.org/memory-reporter-manager;1'].getService(Ci.nsIMemoryReporterManager);
Cu.import("resource://gre/modules/Services.jsm");
function onTabClose() {
// gc
Services.obs.notifyObservers(null, 'child-gc-request', null);
Cu.forceGC();
// minimize memory usage
Services.obs.notifyObservers(null, 'child-mmu-request', null);
gMgr.minimizeMemoryUsage(() => {});
}
const windowListener = {
onOpenWindow(xulWindow) {
const domWindow = xulWindow.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindow);
domWindow.addEventListener('load', function onLoad() {
domWindow.removeEventListener('load', onLoad);
if(domWindow.document.documentElement.getAttribute('windowtype') !== 'navigator:browser')
return;
domWindow.gBrowser.tabContainer.addEventListener('TabClose', onTabClose);
});
},
onCloseWindow(xulWindow) {
const domWindow = xulWindow.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindow);
if(domWindow.document.documentElement.getAttribute('windowtype') !== 'navigator:browser')
return;
domWindow.gBrowser.tabContainer.removeEventListener('TabClose', onTabClose);
},
};
function startup(data, reason) {
Services.wm.addListener(windowListener);
}
function shutdown(data, reason) {
Services.wm.removeListener(windowListener);
}
function install() {}
function uninstall() {}
i see that idle/tab close gc was once implemented but reverted due to performance issues recently although i didnt feel a big perf drop

