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:
+72
-11
@@ -1,18 +1,79 @@
|
||||
// preload.js
|
||||
// preload.js - Optimized version
|
||||
const { contextBridge, ipcRenderer } = require('electron');
|
||||
|
||||
// Cache DOM references for performance
|
||||
let domReady = false;
|
||||
window.addEventListener('DOMContentLoaded', () => {
|
||||
domReady = true;
|
||||
console.log("Browser UI loaded.");
|
||||
});
|
||||
|
||||
// stubbed preload—no-op or expose an API as needed
|
||||
contextBridge.exposeInMainWorld('electronAPI', {
|
||||
send: (ch, ...args) => ipcRenderer.send(ch, ...args),
|
||||
invoke: (ch, ...args) => ipcRenderer.invoke(ch, ...args),
|
||||
on: (ch, fn) => ipcRenderer.on(ch, (e, ...args) => fn(...args))
|
||||
});
|
||||
// Optimized API exposure with error handling and caching
|
||||
const electronAPI = {
|
||||
send: (ch, ...args) => {
|
||||
try {
|
||||
return ipcRenderer.send(ch, ...args);
|
||||
} catch (err) {
|
||||
console.error('IPC send error:', err);
|
||||
}
|
||||
},
|
||||
invoke: (ch, ...args) => {
|
||||
try {
|
||||
return ipcRenderer.invoke(ch, ...args);
|
||||
} catch (err) {
|
||||
console.error('IPC invoke error:', err);
|
||||
return Promise.reject(err);
|
||||
}
|
||||
},
|
||||
on: (ch, fn) => {
|
||||
try {
|
||||
return ipcRenderer.on(ch, (e, ...args) => fn(...args));
|
||||
} catch (err) {
|
||||
console.error('IPC on error:', err);
|
||||
}
|
||||
},
|
||||
// Add removeListener for cleanup
|
||||
removeListener: (ch, fn) => {
|
||||
try {
|
||||
return ipcRenderer.removeListener(ch, fn);
|
||||
} catch (err) {
|
||||
console.error('IPC removeListener error:', err);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
contextBridge.exposeInMainWorld('bookmarksAPI', {
|
||||
load: () => ipcRenderer.invoke('load-bookmarks'),
|
||||
save: (data) => ipcRenderer.invoke('save-bookmarks', data)
|
||||
});
|
||||
// Cache for bookmarks to reduce IPC calls
|
||||
let bookmarksCache = null;
|
||||
let bookmarksCacheTime = 0;
|
||||
const CACHE_DURATION = 5000; // 5 seconds
|
||||
|
||||
const bookmarksAPI = {
|
||||
load: async () => {
|
||||
const now = Date.now();
|
||||
if (bookmarksCache && (now - bookmarksCacheTime) < CACHE_DURATION) {
|
||||
return bookmarksCache;
|
||||
}
|
||||
try {
|
||||
bookmarksCache = await ipcRenderer.invoke('load-bookmarks');
|
||||
bookmarksCacheTime = now;
|
||||
return bookmarksCache;
|
||||
} catch (err) {
|
||||
console.error('Bookmarks load error:', err);
|
||||
return [];
|
||||
}
|
||||
},
|
||||
save: async (data) => {
|
||||
try {
|
||||
bookmarksCache = data; // Update cache immediately
|
||||
bookmarksCacheTime = Date.now();
|
||||
return await ipcRenderer.invoke('save-bookmarks', data);
|
||||
} catch (err) {
|
||||
console.error('Bookmarks save error:', err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Expose APIs to main world
|
||||
contextBridge.exposeInMainWorld('electronAPI', electronAPI);
|
||||
contextBridge.exposeInMainWorld('bookmarksAPI', bookmarksAPI);
|
||||
Reference in New Issue
Block a user