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:
+124
@@ -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;
|
||||
Reference in New Issue
Block a user