feat(hud): decode time in Debug, a Slim layout, and a Command Center that stays out of the way - #283
Merged
Merged
Conversation
…that stays out of the way NovaHUD reads the decoder's structured sample only. The text path made the decoder build the legacy overlay string on the decode thread whenever the HUD was up, to regex out numbers the struct already carried, and it published the HUD twice per sample. Debug gains DEC (decode time graded against the frame budget at the target rate), HOST (host processing latency), and IN / OUT (incoming against rendered fps), which is the rest of what the legacy text knew. A fourth layout, Slim, is one pill with the health bar, the frame rate, and the round trip; Guide + Y cycles Minimal, Performance, Debug, Slim, and the settings preview renders it. Stats Overlay toggled from Command Center used to flip an in-memory flag and a View. A stream that started with the setting off showed an empty overlay, and Settings never learned about the toggle. toggleHUD now persists the preference and re-arms the decoder's text builder. Turning it on turns Nova HUD off for the next stream too, and the reverse. The unreachable lite, bottom, and lite-dialog variants of the overlay are gone, and so is the HUD Position setting, which nothing read. Command Center keeps Close, Disconnect, and End Session fixed above the scrolling sections, picks the HUD layout with four buttons instead of cycling blind, folds the two opacity preset strips behind their rows, and slides out on Close, B, and Back the way it already did on scrim and drag. Quick keys are built once per open, the Doctor card's action is remembered per diagnosis, capabilities are fetched once per session, and the dead AI Auto Quality arm is removed. Source guards pin the new shape: the four-stop ring and picker order, the Debug tiles, the fixed header, the collapsed presets, the animated exits, and the persisted toggle.
The Debug layout gained three live tiles, and a 60 s frame-stat run showed the tick cost moving from 11 ms to 13 ms median with 21 slow UI-thread frames against 1 on 1.4.3. Part of that was avoidable: the diagnostic strip and the layer chips recomposed every tick because they took the whole state or a List, neither of which Compose can prove stable, so their text was re-laid out even when it had not changed. NovaHudUiState and NovaHudLayerHealth are marked immutable, which they were in fact, and the strips take only the strings and tones they draw. Measured on the Retroid Pocket 6 over a live 60 fps Control stream: Debug 12 ms median with 11 slow frames, Performance 11 ms with 1. The remaining millisecond in Debug is the three added tiles changing their numbers once a second.
Merged
7 tasks
papi-ux
added a commit
that referenced
this pull request
Sep 7, 2026
Matched client for Polaris 1.4.4. Everything on master since 1.4.3: Wake Host (#284), the Command Center that leads with the verdict's explanation, the Slim sparkline bar, and Debug's decode and network rows (#283, #285), the Stats Overlay fix, and the honest Play and Doctor labels from this branch. versionName 1.4.4, versionCode 46. The Unreleased section becomes the dated 1.4.4 section with a one-line summary and the same bullets, the store notes for build 46 fit under 500 code points, and NovaReleaseMetadataTest pins all of it. The label fixes in the same PR: Three labels that stopped being true once the surfaces around them changed. The library's Continue card said Resume whether or not the host was still running the game. The kicker already told the truth (Continue, Live, or Watch) and the summary said "Pick up where you left off", but the button promised a resume and then launched. Resume now appears only while the host is running that game; otherwise the button says Play. The Watch branch is unchanged. The Doctor card led the Command Center after #285, and its first line of advice repeated its own title: "Streaming telemetry looks ready" over "Try first: Streaming telemetry looks ready. Keep this page open...". The host's first-try line usually opens by restating the finding, so the state builder now drops that opening sentence and keeps the advice that follows it. A first-try line that only restates the title disappears rather than saying it twice; one that merely starts with the same words as a longer word is left alone. The Command Center subtitle still promised "Quick keys and controls" when Quick Keys became the last panel. It now reads "Session controls for Private Stream" and "Session controls for virtual display streaming"; the generic fallback reads "Stream health, tuning, and session controls". HonestLabelsSourceGuardTest pins the hero verb and the subtitles; the Doctor dedupe has unit coverage for the repeated, bare, unrelated, and prefix-only cases.
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.
Summary
Exact candidate
Commit:45166e6Tree:d11c30484ff188a96f69c90c6f9d2e307c741d53Parent:a8df7dcBase:1895589 (master, Nova 1.4.3)Verification
:app:testNonRoot_gameDebugUnitTest(x86_64): 1609 tests, 0 failures, 0 errors:app:lintNonRoot_gameDebug -PlintFailOnError=true: clean:app:assembleNonRoot_gameDebug(arm64-v8a), installed on the Retroid Pocket 6 ascom.papi.nova.debug, paired through Trusted Pair against Polaris 1.4.3 on pc-papi, live Control Ultimate Edition stream at 1920x1080@60 HEVCdumpsys gfxinfo, 60 s each, the HUD ticking once per second over the static Control title screen:Debug carries three more live tiles than before and pays about a millisecond per tick for them. Performance, Minimal, and Slim are unchanged or cheaper. These are single 60 s runs, so a difference of a frame or two is noise. The decode-thread saving (no legacy text built while only the HUD is up) does not show in these numbers by construction; they measure the View layer.
Screenshots and the raw gfxinfo dumps are under
~/.hermes/artifacts/nova/cc-hud-revamp-2026-09-06/on MacPapi.Not covered
polaris.servicefor this QA and stopped again afterwards; it was not running before.