Files
ai-app/docs/bench/iris-phone-v3-2026-09-09.md
T

3.5 KiB

iris phone bench v3, 2026-09-09

Fresh release run on Iris's Pixel 9 Pro XL after the frame-report corrections, realistic streamed blocks, retained arena uploads and fling-clock fix. Iris reported that everything was visually working as intended. This run is paired with compose-phone-v3-2026-09-09.md.

The iris reporter resolved the phone at 120 Hz (8.3 ms budget). The paired Compose report says 60 Hz, but Iris observed what looked like 120 Hz and its fling count works out to about 118 fps after the benchmark's deliberate rests are removed. Compose nevertheless calculated late using its reported 60 Hz and 16.7 ms budget, so the two apps' late percentages are not directly comparable. Against the real 8.3 ms budget, iris recorded 0.5% late frames overall. Streaming had no late frames or missed vsyncs, with p50 3.1 ms and p99 5.0 ms, against Compose's p50 13.8 ms and p99 42.6 ms. The five missed vsyncs in the fling phase are 0.15% of its 3,409 frames; Iris could not see lag in the finished UI.

Across the similarly long complete runs, iris used 37.5 seconds of process CPU against Compose's 70.5 seconds (47% less) and peaked at 382,796 kB RSS against 581,084 kB (34% less). Mean battery current was 226 mA against Compose's 591 mA; that is encouraging but remains a device-state-sensitive reading rather than a controlled energy measurement.

The keyboard line does not describe a failed opening. The type phase opens the IME and leaves it visible. The keyboard phase's first show_ime is therefore a no-op rather than a new hidden-to-visible transition; it then observes five hides and four reopens. Including the opening in the type phase, the complete run observed five openings and five closings.

acquire is the wait for a swapchain image, not iris's own work. In particular, the fling's 8.0 ms total median consists mostly of a healthy 6.0 ms acquire wait; its median build work is 0.4 ms. late is judged on work with that acquire wait removed.

iris bench report
input/frame trace: off
per phase:
  fling: 3409 frames over 33.2s
    late: 11 (0.3%)  missed vsyncs: 5
      total  p50 8.0ms  p90 9.0ms  p99 10.5ms
      build p50 0.4ms  acquire p50 6.0ms  submit p50 1.6ms
    worst 17.4ms
  stream: 401 frames over 21.3s
    late: 0 (0.0%)  missed vsyncs: 0
      total  p50 3.1ms  p90 4.0ms  p99 5.0ms
      build p50 1.1ms  acquire p50 0.3ms  submit p50 1.6ms
    worst 7.0ms
  type: 1240 frames over 64.5s
    late: 14 (1.1%)  missed vsyncs: 0
      total  p50 5.6ms  p90 6.8ms  p99 9.1ms
      build p50 2.5ms  acquire p50 0.4ms  submit p50 2.6ms
    worst 12.8ms
  keyboard: 341 frames over 9.8s
    late: 0 (0.0%)  missed vsyncs: 0
      total  p50 2.1ms  p90 2.8ms  p99 4.5ms
      build p50 0.3ms  acquire p50 0.2ms  submit p50 1.5ms
    worst 8.5ms

frames:
  5391 frames over 128.8s at 120Hz (as the display reports it; drew 120fps) (8.3ms budget)
  late: 25 (0.5%)
  total  p50 7.5ms  p90 8.8ms  p99 10.2ms
  worst 17.4ms
  build_p50 0.4ms  acquire_p50 5.3ms  submit_p50 1.7ms

bench:
  fling: 8 flings out + 8 back at 12000px/s, travel start=idx=653/off=1557px outward=idx=528/off=909px end=idx=650/off=-103px ticked=frame-loop
  scroll: 6 cycles (24 swipes, legacy tween), streamed 400/400 fixture events
  type: 600 characters inserted then deleted, one per 50ms
  keyboard: shown 4/5, hidden 5/5 (confirmed via on_insets_changed)
  process CPU time over this run: 37457ms
  peak RSS: 382796kB
  battery current: mean -226354µA over 128 samples (min -404687, max -107812)