iris: iris::input/iris::frame diagnostics, and gating the four debug! lines that already drowned the ring
Iris asked for a button to copy raw input events and per-frame timings through the same report Copy report already produces. sense::log_input_event (one line per platform pointer sample, historical samples inline on Android) and diagnostics::log_frame (one line per frame: frame number, frame clock, time since last input, layout/draw durations, redraw kind, primitives on screen, animating) both land under iris::diagnostics's trace_enabled() gate, off by default since the ring is 2000 lines/256KiB and either target at 120Hz fills it in seconds. report_to_touch.py turns a report's iris::input lines back into a .touch file for harness/desktop replay, round-tripped in transcript-fixture's input_log_roundtrip test. Folds in docs/REVIEW-2026-09-07.md's D1: four older per-frame debug! lines (android::view's two render() lines, list.rs's fling tick, text/mod.rs's text render) were unconditional at Debug and, with the ring's RingLogger recording everything the app's Debug install lets through regardless of target, filled it before Copy report ever saw anything else. All four (and sense.rs's drag-release-samples line) are now behind the same gate. The same test proves both directions: tracing off leaves zero Debug lines from a replayed flick, tracing on produces the expected iris::input/iris::frame lines with real durations. Not wired to a Diagnostics-pane button: bench_client.rs is open under another agent. set_trace(bool) is the whole surface a control needs. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
1 parent
729098756d
commit
992c472975
16 files changed
+910
-57
No files matched your search
@@ -1161,6 +1161,49 @@ and per-block-row work (RUST.md's "Verification pass over Tasks A and B").
|
||||
reply shapes exactly **1** text layout, the same as into a
|
||||
one-paragraph one.
|
||||
|
||||
## 2026-09-07: `iris::diagnostics` -- a trace toggle for input/frame lines, gating four existing per-frame `debug!` calls
|
||||
|
||||
One new public module and one behaviour change to four existing log
|
||||
lines, from Iris's "add another button to copy input event info ...
|
||||
instrument a lot of the code with timings" request (RUST.md's own
|
||||
section has the full account).
|
||||
|
||||
- **`iris::diagnostics::set_trace(bool)`/`trace_enabled() -> bool`**, a
|
||||
process-global switch, off by default. It gates two new diagnostics
|
||||
(`sense::log_input_event`, one line per platform pointer sample under
|
||||
target `iris::input`; `diagnostics::log_frame`, one line per frame
|
||||
under `iris::frame`, with the frame number, the frame clock, time
|
||||
since the last input, layout/draw durations, `RedrawKind`, primitives
|
||||
on screen, and whether something is animating) and, as of a same-day
|
||||
review finding (D1), four *older* `debug!` lines that were previously
|
||||
unconditional: `android::view`'s two `render():` lines, `widget::
|
||||
list`'s `iris fling tick:`, `widget::text`'s `iris text render:`, and
|
||||
`sense`'s `iris drag release samples:`. Not `log::log_enabled!`/
|
||||
`log::set_max_level`, because the app installs its logger at
|
||||
`LevelFilter::Debug` already and the ring records everything that
|
||||
level lets through regardless of target — the gate has to live on
|
||||
this side. **Not wired to a control**: the Diagnostics pane is in
|
||||
`bench_client.rs`, off-limits while another agent had it open; this
|
||||
is the whole surface a button needs.
|
||||
- **`UiRenderState` gained `RedrawKind`, `frame_number()`, `epoch()`,
|
||||
`last_layout_duration()`, `last_redraw_kind()`,
|
||||
`active_primitive_count()`, `note_input(Instant)` and
|
||||
`time_since_input(Instant) -> Option<Duration>`** (`iris-core`). All
|
||||
read back by `log_frame`; `note_input` is called once from
|
||||
`SensorUi::run_sensors`, which both backends and the harness already
|
||||
share, so a frame's `since_input` is comparable across all three
|
||||
without either platform doing its own bookkeeping.
|
||||
- **`iris::harness::TouchAction` gained `word() -> &'static str`**, the
|
||||
inverse of its own `parse` -- what a caller (here, `Harness::touch`)
|
||||
hands the input logger so a `.touch` file and an `iris::input` line
|
||||
agree on one spelling of each action.
|
||||
- **`iris_core::Axis` gained `Debug`** — a one-line derive, needed to log
|
||||
which axis a drag committed to.
|
||||
- **`iris/benches/report_to_touch.py`** (new): turns a report's
|
||||
`iris::input` lines back into a `.touch` file, expanding inline
|
||||
historical samples into their own lines first. Round-tripped against
|
||||
the harness in `iris/transcript-fixture/tests/input_log_roundtrip.rs`.
|
||||
|
||||
## 2026-09-07: the phone app is told which server to talk to, and pins from the link
|
||||
|
||||
Not an iris API change -- a client-facing one, in the crates around it,
|
||||
|
||||
Reference in new issue
Block a user