2021-12-21 10:38:18 +00:00
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)
2022-01-13 13:42:04 +00:00
'perf-ex2' : 'auto-detect=false no-proxy-server' , // Does this do anything past electron 3.0.1 ? - include as a preset because why not
2022-01-16 20:55:14 +00:00
'perf-ex3' : '--force_high_performance_gpu ' , // Seems to fix lagging for some people using "perf"?
2022-01-13 13:42:04 +00:00
'memory-ex' : '--process-per-site --renderer-process-limit=2' , // "Reducing" memory usage (rough / unknown results)
'memory-ex2' : '--process-per-tab' ,
'debug' : '--show-fps-counter' , // Debugging tools
'disablemediakeys' : '--disable-features=HardwareMediaKeyHandling' , // Disables media keys (common want?)
'battery' : '--enable-features=TurnOffStreamingMediaCachingAlways' , // Known to have better battery life for Chromium?
'battery-tradeoff' : '--force_low_power_gpu' // Improves battery life but with perf tradeoffs?
2021-12-21 10:38:18 +00:00
} ;
2022-01-13 13:42:04 +00:00
const combinePresets = ( keys ) => {
let total = { } ;
for ( const pre of keys ) {
for ( const cmd of presets [ pre ] . split ( ' ' ) ) {
const [ key , value ] = cmd . split ( '=' ) ;
2021-12-21 10:38:18 +00:00
2022-01-13 13:42:04 +00:00
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 ;
2021-12-21 10:38:18 +00:00
}
}
2022-01-13 13:42:04 +00:00
}
return Object . keys ( total ) . reduce ( ( acc , x ) => acc += ( x + ( total [ x ] ? ( '=' + total [ x ] ) : '' ) + ' ' ) , '' ) ;
} ;
2021-12-21 10:38:18 +00:00
2022-01-13 13:42:04 +00:00
module . exports = ( ) => {
2022-01-16 20:55:14 +00:00
const preset = oaConfig . cmdPreset || 'perf,perf-ex,perf-ex3,battery' ; // Default to most (should default to none?) // 'perf,perf-ex,perf-ex2,battery,memory-ex2'
2022-01-13 13:42:04 +00:00
let cmdSwitches = presets [ preset ] || '' ; // Default to blank (no switches)
log ( 'CmdSwitches' , 'Preset:' , preset ) ;
if ( preset . includes ( ',' ) ) cmdSwitches = combinePresets ( preset . split ( ',' ) ) ;
2021-12-21 10:38:18 +00:00
if ( cmdSwitches ) {
cmdSwitches = ` --flag-switches-begin ` + cmdSwitches + ` --flag-switches-end ` ; // Probably unneeded for Chromium / Electron manual flags but add anyway
log ( 'CmdSwitches' , 'Switches:' , cmdSwitches ) ;
2022-01-13 13:42:04 +00:00
module . exports . cmd = cmdSwitches ;
module . exports . preset = preset ;
2021-12-21 10:38:18 +00:00
const switches = cmdSwitches . split ( ' ' ) ;
for ( const cmd of switches ) {
2022-01-13 13:42:04 +00:00
let [ key , value ] = cmd . split ( '=' ) ;
key = key . replace ( '--' , '' ) ; // Replace --key with key (?)
2021-12-21 10:38:18 +00:00
app . commandLine . appendSwitch ( key , value ) ;
log ( 'CmdSwitches' , 'Appended switch' , key , value ) ;
}
}
2022-01-13 13:42:04 +00:00
}