mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2026-04-16 06:18:42 +02:00
ELECTRON: Mitigate issue of forcefullyCrashRenderer (#2597)
This commit is contained in:
@@ -43,7 +43,7 @@ async function createWindow(killall) {
|
|||||||
if (tracker.state.isMaximized) window.maximize();
|
if (tracker.state.isMaximized) window.maximize();
|
||||||
|
|
||||||
window.removeMenu();
|
window.removeMenu();
|
||||||
noScripts = killall ? { query: { noScripts: killall } } : {};
|
const noScripts = killall ? { query: { noScripts: killall } } : {};
|
||||||
window.loadFile("index.html", noScripts);
|
window.loadFile("index.html", noScripts);
|
||||||
window.once("ready-to-show", () => {
|
window.once("ready-to-show", () => {
|
||||||
utils.setZoomFactor(window, utils.getZoomFactor());
|
utils.setZoomFactor(window, utils.getZoomFactor());
|
||||||
|
|||||||
@@ -1,18 +1,55 @@
|
|||||||
|
/** @import { BrowserWindow } from "electron" */
|
||||||
/* eslint-disable @typescript-eslint/no-var-requires */
|
/* eslint-disable @typescript-eslint/no-var-requires */
|
||||||
const { dialog } = require("electron");
|
const { app, dialog } = require("electron");
|
||||||
const log = require("electron-log");
|
const log = require("electron-log");
|
||||||
const Store = require("electron-store");
|
const Store = require("electron-store");
|
||||||
const store = new Store();
|
const store = new Store();
|
||||||
const arg = require("arg");
|
const arg = require("arg");
|
||||||
|
|
||||||
|
/** @param {BrowserWindow} window */
|
||||||
|
function getRendererProcessUniqueId(window) {
|
||||||
|
const rendererProcesses = app
|
||||||
|
.getAppMetrics()
|
||||||
|
.filter((processMetric) => processMetric.pid === window.webContents.getOSProcessId());
|
||||||
|
if (rendererProcesses.length === 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
// This should never happen.
|
||||||
|
if (rendererProcesses.length > 1) {
|
||||||
|
log.error("Found more than 1 renderer process");
|
||||||
|
log.info(rendererProcesses);
|
||||||
|
}
|
||||||
|
const rendererProcess = rendererProcesses[0];
|
||||||
|
// Pid may be reused, so we need to use both pid and creationTime to uniquely identify the process.
|
||||||
|
return `${rendererProcess.pid}-${rendererProcess.creationTime}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {BrowserWindow} window
|
||||||
|
* @param {boolean} killScripts
|
||||||
|
*/
|
||||||
function reloadAndKill(window, killScripts) {
|
function reloadAndKill(window, killScripts) {
|
||||||
log.info("Reloading & Killing all scripts...");
|
log.info("Reloading & Killing all scripts...");
|
||||||
const zoomFactor = getZoomFactor();
|
const zoomFactor = getZoomFactor();
|
||||||
|
const currentRendererProcessUniqueId = getRendererProcessUniqueId(window);
|
||||||
|
log.debug(`Current renderer process unique id: ${currentRendererProcessUniqueId}`);
|
||||||
window.webContents.forcefullyCrashRenderer();
|
window.webContents.forcefullyCrashRenderer();
|
||||||
window.loadFile("index.html", killScripts ? { query: { noScripts: true } } : {});
|
window.loadFile("index.html", killScripts ? { query: { noScripts: true } } : {});
|
||||||
window.once("ready-to-show", () => {
|
window.once("ready-to-show", () => {
|
||||||
setZoomFactor(window, zoomFactor);
|
setZoomFactor(window, zoomFactor);
|
||||||
});
|
});
|
||||||
|
// Keep checking whether a new renderer process has been spawned. If not, call loadFile. We need to do this to
|
||||||
|
// mitigate the issue of forcefullyCrashRenderer.
|
||||||
|
// Check https://github.com/electron/electron/issues/48661 for more information.
|
||||||
|
const intervalId = setInterval(() => {
|
||||||
|
const rendererProcessUniqueId = getRendererProcessUniqueId(window);
|
||||||
|
log.debug(`Renderer process unique id: ${rendererProcessUniqueId}`);
|
||||||
|
if (rendererProcessUniqueId !== null && rendererProcessUniqueId !== currentRendererProcessUniqueId) {
|
||||||
|
clearInterval(intervalId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
window.loadFile("index.html", killScripts ? { query: { noScripts: true } } : {});
|
||||||
|
}, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
function promptForReload(window) {
|
function promptForReload(window) {
|
||||||
|
|||||||
Reference in New Issue
Block a user