feat(hud): put the verdict's explanation first, make Slim a MangoHud bar, add the network row - #285
Merged
Merged
Conversation
…bar, add the network row Command Center opened on a one-line verdict and buried what explained it. The session strip says how the stream is doing; the Doctor's reading and the Stream card that say why and what Auto is running sat below Quick Keys, Controls, Session, and Overlays, three screens down on a Retroid. Now they come right after the strip. Overlays follows because the HUD switch is the frequent tap, then Controls and Session, then the full Quick Keys grid, then Sync and Advanced. The three keys a handheld cannot press any other way, Esc, Meta, and Alt + Enter, stay pinned in one row directly under the strip so reaching the game's own menu never needs a scroll. The pinned row reuses the grid's own action instances, so the grid stays the whole keyboard and both rows fire the same key. This reverses the 1.4.3 order deliberately: keys-first assumed the strip was enough, and it is not when the number is bad. Slim was a pill with the frame rate and the round trip. It is now one line in the MangoHud spirit: the health bar, the frame rate with its last minute drawn beside it, then decode time, round trip, and bitrate, each with a 7 sp inline label so two millisecond values are never told apart by position. The bitrate drops its unit like Performance does. Minimal stays the sparse two-line card, so the two modes stay distinct: Slim is about height, not about hiding data. Debug gains a fourth row for the network. The decoder has reported packet loss, round-trip variance, and the session's lost-frame count in every sample and no HUD mode showed them. LOSS is the share of frames lost in the current window, graded so zero is the only green: a trace reads "<0.1%" in warning rather than rounding to a green-looking 0%, under one percent is a warning, one percent and over is danger. JIT is the round-trip variance and reads "--" while there is no round trip to wobble around. DROPS is the session's cumulative lost-frame count. Source guards re-pin the new first-paint order (strip, pinned keys, Doctor, Stream, Overlays, Controls, Session, Quick Keys, Sync, Advanced), the Slim composition (sparkline plus DEC, RTT, BIT with inline labels, still no target, autopilot text, breadcrumb, or stacked tiles), and the Debug network row. Unit tests cover the pinned-key selection and identity, the Slim bitrate form, and the loss grading and formatting edges.
6 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:32ebb14Tree:665527e18cfc6067c49c33c49736fdb3c404a5d5Parent:bcaaedeBase:bcaaede (master)Verification
:app:testNonRoot_gameDebugUnitTest(x86_64): 1617 tests, 0 failures, 0 errors. Note: pc-papi's/tmpis a tmpfs with a per-user quota that other sessions' Polaris asan/tsan build trees have filled; Robolectric and Mockito extract into the Java temp dir, so the suite fails there with "Disk quota exceeded" regardless of the code. The green run used an init script that points the Test tasks'java.io.tmpdirunder/home. Nothing in the repo changed for that.:app:lintNonRoot_gameDebug -PlintFailOnError=true: clean:app:assembleNonRoot_gameDebug(arm64-v8a), installed on the Retroid Pocket 6 ascom.papi.nova.debugDEC 6.2ms,RTT 3ms,BIT 17M. Guide + Y still walks Slim, Minimal, Performance, Debug, Slim, and the mode persists.LOSS 0%(green),JIT 0ms,DROPS 2under HOST / IN / OUT.dumpsys gfxinfo, 60 s windows on the RP6. The HUD recomposes once per sample, so these are the UI thread's one frame per second, not video frames. Control would not come up on the host this evening (the session showed the host desktop at 12 fps), so this PR's rows are from that desktop session; the reference rows from feat(hud): decode time in Debug, a Slim layout, and a Command Center that stays out of the way #283 were taken inside Control at 60 fps. The UI-thread work is the same either way.Read: Slim with its sparkline lands where Performance already was, 11 to 12 ms p50. Debug's fourth row is inside run-to-run noise against the three-row version. Janky counts move by several frames between identical windows, so treat those as a range, not a delta.
Not covered