docs: the three new features are described where each of their readers looks
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
1 parent
aefac2d796
commit
ffc3ec1b4d
5 files changed
+231
No files matched your search
@@ -343,6 +343,26 @@ array of per-node structs was measured and bought **nothing** — at six nodes t
|
||||
L1-resident either way. It was kept because a node's state belonging on one cache line is the
|
||||
right shape for a graph that grows, not because it showed up.
|
||||
|
||||
### Statistics
|
||||
|
||||
**Statistics** under the measurements list adds a second line to every measurement: `n`, the
|
||||
mean, the standard deviation, and the range. The observations are the pane's own **recomputes**
|
||||
— one per refresh, not one per sample — so `n` is a count of *windows measured*, which is what
|
||||
makes "the mean frequency over the last four hundred windows" the claim it reads as. The pane
|
||||
refreshes at most ten times a second while the window scrolls and exactly once when it settles,
|
||||
so a settled window contributes one observation and then stops.
|
||||
|
||||
The accumulator is Welford's, not a sum of squares: a measurement whose values sit at 1e9 with
|
||||
a spread of 1e-3 is an ordinary case here (an absolute stream time is one), and the naive form
|
||||
loses that spread entirely.
|
||||
|
||||
**Reset** clears every accumulator. So does editing, adding or deleting a measurement, a CONFIG
|
||||
that renames the signals, and a change of the display window — each of those changes *what is
|
||||
being measured*, and a mean across the change describes nothing. A pause, a resume, a trigger
|
||||
latch, a pan and a zoom do **not** reset: they change which samples are in view, which is
|
||||
exactly what a statistic over many windows is meant to average. The toggle itself does not
|
||||
reset either, so turning the line off to read the plot and back on again keeps the history.
|
||||
|
||||
## The session layout file
|
||||
|
||||
What you arranged is remembered per data source, in
|
||||
@@ -652,6 +672,47 @@ zooming in past the shift showed nothing at all. The self-check now prints `data
|
||||
`drawn=` side by side for the bound trace so the contract is checked rather than
|
||||
assumed.
|
||||
|
||||
### Qualified trigger conditions
|
||||
|
||||
The level-and-edge trigger is one of four shapes the **Shape** dropdown offers, and all four
|
||||
are the *same* trigger: the arming, the hold-off, the pre/post event window and the single/auto
|
||||
modes are unchanged, and only the question "did an event happen at this sample" differs.
|
||||
|
||||
- **edge** — a crossing of the level in the chosen direction. The original behaviour, bit for
|
||||
bit.
|
||||
- **pulse width** — a crossing *and* its return, qualified by how long the excursion lasted:
|
||||
`<`, `>`, `within` or `outside` a pair of widths. The event is timed at the **closing** edge,
|
||||
because that is the first sample at which the width is known. `<` a width shorter than the
|
||||
signal's own pulses is the glitch trigger: nothing but a runt satisfies it.
|
||||
- **window** — the signal entering or leaving a band between two levels. A band is two levels,
|
||||
so the panel refuses a zero-width one rather than quietly degrading to an edge.
|
||||
- **dropout** — the *absence* of a crossing for longer than a timeout. One event per outage:
|
||||
the condition re-arms only when a crossing returns.
|
||||
|
||||
A shape's own rows are the only ones shown; the rest are hidden, so the panel never offers a
|
||||
width to a window trigger. The condition is **not** persisted in the session file — the session
|
||||
has never persisted the trigger — so a restart comes up on an edge trigger.
|
||||
|
||||
### Searching the buffer
|
||||
|
||||
**Search the buffer**, at the foot of the trigger panel, runs the trigger's *own* condition over
|
||||
the whole retained ring and lists every place it holds. There is no second condition editor: a
|
||||
second place to spell the same question would be a second place to get it wrong.
|
||||
|
||||
The scan runs on the GTK thread in a few milliseconds of work per frame, taking the model's
|
||||
mutex for one chunk at a time, so neither the frame rate nor the producer stalls on it. Up to
|
||||
10 000 hits are kept; past that the scan stops and says so. If the stream overtakes the oldest
|
||||
samples mid-scan the search skips forward to what is still there and reports `the stream
|
||||
overtook the oldest samples` rather than returning a hit at a time that no longer exists.
|
||||
|
||||
The arrows step through the hits. A step **pauses** the view on the hit, centred, exactly as the
|
||||
Pause button does — so the frozen window is pinned and navigable within its own data, and
|
||||
resuming returns to the live view. Up to 16 of the hits **in the visible window** are marked on
|
||||
every row at once, nearest the centre first and the selected one always among them in its own
|
||||
colour; when there are more in view than there are marks the panel says `16 of 38 marks shown —
|
||||
zoom in to see the rest`, which is a true statement about the picture rather than a silent
|
||||
truncation.
|
||||
|
||||
**The live view had two clipping bugs of its own**, both wearing the same face as that
|
||||
one: the older part of the trace blank, the newest part fine, and the crosshair still
|
||||
reading values in the blank part. Neither is a data bug — the samples were always there.
|
||||
|
||||
Reference in new issue
Block a user