You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
perf_baseline and perf_check: a regression reference. perf_baseline saves copies of several equal recordings
(ideally 3 or more) as a named reference in baselines.json beside the runs, so it outlives KEEP_RUNS, and
returns the range each number spans across them. perf_check judges a recording against that range: regressed
when FPS falls under it by more than margin_pct (default 3), GPU ms per frame rises over it, or encoders or
command buffers per frame exceed it; improved when a number leaves the range the other way; same otherwise.
The range, not one run, is the reference because 5 equal runs of drawstress d3d12 on an M1 Pro differed by 4.4 %
in FPS and 6.1 % in GPU ms per frame. Frame pacing, short encoders and GPU idle time are reported but do not
decide: they varied 13 % and 7 points between equal runs.
perf_compare says what changed in the GPU work and where: encoders and command buffers per frame, the share of
encoders under short_us, the GPU's idle share and idle ms per frame, and labels, each encoder label's count and
GPU ms per frame in both runs, largest change in ms per frame first. Labels compare per frame because two
recordings of different lengths do not compare by total time; a label missing from a run that holds the full 20
labels is outside_top_20, not gone. A run summarized before 0.4.0 is named in encoders.missing_in, and the
headline numbers still compare. Shares (short encoders, GPU idle) give their change in points, without a %.
The compare-layer prompt reports perf_compare's table and labels instead of rebuilding them from two perf_diagnose calls.
Each recording names its translation layer in layer: the Wine version, the overrides in force (environment and
the prefix's registry), the size and SHA-256 of d3d12, d3d12core, d3d11, d3d10core and dxgi in Wine and
in the prefix, a 12-character fingerprint of all of it, and the program's variables (MULLION_DIAG=profile) with
paths cut to file names. Native runs say they have no layer. perf_runs shows the fingerprint and Wine; perf_compare says whether both runs share a layer, which DLLs differ, and that different layers compare layers,
not one change. Which copy of a DLL Wine loads is not recorded: Instruments does not keep Wine's own log.
perf_record.sh keeps the caller's WINEDLLOVERRIDES (a Mullion built for system32 needs d3d12,...=n) and
adds mscoree=;mshtml= after it; before, it replaced them.
A prefix copy of a Direct3D DLL identical to Wine's own (Wine's first boot makes one) leaves the layer
fingerprint unchanged: the fingerprint and differs look at the copy Wine loads, the prefix's when it exists.
Measured on an M1 Pro: the first drawstress run on a new prefix got a different fingerprint from the next
three, with identical DLLs.