mirror of
https://github.com/DeeJanuz/frametop.git
synced 2026-10-06 06:00:09 +02:00
Gaze: ft-eyes and ft-gaze below SteamVR's priority
ft-eyes and ft-gaze run in the dev container through distrobox, so they live in podman's libpod scope: frametop-gaze.service's limits never reach them, and they ran at nice 0 next to vrcompositor and vrserver, also at nice 0. - ft-eyes sets itself to nice 10 and SCHED_BATCH at start, before its threads. Batch turns off wakeup preemption, so a frame ft-eyes wakes up for can wait out a running compositor's turn; a few ms late costs the gaze little. - ft-gaze sets nice 5 before its threads start, but stays SCHED_OTHER: each sample goes on to the pointer, and batch would add the same wait to every one of them. - Both only ever lower their priority (a higher nice already set wins), and a failure is logged and ignored. Checked in the dev container: nice 0 -> 10, policy 0 -> 3 (SCHED_BATCH) without any capability. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
8a02e41b21
commit
a11cef49ba
3 files changed
+28
-1
No files matched your search
@@ -377,7 +377,24 @@ def serve(sock, tracker):
|
||||
pass
|
||||
|
||||
|
||||
def below_steamvr():
|
||||
"""Nice 10 and SCHED_BATCH, for this thread and those it starts. ft-eyes runs in the dev
|
||||
container's podman scope, where the gaze service's unit doesn't reach it, so it ran at
|
||||
nice 0 on the cores vrcompositor and vrserver use. Batch also lets a waking ft-eyes wait
|
||||
for the running task's turn instead of taking the core: a frame a few ms late costs the
|
||||
gaze little, a late compositor frame costs a dropped frame in the headset."""
|
||||
try:
|
||||
os.setpriority(os.PRIO_PROCESS, 0, max(os.getpriority(os.PRIO_PROCESS, 0), 10))
|
||||
except OSError as e:
|
||||
print(f"ft-eyes: nice: {e}", file=sys.stderr, flush=True)
|
||||
try:
|
||||
os.sched_setscheduler(0, os.SCHED_BATCH, os.sched_param(0))
|
||||
except (OSError, AttributeError) as e:
|
||||
print(f"ft-eyes: SCHED_BATCH: {e}", file=sys.stderr, flush=True)
|
||||
|
||||
|
||||
def main():
|
||||
below_steamvr()
|
||||
verbose = "-v" in sys.argv
|
||||
if "--watch-stdin" in sys.argv:
|
||||
# Run by ft-gazed through distrobox, which doesn't pass a stop on: quit when our
|
||||
|
||||
Reference in new issue
Block a user