perf(win): portable isolation + faster startup

This commit is contained in:
DeskClaw Bot
2026-04-21 18:45:36 +00:00
Unverified
parent 7e69f75801
commit f1cdb6e396

View File

@@ -57,21 +57,17 @@ if (isE2EMode && requestedUserDataDir) {
app.setPath('userData', requestedUserDataDir);
}
// Disable GPU hardware acceleration globally for maximum stability across
// all GPU configurations (no GPU, integrated, discrete).
//
// Rationale (following VS Code's philosophy):
// - Page/file loading is async data fetching — zero GPU dependency.
// - The original per-platform GPU branching was added to avoid CPU rendering
// competing with sync I/O on Windows, but all file I/O is now async
// (fs/promises), so that concern no longer applies.
// - Software rendering is deterministic across all hardware; GPU compositing
// behaviour varies between vendors (Intel, AMD, NVIDIA, Apple Silicon) and
// driver versions, making it the #1 source of rendering bugs in Electron.
//
// Users who want GPU acceleration can pass `--enable-gpu` on the CLI or
// set `"disable-hardware-acceleration": false` in the app config (future).
const portableExecutableDir = process.env.PORTABLE_EXECUTABLE_DIR?.trim();
const isPortable = Boolean(portableExecutableDir) || process.argv.includes('--portable');
if (process.platform === 'win32' && isPortable) {
const baseDir = portableExecutableDir || process.cwd();
app.setPath('userData', join(baseDir, 'DeskClawData'));
}
const disableGpu = process.argv.includes('--disable-gpu') || process.env.DESKCLAW_DISABLE_GPU === '1';
if (disableGpu) {
app.disableHardwareAcceleration();
}
// On Linux, set CHROME_DESKTOP so Chromium can find the correct .desktop file.
// On Wayland this maps the running window to clawx.desktop (→ icon + app grouping);
@@ -288,20 +284,6 @@ async function initialize(): Promise<void> {
`Runtime: platform=${process.platform}/${process.arch}, electron=${process.versions.electron}, node=${process.versions.node}, packaged=${app.isPackaged}, pid=${process.pid}, ppid=${process.ppid}`
);
if (!isE2EMode) {
// Warm up network optimization (non-blocking)
void warmupNetworkOptimization();
// Initialize Telemetry early
await initTelemetry();
// Apply persisted proxy settings before creating windows or network requests.
await applyProxySettings();
await syncLaunchAtStartupSettingFromStore();
} else {
logger.info('Running in E2E mode: startup side effects minimized');
}
// Set application menu
createMenu();
@@ -313,6 +295,22 @@ async function initialize(): Promise<void> {
createTray(window);
}
if (!isE2EMode) {
void (async () => {
void warmupNetworkOptimization();
const telemetryEnabled = await getSetting('telemetryEnabled');
if (telemetryEnabled) {
await initTelemetry();
}
await applyProxySettings();
await syncLaunchAtStartupSettingFromStore();
})().catch((error) => {
logger.warn('Deferred startup initialization failed:', error);
});
} else {
logger.info('Running in E2E mode: startup side effects minimized');
}
// Override security headers ONLY for the OpenClaw Gateway Control UI.
// The URL filter ensures this callback only fires for gateway requests,
// avoiding unnecessary overhead on every other HTTP response.