Add GPU error handling and performance optimizations

Introduces a comprehensive GPU configuration and fallback system to resolve GPU process launch failures (Error 18), including new modules for GPU management and performance monitoring. Adds a GPU diagnostics HTML page, optimized CSS for rendering, and a diagnostic startup script. Updates main and preload scripts for improved stability, async file operations, and enhanced API exposure. Site history and bookmarks handling are optimized for performance and reliability.
This commit is contained in:
2025-07-26 14:38:05 +12:00
parent 0b61f86dd4
commit fbd9ba8a1b
10 changed files with 1081 additions and 59 deletions
+124
View File
@@ -0,0 +1,124 @@
// gpu-config.js - Comprehensive GPU configuration manager
const { app } = require('electron');
class GPUConfig {
constructor() {
this.isGPUSupported = false;
this.fallbackApplied = false;
}
// Apply GPU configuration based on system capabilities
configure() {
console.log('Configuring GPU settings...');
// Try to detect if we're on a system that supports GPU acceleration
const platform = process.platform;
const arch = process.arch;
console.log(`Platform: ${platform}, Architecture: ${arch}`);
// Start with conservative settings that usually work
this.applyConservativeSettings();
// Try to enable GPU features progressively
this.tryEnableGPU();
}
applyConservativeSettings() {
// Essential switches that usually don't cause issues
app.commandLine.appendSwitch('no-sandbox');
app.commandLine.appendSwitch('disable-dev-shm-usage');
app.commandLine.appendSwitch('disable-gpu-sandbox');
// Performance improvements that don't rely on GPU
app.commandLine.appendSwitch('disable-background-timer-throttling');
app.commandLine.appendSwitch('disable-renderer-backgrounding');
app.commandLine.appendSwitch('disable-backgrounding-occluded-windows');
app.commandLine.appendSwitch('enable-quic');
app.commandLine.appendSwitch('max_old_space_size', '4096');
}
tryEnableGPU() {
try {
// GPU acceleration switches
app.commandLine.appendSwitch('ignore-gpu-blacklist');
app.commandLine.appendSwitch('ignore-gpu-blocklist');
app.commandLine.appendSwitch('enable-gpu-rasterization');
app.commandLine.appendSwitch('enable-zero-copy');
// Video acceleration (usually safer than full GPU)
app.commandLine.appendSwitch('enable-accelerated-video-decode');
app.commandLine.appendSwitch('enable-accelerated-mjpeg-decode');
// Conservative feature enabling
app.commandLine.appendSwitch('enable-features', 'VaapiVideoDecoder');
console.log('GPU acceleration switches applied');
} catch (err) {
console.error('Error applying GPU switches:', err);
this.applyFallback();
}
}
applyFallback() {
console.log('Applying GPU fallback configuration...');
// Force software rendering if GPU fails
app.commandLine.appendSwitch('disable-gpu');
app.commandLine.appendSwitch('disable-gpu-compositing');
app.commandLine.appendSwitch('disable-software-rasterizer');
this.fallbackApplied = true;
this.isGPUSupported = false;
}
// Check if GPU is working after app starts
async checkGPUStatus() {
try {
const gpuInfo = app.getGPUFeatureStatus();
// Check if any critical GPU features are enabled
const enabledFeatures = Object.entries(gpuInfo)
.filter(([key, value]) => !value.includes('disabled'))
.map(([key]) => key);
this.isGPUSupported = enabledFeatures.length > 2; // At least some features working
console.log('GPU Status Check:');
console.log('- Enabled features:', enabledFeatures);
console.log('- GPU supported:', this.isGPUSupported);
return {
isSupported: this.isGPUSupported,
enabledFeatures,
fullStatus: gpuInfo
};
} catch (err) {
console.error('GPU status check failed:', err);
return { isSupported: false, error: err.message };
}
}
getRecommendations() {
const recommendations = [];
if (!this.isGPUSupported) {
recommendations.push('GPU acceleration is not available on this system');
recommendations.push('The browser will use software rendering (slower but stable)');
recommendations.push('Consider updating your graphics drivers');
recommendations.push('Check if your system supports hardware acceleration');
} else {
recommendations.push('GPU acceleration is working');
recommendations.push('Browser should have good performance');
}
if (this.fallbackApplied) {
recommendations.push('Fallback mode is active due to GPU issues');
recommendations.push('Performance may be reduced but stability improved');
}
return recommendations;
}
}
module.exports = GPUConfig;