fix: gate native window reveal on renderer load

Keep BrowserWindow hidden until both ready-to-show and did-finish-load are complete, preventing the incomplete header from reaching the screen.

Render a static upload-speed baseline beneath the transparent canvas so the zero line exists independently of renderer timers.

Add regression coverage for both reveal event orders, load failures, and the script-independent header baseline.
This commit is contained in:
Sucukdeluxe
2026-08-20 13:45:02 +02:00
parent f3001828a0
commit ff1593be81
4 changed files with 61 additions and 5 deletions
+19 -2
View File
@@ -15,14 +15,31 @@ function createStartupQuery(config, version) {
function createStartupWindow(BrowserWindow, options) {
const window = new BrowserWindow({ ...options, show: false });
window.once('ready-to-show', () => {
let nativePaintReady = false;
let rendererLoadFinished = false;
let revealed = false;
const reveal = () => {
if (revealed || !nativePaintReady || !rendererLoadFinished) return;
revealed = true;
window.show();
};
window.once('ready-to-show', () => {
nativePaintReady = true;
reveal();
});
window.webContents.once('did-finish-load', () => {
rendererLoadFinished = true;
reveal();
});
return {
window,
load(target, onLoadError, options) {
return window.loadFile(target, options).catch(onLoadError);
return window.loadFile(target, options).catch((error) => {
rendererLoadFinished = true;
reveal();
return onLoadError(error);
});
}
};
}