perf(win): portable isolation + faster startup
This commit is contained in:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user