From 2ec5009e6ac07f8f1e4b007dc690776369dff4bb Mon Sep 17 00:00:00 2001 From: Oj Date: Tue, 21 Dec 2021 10:38:18 +0000 Subject: [PATCH] [CmdSwitches] Initial Add --- src/cmdSwitches.js | 51 ++++++++++++++++++++++++++++++++++++++++++++++ src/index.js | 2 ++ 2 files changed, 53 insertions(+) create mode 100644 src/cmdSwitches.js diff --git a/src/cmdSwitches.js b/src/cmdSwitches.js new file mode 100644 index 0000000..d5f139c --- /dev/null +++ b/src/cmdSwitches.js @@ -0,0 +1,51 @@ +const { app } = require('electron'); + +const presets = { + 'perf': `--enable-gpu-rasterization --enable-zero-copy --ignore-gpu-blocklist --enable-hardware-overlays=single-fullscreen,single-on-top,underlay --enable-features=BackForwardCache:TimeToLiveInBackForwardCacheInSeconds/300/should_ignore_blocklists/true/enable_same_site/true,ThrottleDisplayNoneAndVisibilityHiddenCrossOriginIframes,UseSkiaRenderer,WebAssemblyLazyCompilation --disable-features=Vulkan`, // Performance + 'perf-ex': '--enable-quic --enable-features=EnableDrDc,CanvasOopRasterization', // Performance experimental (not known / tested benefit) + 'disablemediakeys': '--disable-features=HardwareMediaKeyHandling', // Disables media keys (common want) + 'battery': '--enable-features=TurnOffStreamingMediaCachingAlways' // Known to have better battery life for Chromium +}; + +module.exports = () => { + const preset = oaConfig.cmdPreset || 'perf,perf-ex,battery'; // Default to most (should default to none?) + let cmdSwitches = presets[preset] || ''; // Default to blank (no switches) + + log('CmdSwitches', 'Preset:', preset); + + if (preset.includes(',')) { + let total = {}; + for (const pre of preset.split(',')) { + for (const cmd of presets[pre].split(' ')) { + const [ key, value ] = cmd.split('='); + + if (total[key]) { + if (value) { + total[key] += ',' + value; // Concat value with , for flags like --enable-features + } // Else no value, ignore as it already exists + } else { + total[key] = value; + } + } + } + + console.log(total); + + cmdSwitches = Object.keys(total).reduce((acc, x) => acc += (x + (total[x] ? ('=' + total[x]) : '') + ' '), ''); + } + + if (cmdSwitches) { + cmdSwitches = `--flag-switches-begin ` + cmdSwitches + ` --flag-switches-end`; // Probably unneeded for Chromium / Electron manual flags but add anyway + + log('CmdSwitches', 'Switches:', cmdSwitches); + + const switches = cmdSwitches.split(' '); + + for (const cmd of switches) { + const [ key, value ] = cmd.split('='); + + app.commandLine.appendSwitch(key, value); + log('CmdSwitches', 'Appended switch', key, value); + } + } +} \ No newline at end of file diff --git a/src/index.js b/src/index.js index e13785b..f0dba9b 100644 --- a/src/index.js +++ b/src/index.js @@ -9,6 +9,8 @@ global.oaConfig = appSettings.getSettings().get('openasar', {}); log('Init', 'Loaded config', oaConfig); +require('./cmdSwitches')(); + const appMode = process.argv?.includes('--overlay-host') ? 'overlay-host' : 'app'; if (appMode === 'overlay-host') {