fix: bound the density grid, and make [notrace] a reading instead of a flood
The plotter caps a density grid at kDensityCellCap now (deps/plotter), so a 2 s window with persistence on no longer scales the image with the window: the probe's four one-signal rows read 1 044 714 cells / 4 178 856 bytes where they read 2 226 150 / 8 904 600, and a moved frame uploads 1 044 714 bytes where it uploaded 2 226 150. The probe's own legs are unchanged (on peak=1.0000, step-acquisitions peak=1.5000, step-time ratio=0.367879). The paint probe no longer counts a frame the density is drawing as *traceless*. `Renderer::draw_traces()` returns while the ink is the image, so every frame of a persistence display stages no trace: the dump read `traceless paints: 653 (637 after the first bind)` for a run whose real figure is 4 (0), and the `[notrace]` line printed for each of those frames. It is now behind UDPSCOPE_PROBE_NOTRACE -- a per-paint line is a log flood and not a reading -- while the counters it details stay in every build, and the line stays reachable for the state it was written for (a bound row that draws nothing). Docs corrected where they stated the old rule: the README, the trigger invariants, the density probe's readings, the verification list (the new variable) and the manual page behind the panel's tooltip.
This commit is contained in:
1 parent
da826f2cb5
commit
ac054a30c9
11 files changed
+131
-76
No files matched your search
@@ -379,13 +379,16 @@ Part of [CLAUDE.md](../../CLAUDE.md). These are rules that cost a defect to lear
|
||||
- **The phosphor density is the *trace*, and that is a different display from the layers above, not a
|
||||
mode of them.** The trigger panel's `Advanced` block offers both, and the words matter: *multiple
|
||||
events* is `persist_depth` (N retained acquisitions, N traces, dimmer with age) while *persistence*
|
||||
is `TriggerConfig::density` -- the plotter's `Plot::set_density()`, a screen-sized intensity grid
|
||||
is `TriggerConfig::density` -- the plotter's `Plot::set_density()`, an intensity grid
|
||||
**per trace, drawn in that trace's own colour**, every acquisition deposited into it, which fades
|
||||
either by a time constant or by a per-acquisition factor. There is **no depth** on the density and
|
||||
no per-acquisition memory: the image is `traces * columns * rows * 4` bytes, one cell per device
|
||||
pixel of the row's axes for every trace the row draws (the app's default four signals in one row
|
||||
are four grids -- 6 MB at 800x480; the probe's one-signal-per-row run is 2.2 MB over four rows), so
|
||||
a thousand acquisitions cost what one costs. A cell's value is a number of *sweeps*: the library
|
||||
no per-acquisition memory: the image is `traces * columns * rows * 4` bytes, and both factors are
|
||||
bounded -- the grid is the row's axes rect in device pixels **up to the plotter's
|
||||
`kDensityCellCap`**, and there is one grid a trace the row draws. Four traces in a row
|
||||
therefore hold at most 4 MiB between them, whoever dragged the window where (the probe's
|
||||
one-signal-per-row run reads `cells=1044714`, 4 178 856 bytes), so a thousand acquisitions cost
|
||||
what one costs and *neither* a wide window nor a long run can make the image grow. A cell's value
|
||||
is a number of *sweeps*: the library
|
||||
deposits a cell once per trace per sweep however many of that trace's own samples crossed it
|
||||
(`[density-probe] on` reads `peak=1.0000` for one sweep; a per-hit deposit read 18) -- dwell is
|
||||
`Style::intensity_grading`'s question, not this one's. The colour is the trace's own
|
||||
|
||||
Reference in new issue
Block a user