# phonedriver benchmarks

Real phone jobs (nine jobs checked from device state, Claude Sonnet 5.5, one Android emulator, 10 November 2026; sums of per-job medians):

| Tool | Passed | Tokens | Tool calls | Wall time |
|---|---|---|---|---|
| phonedriver 0.1.0 | 27/27 | 657,542 | 99 | 306 s |
| mobile-mcp 1.0.16 | 17/18 | 4,567,200 | 276.5 | 523 s |
| phone-harness 0.3.3 | 14/18 | 1,127,495 | 104.5 | 1360.5 s |
| adb (2 mixed jobs) | 4/4 | 203,751 | 20.5 | 83 s |

mobile-mcp used 6.9x the tokens of phonedriver. phone-harness used 1.7x the tokens and passed 14 of 18 runs.

Speed, p50 and p95 in ms, Android 17 emulator, 50 runs after 20 warm-ups, tools interleaved on one host.

| Operation | phonedriver p50 | p95 | adb p50 | p95 | phone-harness p50 | p95 | adb / phonedriver (95% CI) |
|---|---|---|---|---|---|---|---|
| Tap, back to back | 38.5 | 175.6 | 170.5 | 205.1 | 162.8 | 434.9 | 4.4x (3.0 to 5.2) |
| Tap, 1.5 s apart | 28.7 | 42.2 | 69.4 | 89.5 | 220.4 | 248.1 | 2.4x (2.3 to 2.6) |
| Screenshot | 9.1 | 11.1 | 291.2 | 763.7 | 348.3 | 715.0 | 32x (30.9 to 33.2) |
| UI tree, Settings | 51.0 | 146.3 | 2,215.7 | 3,054.8 | 2,393.8 | 3,017.7 | 43x (41.1 to 48.0) |
| UI tree, 1,000-row list | 12.7 | 20.0 | 2,163.7 | 2,204.5 | 2,362.5 | 2,398.1 | 170x (162.0 to 177.4) |
| Type 100 characters | 158.3 | 426.6 | 3,638.4 | 9,234.2 | 3,928.7 | 10,064.9 | 23x (19.7 to 25.1) |
| Tap, then what changed | 514.0 | 612.0 | 2,477.2 | 5,460.4 | n/a | n/a | 4.8x (4.7 to 5.2) |

On a HONOR X8 phone (Android 13): reading the screen 78.5 ms against 2,507 ms for adb, a screenshot 16.4 ms against 1,006 ms.
