Repository navigation
quest: drop ui-frame-rate, whose 25 fps was Xvfb's presentation - #96
Conversation
Quest-Claim: 50ca11f50a96e3d8
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 58 minutes. View limit details
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Pick (/quest-complete, maintainer away under /afk, recommended option): ✅ Merge, deleting the quest: the 25 fps was Xvfb's present, and the UI holds 60 fps under headless sway. Took the suggested (Written by Claude Opus 5.5) |
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed head 111838161f801c790566b25a169260a601f889a5 against base a461c842511aa3664af049ff78209854e28378cf.
No actionable findings. The deleted quest explicitly permits closure when profiling attributes the wait to Xvfb. The reported presentation timings, vkcube control and loaded headless-sway results support that explanation without requiring a speculative locking refactor. The parent link is removed, and the new measurement guidance targets the environment that confounded the original observation.
Direction: removing an unsupported implementation task is simpler than changing runtime scheduling without evidence of a studio bottleneck.
Verification limits: GitHub-only documentation review, including the originating PR, repository guidance and pinned quest context as source. I did not run quest context, tests or profiling. The temporary instrumentation is not committed; measurements are not independently verified. The comparison uses different hosts, and physical-display and other-platform behavior remains unmeasured as disclosed in the PR.
(Written by review (OpenAI))

Problem
quest/m0/ui-frame-rate.md came from moq-dev/studio#85, which measured the UI at about 25 fps (40 ms a frame) under Xvfb and guessed the UI waits on
engine.statewhile the program renders. The quest asked to profile on a real display and under Xvfb, fix the cause, or delete the quest if the wait is only Xvfb's.Approach
Profiled with temporary instrumentation (not committed): every
engine.statelock timed per thread, the program's lock hold andCompositor::render, the encoders' program copy, and a patchedegui-wgputiming the three steps eframe counts as "vsync" (get_current_texture,Queue::submit,Queue::present). Release build withopenh264, the scene from #85 (color, image, HTML overlay) and a plain one-color scene, at 1920x1080 30 fps. "Loaded" means every effect forced on (the program on air, Health unhealthy, a take every 2 s) and a recording running, as #85's worst case.The wait is Xvfb's presentation. Under Xvfb,
Queue::presenttakes 40 to 110 ms a frame and is the whole UI frame. On a real compositor the same build draws at the display's 60 Hz under the same load, with present under 0.4 ms and no lock waits. So this PR deletes the quest.Xvfb,
nixos(RTX 3070 Ti, load average ~30 from other work)vkcubealone under the same Xvfb takes 83 ms a frame at 1440x900 (18 ms at 500x500), so Xvfb's present is this slow without the studio. #85's 40 ms was the same present on a less loaded host; its "UI CPU under 2 ms" already included the lock waits.Headless sway,
nixos2(RTX 2070 renders the studio, 1600x1000 at 60 Hz)engine.state8 times a frame and waits a total of 0.00 ms on average.vkcubethere also runs about 6% slower than with the Intel compositing.What was not measured
mutter --headless's virtual monitor stopped sending frame callbacks after the first ~16 frames on both hosts, stallingvkcubetoo, also when a screencast read the monitor.nixos2's live GNOME session has no monitor to draw on.Impact
Alternatives
engine.stateonly to copy what a frame draws, or moving the compositor's submit off the UI's path, as the quest suggested: the UI's lock waits are ~0 on a real compositor, so neither would change its frame rate.egui-wgpuand adds per-frame timing for a one-off question; the Output panel already shows the program's encoder work.Choices made without asking:
Follow-ups
AGENTS.mdpointing UI frame-time measurements at a headless Wayland compositor (WLR_BACKENDS=headless sway) would stop the next one; it is a rule change, so it is the maintainer's call.Review
Codex (gpt-6.1-sol, medium effort), round 1 of session
01a1b6ec-74ca-7820-ad02-d905bfa588f5, reviewed headeef09ce550f65f8ff7c586dc5c12b0dc94512473againstorigin/maina8ca56f: no findings.Checks:
quest checkpassed at this head.just ciwas not run locally: the diff only deletes quest Markdown, whichquest checkis the only check to read; CI's Check runsjust cion the ready PR.(Written by Claude Opus 5.5)
🤖 Generated with Claude Code