From 71a3fae6554ee401ffaf05bf1d1071f92ae4cd88 Mon Sep 17 00:00:00 2001 From: iris <2+iris@noreply.localhost> Date: Sun, 6 Sep 2026 01:35:26 -0400 Subject: [PATCH] IRIS_TODO.md: streaming re-lays out the whole message, from the phone's bench v2 Co-Authored-By: Claude Fable 5.1 --- docs/IRIS_TODO.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/docs/IRIS_TODO.md b/docs/IRIS_TODO.md index d6ec842..b0baf02 100644 --- a/docs/IRIS_TODO.md +++ b/docs/IRIS_TODO.md @@ -450,3 +450,21 @@ do not duplicate it there. and control sizes; the emulator at two densities and the phone draw the same layout at the same physical size. After the bench setup is finished, before P1 draws any new screen. + +## From the phone, bench v2 (2026-09-06): streaming re-lays out the whole message + +- [ ] **Streaming a delta into a long message costs a full text layout of + that message.** Iris's phone report (`docs/bench/iris-phone-v2-2026-09-06.md`): + the stream phase is the one place iris is behind Compose (p50 18.2 ms vs + 13.4 ms; p99 level at ~43 ms). `TranscriptScreen::apply` replaces only + the last row, but that row is the growing message, and replacing it + re-renders its markdown and re-shapes the entire paragraph run through + parley on every event. Compose pays a reparse (8.6 ms mean) for the + same event. What "done" looks like: a streamed delta re-lays out only + the block it lands in (the last paragraph or code block), with earlier + blocks' layouts kept -- which needs a row to be a column of per-block + `Text`s rather than one `TextEdit` for the whole message, or parley's + layout to be split at block boundaries; measured by the stream phase's + p50 dropping below Compose's on the phone. Do this after the four bench + v2 defects (stale primitives, finger fling, decay curve, IME show) are + closed, since they are what make the run unrepresentative today.