Не, 0.0.7.0.0.21 на 91 ставить не следует, там есть косяк несовместимости.
А нет никакого списка кнопок работающих на новых версиях? Переползать помаленьку нужно, только кнопки и держут. Их не так много, но без них не комфортно.
Отсутствует
Dumby
В 93 не срабатывает этот код ... Ставлю в ini. В 92 - работает...
Отредактировано ВВП (02-11-2021 10:51:08)
Отсутствует
Dumby
В 94 скрипт памяти заманался рихтовать . Вроде все показывает, но моя фишка чистит память, а индикатор не реагирует..
(async id => ({ delay: 2e3, get limit() { var mb = 950 * 950; delete this.limit; return this.limit = this.notMulti ? 900 * mb // not multiprocess, 900MB : 1.1 * 950 * mb; // multiprocess, 1.1GB }, xul: ` <hbox id="${id}" value="ram" tooltiptext="ЛКМ: Очистить Память" > <label id="${id += "-label"}"/> </hbox> `, css: ` min-height: 26px !important; height: 26px !important; border-radius: 3px !important; padding: 0px 5px 0px !important; color: #00ffff !important; font-size: 15px !important; margin: 0px 1px 1px 3px !important; font-weight: 400 !important; font-family: segoe ui !important; background: linear-gradient(rgb(72, 85, 108),rgb(20, 25, 34)) !important; `, launch() { var file = Services.dirsvc.get("ProfD", Ci.nsIFile); ["memory", "start.vbs"].forEach(file.append); (this.launch = file.launch)(); }, val: "", init(topic, mm) { Services.obs.addObserver(mm = this, topic); Services.obs.addObserver(function quit(s, t) { this.timer?.cancel(); Services.obs.removeObserver(mm, topic); Services.obs.removeObserver(quit, t); }, "quit-application-granted"); }, observe(win) { var df = win.MozXULElement.parseXULToFragment(this.xul); this.click = e => e.button || this.launch(); this.notMulti = !Services.appinfo.browserTabsRemoteAutostart; this.timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer); (this.observe = async win => { this.timer.cancel(); await new Promise(win.requestAnimationFrame); var clone = win.document.importNode(df, true); var hbox = clone.firstChild; win.document.getElementById("page-action-buttons").append(clone); hbox.onclick = this.click; hbox.style.cssText = this.css; hbox.firstChild.style.setProperty("margin", "0", "important"); this.notify(); })(win); }, async notify() { var info = await ChromeUtils.requestProcInfo(); var bytes = info.memory; for(var child of info.children) bytes += child.memory; this.timer.initWithCallback(this, this.delay, this.timer.TYPE_ONE_SHOT); var prev = this.val; if ((this.val = this.mgb(bytes)) != prev) for(var win of CustomizableUI.windows) { var lab = win.document.getElementById(id); if (lab) lab.value = this.val; } }, mgb: bytes => bytes < 1073741824 ? String(Math.round(bytes / 1048576)) : (bytes / 1073741824).toFixed(2) }).init("browser-delayed-startup-finished"))("ucf-mem-indicator");
Кстати, а никак старую кнопку к мультирежиму прикрутить ? Она как раз работает , ну и стили из справки по уму (перенести в INI)
custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3Eram%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/jpeg%3Bbase64%2C%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%0A%0A//%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A//%20Memory%20Monitor%20................................%0A//%20https%3A//forum.mozilla-russia.org/viewtopic.php%3Fid%3D52237%0A//%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0Avar%20idbut%3Dthis.id%3B%0Avar%20urlbar%20%3D%20document.getElementById%28%22page-action-buttons%22%29%3B%0Avar%20button%20%3D%20document.getElementById%28idbut%29%3B%0Aurlbar.insertBefore%28button%2C%20urlbar.Child%29%3B%0A%0Avar%20style%20%3D%20custombutton.buttonGetHelp%28self%29.replace%28/id/g%2C%20_id%29%3B%0Avar%20uri%20%3D%20makeURI%28%27data%3Atext/css%2C%27+%20encodeURIComponent%28style%29%29%3B%0Avar%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%3B%0Asss.loadAndRegisterSheet%28uri%2C%200%29%3B%0A%0A//%20%u041F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u043A%u043D%u043E%u043F%u043A%u0438%20................................%0Athis.tooltipText%20%3D%20%22%u041B%3A%20%u041F%u0440%u0438%u043D%u0443%u0434%u0438%u0442%u0435%u043B%u044C%u043D%u0430%u044F%20%u043E%u0447%u0438%u0441%u0442%u043A%u0430%20%u043F%u0430%u043C%u044F%u0442%u0438%22%3B%20%20%20%20%20%20%20%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A//%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%20%u0444%u0443%u043D%u043A%u0446%u0438%u0439%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20................................%0Athis.onclick%20%3D%20this.oncontextmenu%20%3D%20function%28event%29%20%7B%0A%20%20%20%20%0A%20%20%20%20%20%0A%20%20%20%20%20%20if%20%28event.button%20%3D%3D%200%29%20%7B%20%0A%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20var%20file%20%3D%20Services.dirsvc.get%28%27ProfD%27%2C%20Ci.nsIFile%29%3B%0A%20%20%20%20%20%20%20%20%20file.initWithPath%28file.path%20+%20%22%5C%5Cmemory%5C%5Cstart.vbs%22%29%3B%20%0A%20%20%20%20%20%20%20%20%20file.launch%28%29%3B%0A%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%0A%7D%3B%0Athis.oncontextmenu%20%3De%3D%3E%20%7B%20e.button%20%26%26%20%21e.ctrlKey%20%26%26%20e.preventDefault%28%29%20%7D%3B%0A%20%20%20%20%20%20%20%20%0A//%20%u041F%u043E%u043A%u0430%u0437%u044B%u0432%u0430%u0442%u044C%20%u043F%u043E%u0442%u0440%u0435%u0431%u043B%u0435%u043D%u0438%u0435%20%u043F%u0430%u043C%u044F%u0442%u0438%20%u043D%u0430%20%u0442%u0435%u043A%u0443%u0449%u0435%u0439%20%u043A%u043D%u043E%u043F%u043A%u0435%0A%28function%20%28%29%20%7B%20%0Aself.timer%20%3D%20setInterval%28function%28%29%20%7B%0A%20%20%20%20%20%20var%20memory%20%3D%20getMemory%28%29%3B%0A%20%20%20%20%20%20self.label%20%3D%20getMemory%28%29%0A%20%20%20%20%20%20if%20%28%20memory%20%3E%20140%20%29%20%7B%0A%20%20%20%20%20%20%20%20var%20file%20%3D%20Services.dirsvc.get%28%27ProfD%27%2C%20Ci.nsIFile%29%3B%0A%20%20%20%20%20%20%20%20%20file.initWithPath%28file.path%20+%20%22%5C%5Cmemory%5C%5Cstart.vbs%22%29%3B%20%0A%20%20%20%20%20%20%20%20%20file.launch%28%29%3B%0A%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%7D%2C%202000%20%29%3B%20%20%20%20%20%0A%20%0A//%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u0432%u0441%u044E%20%u0437%u0430%u043D%u0438%u043C%u0430%u0435%u043C%u0443%u044E%20%u043E%u043F%u0435%u0440%u0430%u0442%u0438%u0432%u043D%u0443%u044E%20%u043F%u0430%u043C%u044F%u0442%u044C%20%u0432%20MB%20....%0A%20%20%20function%20getMemory%28%29%20%7B%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20var%20reporterManager%20%3D%20Cc%5B%22@mozilla.org/memory-reporter-manager%3B1%22%5D.getService%28Ci.nsIMemoryReporterManager%29%3B%0A%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20e%20%3D%20reporterManager.enumerateReporters%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20while%20%28%20e.hasMoreElements%28%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20mr%20%3D%20e.getNext%28%29.QueryInterface%28Ci.nsIMemoryReporter%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%5Bmr.path%5D%20%3D%20mr%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20var%20memory%20%3D%20self%5B%22resident%22%5D.amount%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20catch%28e%29%20%7B%20var%20memory%20%3D%20reporterManager.resident%3B%20%7D%20//%20FF26%20-%20Nightly%0A%20%20%20%20%20%0A%20%20%20%20%20%20return%20%28%20Math.round%28%20memory/1048576%20%29%20%29%3B%0A%20%20%20%7D%3B%20%20%20%20%20%0A%0A//%20%u0421%u0442%u0438%u043B%u044C%20%u0434%u043E%u0431%u0430%u0432%u043B%u044F%u0435%u0442%20%u0442%u0435%u043A%u0441%u0442%20%u043D%u0430%20%u043A%u043D%u043E%u043F%u043A%u0443%20....%0A%20%20%20var%20uri%20%3D%20makeURI%28%27data%3Atext/css%2C%27+%20encodeURIComponent%28%27%5C%0A%20%20%20%25button%25%20.toolbarbutton-icon%20%7B%5C%0A%20%20%20%20%20display%3A%20none%20%21important%3B%5C%0A%20%20%20%7D%5C%0A%20%20%20%25button%25%20.toolbarbutton-text%20%7B%5C%0A%20%20%20%20%20display%3A%20-moz-box%20%21important%3B%5C%0A%20%20%20%7D%5C%0A%20%20%20%25button%25%20%7B%5C%0A%20%20%20%20%20-moz-box-orient%3A%20horizontal%20%21important%3B%5C%0A%20%20%20%7D%5C%0A%20%20%20%27.replace%28/%25button%25/g%2C%20%22%23%22%20+%20_id%29%20%29%29%3B%0A%20%20%20const%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%3B%0A%20%20%20sss.loadAndRegisterSheet%28uri%2C%20sss.AGENT_SHEET%29%3B%0A%20%20%20%0A//%20%u0423%u0434%u0430%u043B%u044F%u0442%u044C%20%u0441%u0447%u0451%u0442%u0447%u0438%u043A%20%u043F%u0430%u043C%u044F%u0442%u0438%20%u0438%20%u0434%u0440%u0443%u0433%u0438%u0435%20%u0438%u0437%u043C%u0435%u043D%u0435%u043D%u0438%u044F%20....%0A%20%20addDestructor%28function%28%29%20%7B%0A%20%20%20%20%20%20try%20%7B%20window.clearTimeout%28%20self.timer%20%29%20%7D%20catch%28e%29%20%7B%7D%3B%0A%20%20%20%7D%29%3B%0A%7D%29%28%29%3B%0A%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%23id%20.toolbarbutton-text%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20min-height%3A%2026px%20%21important%3B%0A%09%09height%3A%2026px%20%21important%3B%0A%09%09border-radius%3A%203px%20%21important%3B%0A%09%09padding%3A%200px%205px%200px%20%21important%3B%0A%09%09font-family%3A%20segoe%20ui%20%21important%3B%0A%09%09color%3A%20%2300ffff%20%21important%3B%0A%09%09font-size%3A%2015px%20%21important%3B%0A%09%09margin-bottom%3A%202px%20%21important%3B%0A%09%09margin-right%3A%201px%20%21important%3B%0A%09%09margin-left%3A%203px%20%21important%3B%0A%09%09background%3A%20linear-gradient%28rgb%2872%2C%2085%2C%20108%29%2Crgb%2820%2C%2025%2C%2034%29%29%20%21important%3B%0A%20%20%20%20%20%0A%7D%0A%0A%23id%20.toolbarbutton-icon%20%7B%0A%20%20display%3A%20none%20%21important%3B%0A%7D%20%0A%0A%0A%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E
Отредактировано ВВП (06-11-2021 13:35:55)
Отсутствует
Есть ли способ открывать определённый ключ about:config ? Например: about:config#network.proxy.autoconfig_url ? Если нет, то
как из JS-кода отправить в строку ввода "Искать параметр по имени" название нужного параметра ?
Services.wm.getMostRecentWindow("navigator:browser").switchToTabHavingURI("about:config", true, {relatedToCurrent: true, triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal()});
Отредактировано Dobrov (07-11-2021 07:38:44)
Отсутствует
Dobrov
Warning, надеюсь, отключён
var filter = "network.proxy.autoconfig_url"; var win = Services.wm.getMostRecentWindow("navigator:browser"); var found = win.switchToTabHavingURI("about:config", true, { relatedToCurrent: true, triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal() }); var setFilter = (e, win) => { var input = (e?.target || win.content.document) .getElementById("about-config-search"); if (e || input.value != filter) input.setUserInput(filter); } win = Services.wm.getMostRecentWindow("navigator:browser"); if (found) setFilter(null, win); else win.gBrowser.selectedBrowser.addEventListener("pageshow", setFilter, {once: true});
Отсутствует
Dumby 1. подскажи пожалуста уже этот код не работает
(async () => { var url = `${ AppConstants.SOURCE_REVISION_URL.replace("rev", "raw-file") }/dom/events/${ {win: "win", linux: "unix", macosx: "mac"}[AppConstants.platform] || "unix" }/ShortcutKeyDefinitions.cpp`; var text = await (await fetch(url)).text(); var commands = text.match(/cmd_[^"]+/g); // alert(commands.join("\n")); var text = commands.join("\n"); var file = Services.dirsvc.get('ProfD', Ci.nsIFile); file.append("TextToEditor.txt"); custombuttonsUtils.writeFile(file.path, text); file.launch(); })();
((id, g, css) => { addDestructor(r => r[5] == "e" && g[id]?.destroy(true)); if (g[id]) return; var btnActions = ["preferences", "toggle-disabled", "remove", "install-update"]; var {Array, Set} = Cu.getGlobalForObject(g); var {obs, focus, wm} = Services, cn = "cb-cloned-buttons-container"; var topics = ["chrome-document-loaded", "quit-application-granted"]; (g[id] = { init() { for(var topic of topics) obs.addObserver(this, topic); this.wins(); }, destroy(wins) { delete g[id]; for(var topic of topics) obs.removeObserver(this, topic); wins && this.wins("destroyDoc"); }, isTarget: doc => doc.documentURI == "about:addons", wins(method = "initDoc") { for(var {document: doc} of new Set(Array.from( g.AddonManagerInternal.addonListeners, Cu.getGlobalForObject ))) doc && this.isTarget(doc) && this[method](doc); }, initDoc(doc) { this.btnActions = btnActions.map(action => `panel-list > panel-item[action="${action}"]`); var url = "cb" + (this.url = "data:text/css;charset=utf-8," + encodeURIComponent(css.replace(/;/g, " !important;")) ); this.type = doc.ownerGlobal.windowUtils.USER_SHEET; (this.initDoc = doc => { doc.addEventListener("unload", this); doc.addEventListener("update", this, true); doc.ownerGlobal.windowUtils.loadSheetUsingURIString(url, this.type); for(var card of doc.getElementsByTagName("addon-card")) this.onCard(card); })(doc); }, destroyDoc(doc) { for(var span of Array.from(doc.getElementsByClassName(cn))) span.remove(); doc.ownerGlobal.windowUtils.removeSheetUsingURIString(this.url, this.type); this.unload(doc); }, observe(doc, topic) { topic[0] == "q" ? this.destroy() : this.isTarget(doc) && this.initDoc(doc); }, handleEvent(e) { this[e.type](e.target); }, unload(doc) { doc.removeEventListener("update", this, true); doc.removeEventListener("unload", this); }, update(card) { card.nodeName == "ADDON-CARD" && this.onCard(card); }, onCard(card, again) { var btnsParent = card.querySelector("addon-options"); if (!btnsParent) return again || card.ownerGlobal .requestAnimationFrame(() => this.onCard(card, true)); var doc = card.ownerDocument; var [span] = card.getElementsByClassName(cn); if (span) span.textContent = ""; else { card.querySelector("button.more-options-button") .before(span = doc.createElement("span")); span.className = cn; } for(var item of this.btnActions.map(this.btns, btnsParent)) if (item) span.append(item), item.shadowRoot.querySelector("button") .classList.add("cb-cloned-button"); }, btns(sel) { var item, doc = this.ownerDocument, card = this.parentNode; if ( sel.includes("toggle-disabled") && card.querySelector('input[action="toggle-disabled"]') ) { var item = doc.createElement("panel-item"); item.setAttribute("action", "toggle-disabled"); doc.l10n.setAttributes(item, `${ card.getAttribute("active") == "true" ? "dis" : "en" }able-addon-button`); } else item = this.querySelector(sel); return item?.cloneNode(true); } }).init(); })("CBAboutAddonsHTMLButtonizer", Cu.import("resource://gre/modules/AddonManager.jsm", {}), ` span.cb-cloned-buttons-container { display: flex; } button.cb-cloned-button { appearance: none; padding: 1px 6px 3px 6px; margin: 0 1px; background-image: none; border: 1px solid var(--in-content-box-border-color); border-radius: 0px; font-size: 13px; font-family: Segoe UI; } button.cb-cloned-button:hover { background-color: gold; } button.cb-cloned-button:after, input[action="toggle-disabled"] { display: none; } `);
Отсутствует
2. Дополнительные кнопки на странице about:addons для аддонов, плагинов, тем, CB
скрытый текст
Win7
Отсутствует
kokoss спасибо
Отсутствует
выходит все , кранты
Ну да, теперь отдаётся нечто другое.
Пишут: «On Windows this will return the Commit Size.».
По значениям выглядит похожим на строки «... MB ── private» на странице about:memory
и на значения в колонке «Private Bytes» в программе Process Explorer.
А "очистка", видимо, на эти показатели не влияет.
Допустим, оставить. Код на замену
(async id => ({ delay: 2e3, xul: ` <hbox id="${id}" value="ram" tooltiptext="ЛКМ: Очистить Память" > <label id="${id += "-label"}"/> </hbox> `, css: ` min-height: 26px !important; height: 26px !important; border-radius: 3px !important; padding: 0px 5px 0px !important; color: #00ffff !important; font-size: 15px !important; margin: 0px 1px 1px 3px !important; font-weight: 400 !important; font-family: segoe ui !important; background: linear-gradient(rgb(72, 85, 108),rgb(20, 25, 34)) !important; `, launch() { var file = Services.dirsvc.get("ProfD", Ci.nsIFile); ["memory", "start.vbs"].forEach(file.append); (this.launch = file.launch)(); }, val: "", name: "UCFMemIndReporter", init(topic, mm) { Services.obs.addObserver(mm = this, topic); Services.obs.addObserver(function quit(s, t) { this.timer?.cancel(); Services.obs.removeObserver(mm, topic); Services.obs.removeObserver(quit, t); }, "quit-application-granted"); }, observe(win) { var df = win.MozXULElement.parseXULToFragment(this.xul); this.click = e => e.button || this.launch(); this.timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer); ChromeUtils.registerProcessActor(this.name, { includeParent: true, child: {moduleURI: "chrome://user_chrome_files/content/custom_scripts/memreporter.jsm"} }); (this.observe = async win => { this.timer.cancel(); await new Promise(win.requestAnimationFrame); var clone = win.document.importNode(df, true); var hbox = clone.firstChild; win.document.getElementById("page-action-buttons").append(clone); hbox.onclick = this.click; hbox.style.cssText = this.css; hbox.firstChild.style.setProperty("margin", "0", "important"); this.notify(); })(win); }, async notify() { var bytes = 0, pids = []; for(var dp of ChromeUtils.getAllDOMProcesses()) try { let [pid, mem] = await dp.getActor(this.name).sendQuery(""); pids.push(pid); bytes += mem; } catch {} var {children} = await ChromeUtils.requestProcInfo(); for(var child of children) if (!pids.includes(child.pid)) bytes += child.memory; this.timer.initWithCallback(this, this.delay, this.timer.TYPE_ONE_SHOT); var prev = this.val; if ((this.val = this.mgb(bytes)) != prev) for(var win of CustomizableUI.windows) { var lab = win.document.getElementById(id); if (lab) lab.value = this.val; } }, mgb: bytes => bytes < 1073741824 ? String(Math.round(bytes / 1048576)) : (bytes / 1073741824).toFixed(2) }).init("browser-delayed-startup-finished"))("ucf-mem-mix-indicator");
и рядом создать файл memreporter.jsm
var EXPORTED_SYMBOLS = ["UCFMemIndReporterChild"]; var ai = Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULRuntime); var prop = ai.processType == ai.PROCESS_TYPE_DEFAULT ? "resident" : "residentUnique"; var pid = ai.processID; var mrm = Cc["@mozilla.org/memory-reporter-manager;1"].getService(Ci.nsIMemoryReporterManager); class UCFMemIndReporterChild extends JSProcessActorChild {receiveMessage() {return [pid, mrm[prop]];}}
Подсчёт такой:
родительский процесс — nsIMemoryReporterManager.resident
дочерние DOM-процессы — nsIMemoryReporterManager.residentUnique
остальные процессы — ChildProcInfoDictionary.memory
Тогда на memreduct реагирует, и даже слишком,
какая-то другая крайность, совсем нереалистично.
уже этот код не работает
Ага. Собрали всё в один файл, зацени.
То есть нужно убрать из адеса субчасть операционной системы. Вариант:
(async () => { var url = `${ AppConstants.SOURCE_REVISION_URL.replace("rev", "raw-file") }/dom/events/ShortcutKeyDefinitions.cpp`; var text = await (await fetch(url)).text(); var platform = {win: "Win", linux: "Linux", macosx: "macOS"}[AppConstants.platform]; var re = new RegExp( '(?:u"keypress", +)' + '(?:u")?(.+?)(?:")?, +'.repeat(3) + `(?:u")(cmd_.+)(?="},.+${platform}(.+)?$)`, "gm" ); var pad = function(arr) { return `${arr[0].padEnd(this, " ")} ${arr[1]}`; } var result = []; var blocks = text.split("ShortcutKeyData ShortcutKeys::s").slice(1); for(var block of blocks) { var res, max = 0, arr = []; while((res = re.exec(block))) { var [, vk, key, mod, cmd] = res; if (key == " ") key = "<Space>"; max = Math.max(max, cmd.length); if (mod != "nullptr") { var mods = []; if (mod.includes("control")) mods.push("Ctrl"); if (mod.includes("accel")) mods.push("Accel"); if (mod.includes("shift")) mods.push("Shift"); if (mod.includes("alt")) mods.push("Alt"); mod = mods.join("+") + "+"; } else mod = ""; arr.push([cmd, mod + (vk != "nullptr" ? vk : key)]); } arr = arr.map(pad, max); arr.unshift(block.slice(0, block.indexOf("[")) + ":\n"); result.push(arr.join("\n")); } text = result.join("\n\n\n"); var file = Services.dirsvc.get("ProfD", Ci.nsIFile); file.append("TextToEditor.txt"); cbu.writeFile(file.path, text); file.launch(); })();
Отредактировано Dumby (08-11-2021 15:42:27)
Отсутствует
Dumby
Ладно, about:processes - не изменяются значения, а автоочистку прикрутить тоже никак?
"Andrey_Krropotkin пишет
уже этот код не работает"
И что это за код? Для чего?
Отредактировано ВВП (08-11-2021 17:58:23)
Отсутствует
voqabuhe
Рядом с custom_script.js надо иметь файл memreporter.jsm . Такого содержания:
(async id => ({ delay: 2e3, xul: ` <hbox id="${id}" value="ram" tooltiptext="ЛКМ: Очистить Память" > <label id="${id += "-label"}"/> </hbox> `, css: ` min-height: 26px !important; height: 26px !important; border-radius: 3px !important; padding: 0px 4px 0px !important; color: #00ffff !important; font-size: 15px !important; margin: 0px 1px 1px 5px !important; font-weight: 400 !important; font-family: segoe ui !important; background: linear-gradient(rgb(72, 85, 108),rgb(20, 25, 34)) !important; `, launch() { var file = Services.dirsvc.get("ProfD", Ci.nsIFile); ["memory", "start.vbs"].forEach(file.append); (this.launch = file.launch)(); }, val: "", name: "UCFMemIndReporter", init(topic, mm) { Services.obs.addObserver(mm = this, topic); Services.obs.addObserver(function quit(s, t) { this.timer?.cancel(); Services.obs.removeObserver(mm, topic); Services.obs.removeObserver(quit, t); }, "quit-application-granted"); }, observe(win) { var df = win.MozXULElement.parseXULToFragment(this.xul); this.click = e => e.button || this.launch(); this.timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer); ChromeUtils.registerProcessActor(this.name, { includeParent: true, child: {moduleURI: "chrome://user_chrome_files/content/custom_scripts/memreporter.jsm"} }); (this.observe = async win => { this.timer.cancel(); await new Promise(win.requestAnimationFrame); var clone = win.document.importNode(df, true); var hbox = clone.firstChild; win.document.getElementById("page-action-buttons").append(clone); hbox.onclick = this.click; hbox.style.cssText = this.css; hbox.firstChild.style.setProperty("margin", "0", "important"); this.notify(); })(win); }, async notify() { var bytes = 0, pids = []; for(var dp of ChromeUtils.getAllDOMProcesses()) try { let [pid, mem] = await dp.getActor(this.name).sendQuery(""); pids.push(pid); bytes += mem; } catch {} var {children} = await ChromeUtils.requestProcInfo(); for(var child of children) if (!pids.includes(child.pid)) bytes += child.memory; this.timer.initWithCallback(this, this.delay, this.timer.TYPE_ONE_SHOT); var prev = this.val; if ((this.val = this.mgb(bytes)) != prev) for(var win of CustomizableUI.windows) { var lab = win.document.getElementById(id); if (lab) lab.value = this.val; } bytes > 950000000 && this.launch(); }, mgb: bytes => bytes < 1073741824 ? String(Math.round(bytes / 1048576)) : (bytes / 1073741824).toFixed(2) }).init("browser-delayed-startup-finished"))("ucf-mem-mix-indicator");
И в профиле иметь эту папку https://www.upload.ee/files/13618312/memory.rar.html
Вида х64 !
Отредактировано ВВП (08-11-2021 21:39:30)
Отсутствует
ВВП
Спасибо. А по сравнению с соответствующей кнопкой на about:memory есть преимущество в плане очистки, в смысле больше освобождается памяти, или нет?
Отредактировано voqabuhe (08-11-2021 22:33:37)
Отсутствует
voqabuhe
Так нажми на кнопки и сравни.
Для тех кто не продвинулся, типа, скрипты не подключаются ,кнопка...ДА, и профиль надо чистить поле рихтовки. startupCache - убрать !
custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u0412%u043B%u043B/%u0412%u044B%u043A%u043B%20CustomScripts%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACq0lEQVR42n2TW0hUQRjH/zPnshd3dU3OpruaQdJFQirQsMWISAjqISiMVHopiSgEoR6CXqKIeggSeygqHwozHzT0LUgI8vIQFkWhJKaQbd42V3fbc/bcprNnY3Vja+CcGb75vt/85883BP8YksBvLCW0hICS76Y2P68b4Vx55O/AYbfnyBVfSVuNw1Pt5Gk+mImkosXfJWMfbscWOvoVuScnQCBwtEulHefLKloQjwIrP7PxzjzA7UHn7EzPxdjSOdlkK1mAh1Lw6dmtlc2Y/AwwIx3s60vPDacATbGyBSAQRPfXLy8bY9Gj1o5uA0Iu58GhiqpBhKcB01g7dXjYnlgotCaZcwBeD+q/TTe90vVnNqDLH3jRWFhwjM3/yCSaNC2O6DoYz2fiVDVA/H70zs2OnEgodcRJiHciEJwqhy7punU6R62PB9/UDJxpsYu06l2gVMhAONGBsJJIbo+ubiMBntvyqbRk3KupQko8ISkLTBBNgzg6lgFkhtttwSgSmoqdS8shUmwBPgal8QLCbADMdB6TE3CPvM8CGF637Ttn/X/pGqoWlvcR63aet5ukyUqBL1YJswHENMFcLngGBu3CxKHaP9qtUpOBtxRMK7K8Zy66w3bqlt/7/JLkOxnXdJCUfDAwUUT+wGu7Lla/F+DXPMizTL2/GHlzISIfsAHlIq0ZKi8cLRCd1EgZaQHyb94DrdptF6hdnZC7H6flEwrF1FA3Ezk+oZp9mUZq8YntdzdLrRoj0JMKeMZltbhhXY8XBIjW+mo40nsnojSkHFvfrHyjT7hxLei7HHA6qaaZMFQts+nKc2BRVnA9vNL5KKq2WaHVnI+pTCD7T0vu1jqvo3aDrhVRjpAo46LDcXXsSSTxYEpl/f99jetGkYeiONV8cROL1jyXK+k3s3kAMT5aaccAAAAASUVORK5CYII%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%0Athis._handleClick%20%3D%28%29%3D%3E%20%7B%0A%20%20%20cbu.setPrefs%28s%2C%20cbu.getPrefs%28s%29%20%3D%3D%20true%20%3F%20false%20%3A%20true%29%3B%0A%7D%3B%0Avar%20s%20%3D%20%22extensions.user_chrome_files.custom_script%22%3B%0A%0Afunction%20toggleImage%28%29%20%7B%0A%20%20%20var%20val%20%3D%20cbu.getPrefs%28s%29%3B%0A%20%20%20var%20%7Bicon%7D%20%3D%20self%3B%0A%20%20%20icon.src%20%3D%20cbu.getPrefs%28s%29%20%3D%3D%20false%0A%20%20%20%3F%20self.image%0A%20%20%20%3A%20%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAqNJREFUeNp8k09IFFEcx3/vzZudUVd3VsVsNUEhBOmUbBSh/blo1CEirGjzZh2kDaluHYSEbpFIghR18FBCHqJDFERIddMiqKBDkImr667urKszzsx7b3pv0TFraeDH+/f7fd73N7/fQ77vQ6lPC9fuChn1uwEh5JqLaaeQSZXyQ38DatqOnWw60T+gN8fjVDWquI8AOebaxuynz6nXoyMrX15NlAQgHNJaewZH6ruTfVlLB75eAAzbcE+rhCqNQvbt6MSvyVtXmGfn5T7Zcmg9P/SwrvtGIr1gAmY2ILH3IFFdPOubyANZy0HBJhA9OnDOR7ohMjslLqdYOhjN8eN1Ry4nMnPLgFwXfMaKFi3DReMbTnGNXQdscwUi8d6uipaOnkBBrKP3qmWJKbUD0cjncOZ+CqjYIGg7Z8o9CKk6RPZf6hcqnmJF1SsrGuOHvXULVGCgIQblCofEwUp4kYzBy2sxoC4LAKoAg2NBuKm9HYXCezApM+qARAzwXEBSOuXgOhTG35k7qiMh0lTggCgFNRTWFC3SQEAQmesBIoIs6UKuIgJcj/9T8zIsgqUYmScrTnzsWbm0Zy4sy78pFWypiGrbJdRF3tIwF1DGxSgUrWZsZuVSmDNvzfw+NaUgUgyWDnJkfyjwKQNFqtu8AAvf1R/vp31mzxXLmJ4Zv7uRnedYtM6WisELDQEg0Sn6gW4Gixy9fBaWZx7fE33Ag06s3ndxuKXrdlIcg+N4oGhkR/5SBVFVAKzB7Js7k9mPYz07AKKmJLL39FBTx/WbuhHD3PfEpTQAhNRycApLMPdh+FHu65MBEbda8jGp4YbO2razyarGA4coidZgQcYsbxbmp2ey356Nufmfz//7GoMDhGoQqagXU+zT9YzwWyzl91uAAQDUCFTmpTZ8qAAAAABJRU5ErkJggg%3D%3D%22%3B%20%0A%20%20%20self.tooltipText%20%3D%20val%20%3F%20%27%u0414%u0430%20CustomScripts%27%20%3A%20%27%u041D%u0435%u0442%20CustomScripts%27%3B%20%0A%20%20%20cbu.setPrefs%28%22extensions.user_chrome_files.custom_script_win%22%2C%20val%20%3F%20true%20%3A%20false%29%3B%0A%7D%3B%0Athis.oncontextmenu%20%3De%3D%3E%20%7B%20e.button%20%26%26%20%21e.ctrlKey%20%26%26%20e.preventDefault%28%29%20%7D%3B%0AtoggleImage%28%29%3B%0AServices.prefs.addObserver%28%20s%2C%20toggleImage%2C%20false%20%29%3B%0AaddDestructor%28function%28%29%20%7B%20gPrefService.removeObserver%28%20s%2C%20toggleImage%2C%20false%20%29%20%7D%29%3B%20%20%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E
Отредактировано ВВП (09-11-2021 12:26:19)
Отсутствует
Dumby
Я извиняюсь, нельзя еще в кодом memory поработать ? Task - чуть не ноль показывает на пустой вкладке, а на индикаторе 140-160 мгб , в 93 - 60мгб. Кажись графич.редактор не трогает очистка...Это расхождение в цифрах парит немного...
Отсутствует