Repository navigation
daemon: feed the frame ring from publishes when no producer reports flow - #42
Merged
Merged
Conversation
The frame ring is fed from the shim's producer reports so a cap above the panel reads as what the session produced. A session whose frames never go through the ICD shim (Xwayland GL, GDI, software rendering) sends no reports, so with the publish path silent its fps read 0.0 (SteamWorld Dig 2 under gamescope). Count publishes whenever no report arrived within the last second; once reports flow the publish path goes quiet. The first report of a connecting counter no longer replays its backlog, since those frames were counted by the publish path already.
3 of 8 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #41.
Problem
#41 feeds the app's frame ring only from the shim's producer reports (
note_produced), so a cap above the panel reads as what the session produced. A session whose frames never go through the ICD shim sends no reports at all: Xwayland GL titles (zink on the xlib winsys, which is every GL game in the container), GDI windows, software renderers. For those the publish path was the only frame count, and with it silent the HUD and the session telemetry read 0.0 fps while the game runs. Seen on the RP6 with SteamWorld Dig 2 on the #41 daemon: HUD 0.0, SurfaceFlinger presenting 42 to 60 fps.Fix
LAST_PRODUCER_REPORT_MSis stamped by every producer report. The publish path counts a frame whenever no report arrived within the last second (PRODUCER_REPORT_GRACE_MS), and goes quiet as soon as reports flow. Shim sessions keep display: the mode is the display's rate, the cap is at acquire, and generation follows the multiplier #41's semantics exactly.previous == 0) no longer replays its whole backlog into the ring: those frames were counted by the publish path while no reports flowed, so replaying them was a one-off jump of up toMAX_PRODUCED_PER_MESSAGE.Verification (RP6, payload 20261101.4 stack: gamescope#26, xserver#1+#2 Xwayland, #41 shim, this daemon)