fix: leave run-mode apps unpinned when all cores are selected

This commit is contained in:
Anton authored and Kurt Himebauch committed 2026-11-05 12:13:45 -05:00
1 parent 17fb80ad51
commit bae4ecd867
2 files changed
+52

No files matched your search

@@ -298,6 +298,7 @@ program_cores() {
[ "${BL_PIN_CORES:-1}" = 0 ] && return 0
command -v taskset >/dev/null 2>&1 || return 0
if [ -n "${BL_GAME_CPUS:-}" ]; then echo "$BL_GAME_CPUS"; return 0; fi
[ "$mode" = run ] && return 0
local f n max min= list=
for f in /sys/devices/system/cpu/cpu[0-9]*/cpufreq/cpuinfo_max_freq; do
max=$(cat "$f" 2>/dev/null) || continue
+51
View File
@@ -0,0 +1,51 @@
import os
from pathlib import Path
import re
import subprocess
import unittest
SESSION = Path(__file__).resolve().parents[1] / 'linuxfs/overlay/usr/local/bin/droiddeck-session'
class SessionCpuTest(unittest.TestCase):
def cores(self, mode, cpus='', pin='1'):
function = re.search(r'^program_cores\(\) \{\n.*?^\}\n', SESSION.read_text(), re.M | re.S).group(0)
script = '''
set -u
taskset() { echo 'unexpected taskset invocation' >&2; return 1; }
cat() {
case "$1" in
*/cpu[0-5]/cpufreq/*) echo 3630000 ;;
*/cpu[67]/cpufreq/*) echo 4610000 ;;
*) return 1 ;;
esac
}
'''
paths = ' '.join(f'/sys/devices/system/cpu/cpu{i}/cpufreq/cpuinfo_max_freq' for i in range(8))
function = function.replace('/sys/devices/system/cpu/cpu[0-9]*/cpufreq/cpuinfo_max_freq', paths)
env = dict(os.environ, mode=mode, BL_GAME_CPUS=cpus, BL_PIN_CORES=pin)
result = subprocess.run(['bash', '-c', script + function + '\nprogram_cores\n'],
env=env, capture_output=True, text=True, timeout=10)
self.assertEqual(0, result.returncode, result.stderr)
self.assertEqual('', result.stderr)
return result.stdout.strip()
def test_run_with_all_cores_leaves_scheduling_unrestricted(self):
self.assertEqual('', self.cores('run'))
def test_run_preserves_an_explicit_core_selection(self):
self.assertEqual('1,2,3,4,5,6,7', self.cores('run', '1,2,3,4,5,6,7'))
def test_disabled_pinning_takes_precedence_over_explicit_cores(self):
self.assertEqual('', self.cores('run', '6,7', pin='0'))
def test_desktop_keeps_its_fast_core_default(self):
self.assertEqual('6,7', self.cores('lxqt'))
def test_desktop_preserves_an_explicit_core_selection(self):
self.assertEqual('0,1,2', self.cores('lxqt', '0,1,2'))
if __name__ == '__main__':
unittest.main()