Repository navigation
Conversation
moretti
force-pushed
the
host-profiler
branch
from
November 3, 2026 06:54
3d1500f to
3833223
Compare
… frame's timing rows, and a report of one session With DM_NVN_TSV set (off by default), dm/host/sysprof.m samples every 100 ms, without root, what the system did with the game's GPU and process (IOReport through dlopen; Mac only): the GPU clock and the share of time it was powered (@gpu_mhz, @gpu_on; powered is not busy), its power (@gpu_w), the clock state the boost controller asked for (@gpu_boost), the share of time a thermal or voltage-droop limit applied (@gpu_cltm, @gpu_droop), the process role (@ROLE), the thermal state and Low Power Mode. With DM_AB, @ab gives the switches on in the frame's phase. A change of role is logged. dm/tools/perf_report.py turns one session into a timeline per second and gives each drop below the cap a verdict (cpu, gpu-clock, gpu-limit, gpu, role, pacing); with DM_AB it compares the switch sets over the same session, so one run answers what several runs used to. Also: @late_ms no longer underflows when a display-link tick returns before the texture's slot time. Documented in docs/development.md (Why a frame rate fell: one session's profile).
moretti
force-pushed
the
host-profiler
branch
from
November 8, 2026 07:32
3833223 to
8dbdd41
Compare
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.
Split out of #930 (1 of 4).
Summary
With
DM_NVN_TSVset (off by default), a sampler records each frame's GPU clock, its limits and the process role in the frame's timing rows. A report script turns one session into a per-second timeline that says why each drop below the cap happened. That is how the other three PRs split out of #930 were found and checked.Also:
@late_msno longer underflows when a display-link tick returns before the texture's slot time.Documented in
docs/development.md("Why a frame rate fell: one session's profile").Evidence
main: host and CPU gfx tests, sanitizers, tool tests, clang-tidy and ruff/pyright pass locally.Merge Danger
Door: two-way. It does nothing unless
DM_NVN_TSVis set.Blast Radius: diagnostics.
The weak
dm_sysprof_*stubs inhle_nvn.ckeep the graphics unit tests linking withoutsysprof.m.regress.py impact: Breath of the Wild, Pokémon Scarlet and Tears of the Kingdom reach the changed present code (the rows are only written withDM_NVN_TSV). Hades is reached through the host Makefile rule. None of them is on this machine, soregress.py check --gameswas not run.