# Compose bench report from Iris's phone, 2026-09-06 The Compose half of P0 (RUST.md), run by Iris on her own phone and pasted back verbatim. The iris half's report goes beside it in this directory when it exists. Her caveat, worth keeping with the numbers: "I don't think this is entirely fair because the UI for iris is more minimal" -- the Compose screen also draws the usage bar, the status row and tool cards, which the iris bench screen does not yet. Her impression of the iris build before its first-touch bug: "it already feels very smooth so far". What to read first: the phone runs at 120 Hz, so the budget is 8.3 ms; `late` is measured against that. Compose's tail is the streaming phase -- `markdown reparsed while streaming: 396, 8.5ms mean, 25.8ms worst` and `record: one block: 398, 6.3ms mean, 19.9ms worst` -- which is exactly the path iris's `TranscriptScreen::apply` (replace the last row only) is meant to beat. Process CPU over the run is 20.9 s of a 38.5 s run; peak RSS 587 MB; battery current mean 419 mA. ``` ai-app render report device: Pixel 9 Pro XL (Google), Android 17 build: release transcript: 43 events, 41 rows, 93 units loaded viewport 1333px, 2 units visible on screen: the list's own 0px, AssistantMsg 24520px 0 tool calls and 0 groups open frames: 1613 frames over 38.5s at 120Hz (8.3ms budget) late: 742 (46.0%) total p50 7.7ms p90 29.2ms p99 41.1ms waited p50 0.5ms p90 12.9ms p99 27.2ms input p50 0.0ms p90 0.0ms p99 0.0ms anim p50 1.1ms p90 5.8ms p99 9.5ms layout p50 0.0ms p90 0.1ms p99 0.2ms draw p50 0.4ms p90 15.9ms p99 27.9ms sync p50 0.1ms p90 0.5ms p99 1.0ms issue p50 1.1ms p90 1.7ms p99 3.0ms swap p50 0.4ms p90 0.5ms p99 0.7ms gpu p50 1.8ms p90 2.1ms p99 6.6ms where the draw phase went: draw phase 3.83ms per frame, of which: the transcript: 0.25ms (measure 0.15, place 0.10, record 0.00) everything else: 3.58ms (93%) work since this was last copied: draw: the whole transcript: 12, 0.2ms total, 0.0ms mean, 0.0ms worst grouped tool runs: 398, 10.3ms total, 0.0ms mean, 0.1ms worst markdown cut into pieces: 1, 0.0ms total, 0.0ms mean, 0.0ms worst markdown parsed while composing: 7, 3.0ms total, 0.4ms mean, 0.5ms worst markdown ready: 46 markdown reparsed while streaming: 396, 3384.6ms total, 8.5ms mean, 25.8ms worst markdown warmed: 1, 1.4ms total, 1.4ms mean, 1.4ms worst measure: the whole transcript: 957, 248.7ms total, 0.3ms mean, 15.7ms worst message composed: 403 message cut into parts: 1, 0.1ms total, 0.1ms mean, 0.1ms worst place: the whole transcript: 1319, 162.4ms total, 0.1ms mean, 1.3ms worst record: one block: 398, 2498.7ms total, 6.3ms mean, 19.9ms worst session screen recomposed: 413 status row recomposed: 1 unit composed: 538 units flattened: 399, 44.3ms total, 0.1ms mean, 0.5ms worst usage bar recomposed: 413 bench: scroll: 6 cycles (24 swipes), streamed 400/400 fixture events process CPU time over this run: 20907ms peak RSS: 587356kB battery current: mean -418509µA over 39 samples (min -1988281, max -107812) ```