e2e framework benchmark — ios 2026-10-25

Run eas-ios-warden, started 2026-10-25T23:55:27.736Z

Host
VirtualMac2,1, Apple M4 Pro (Virtual), 10 cores, 40.0 GB RAM, macOS 26.5.2
Toolchain
Xcode 26.6, Java 17.0.19, Node 22.23.1, bun 1.3.14, warden 0.3.1
Host load at start
2.87
Device
warden-iphone-17-1 (ios, iOS 26.5), udid 733DA5E8-BA9B-4E4A-98FD-6CD76BA8C161
App
nz.co.delacour.warden.example, hash import:c283eae41c7a, sha256 c283eae41c7a, 96.4 MB
Options
runs 5, retries 0, reboot between no, caffeinated yes
Frameworks
warden bun 1.3.14 + warden-e2e

Fairness rules

Summary

FrameworkStatusVersionSuite median (warm)p95RatioCold rep 1Cold-start costPrepareTeardownOverheadPass rateFlakeResidueFootprint (LOC / deps)
warden✓ okbun 1.3.14 + warden-e2e86.30 s86.71 s1.00×71.98 snone (rep 1 not slower, -13.72 s)596 ms72 ms67 ms100%0%0 proc / 0 app / 0 path379 LOC / 0 B

Warm suite wall time

Bar = warm median. Whisker = p95. Dot = cold rep 1. Lower is faster; ratios are against the fastest framework.

Warm suite median per framework with p95 whisker and cold rep 1 markerwarden bun 1.3.14 + warden-e2e: warden 86.30 s · 1.00×025 s50 s75 s100 swarden bun 1.3.14 + warden-e2ewarden: 86.30 s · 1.00× (p95 86.71 s, cold rep 1 71.98 s)86.30 s · 1.00×

Per-test medians (ms)

Testwarden
onboarding steps through to sign-in2929 (1.00×)
invalid email and short password show field errors16054 (1.00×)
a locked account shows the form alert10096 (1.00×)
valid credentials land on todos9788 (1.00×)
add, complete and filter todos14494 (1.00×)
open a todo, mark it done, then delete it11089 (1.00×)
deep link opens a todo by id10656 (1.00×)
settings shows the account, toggles switches and signs out10945 (1.00×)

Median per test

Warm median per test and framework, in millisecondsonboarding steps through to sign-in: warden 2929 ms · 1.00×. invalid email and short password show field errors: warden 16054 ms · 1.00×. a locked account shows the form alert: warden 10096 ms · 1.00×. valid credentials land on todos: warden 9788 ms · 1.00×. add, complete and filter todos: warden 14494 ms · 1.00×. open a todo, mark it done, then delete it: warden 11089 ms · 1.00×. deep link opens a todo by id: warden 10656 ms · 1.00×. settings shows the account, toggles switches and signs out: warden 10945 ms · 1.00×05 s10 s15 s20 sonboarding steps through to sign-inwarden: 2929 ms · 1.00×2929 ms · 1.00×invalid email and short password show field errorswarden: 16054 ms · 1.00×16054 ms · 1.00×a locked account shows the form alertwarden: 10096 ms · 1.00×10096 ms · 1.00×valid credentials land on todoswarden: 9788 ms · 1.00×9788 ms · 1.00×add, complete and filter todoswarden: 14494 ms · 1.00×14494 ms · 1.00×open a todo, mark it done, then delete itwarden: 11089 ms · 1.00×11089 ms · 1.00×deep link opens a todo by idwarden: 10656 ms · 1.00×10656 ms · 1.00×settings shows the account, toggles switches and signs outwarden: 10945 ms · 1.00×10945 ms · 1.00×

Spread across warm reps

Whisker = min to max. Shaded box = min to p95. Tick = median. A distribution carries no quartiles, so the box is not an interquartile range.

Warm rep spread per test: min to max whisker, min to p95 box, median tickonboarding steps through to sign-in: warden warden 2.93 s. invalid email and short password show field errors: warden warden 16.05 s. a locked account shows the form alert: warden warden 10.10 s. valid credentials land on todos: warden warden 9.79 s. add, complete and filter todos: warden warden 14.49 s. open a todo, mark it done, then delete it: warden warden 11.09 s. deep link opens a todo by id: warden warden 10.66 s. settings shows the account, toggles switches and signs out: warden warden 10.94 s05 s10 s15 s20 sonboarding steps through to sign-inwarden: warden 2.93 s (p95 3.24 s, min 2859, max 3242, n 4)warden 2.93 sinvalid email and short password show field errorswarden: warden 16.05 s (p95 16.98 s, min 15768, max 16979, n 4)warden 16.05 sa locked account shows the form alertwarden: warden 10.10 s (p95 10.49 s, min 9999, max 10493, n 4)warden 10.10 svalid credentials land on todoswarden: warden 9.79 s (p95 9.94 s, min 9024, max 9935, n 4)warden 9.79 sadd, complete and filter todoswarden: warden 14.49 s (p95 14.67 s, min 14050, max 14669, n 4)warden 14.49 sopen a todo, mark it done, then delete itwarden: warden 11.09 s (p95 11.39 s, min 10886, max 11394, n 4)warden 11.09 sdeep link opens a todo by idwarden: warden 10.66 s (p95 10.90 s, min 10292, max 10900, n 4)warden 10.66 ssettings shows the account, toggles switches and signs outwarden: warden 10.94 s (p95 11.20 s, min 10821, max 11199, n 4)warden 10.94 s

Per-step latency

Whisker = min to max. Shaded box = min to p95. Tick = median. Only frameworks that report steps appear.

Step latency per frameworkwarden (504 steps): warden 85 ms · p95 3.63 s02 s4 s6 swarden (504 steps)warden: 85 ms · p95 3.63 s85 ms · p95 3.63 s
FrameworkStepsMedianp95Max
warden50485 ms3.63 s4.98 s

Where step time goes

Step scopes differ per tool: warden's one fill step spans the focus tap, select-all, typing and read-back confirm, argent reports a separate idle step and into …, agent-device reports fill and type separately, and tester.army reports locator steps. Compare a verb's share within a tool, not its median across tools.

warden

VerbnShareMedianp95Max
fill6880.4%3.38 s4.20 s4.98 s
tap18010.6%75 ms333 ms620 ms
expect2569.1%21 ms558 ms578 ms

Resources

CPU

CPU use per frameworkHost CPU average: warden 3.0%. Host CPU peak: warden 38.8%. Simulator CPU average: warden 74.3%. Simulator CPU peak: warden 282.8%0%100%200%300%Host CPU averagewarden: 3.0%3.0%Host CPU peakwarden: 38.8%38.8%Simulator CPU averagewarden: 74.3%74.3%Simulator CPU peakwarden: 282.8%282.8%

Memory

Peak resident memory per frameworkHost RSS peak: warden 158.6 MB. Simulator RSS peak: warden 10.7 GB0 B4.7 GB9.3 GB14.0 GBHost RSS peakwarden: 158.6 MB158.6 MBSimulator RSS peakwarden: 10.7 GB10.7 GB
FrameworkScopeCPU-s / repCPU avgCPU peakRSS avgRSS peak
wardenhost2.97 s3.0%38.8%145.9 MB158.6 MB
wardensim—74.3%282.8%10.6 GB10.7 GB

CPU-s / rep is the host CPU time of the timed run (warm median) and the headline. CPU avg and peak are ps %cpu, a decaying average on macOS: they move with suite length, do not judge on them.

Where the CPU goes

One table per framework, from the warm-median rep's timed run (the rep whose host CPU-seconds is the lower median). Rows are processes grouped by label (top 12 per scope, the rest in other); host is the framework's own process tree, sim the simulator's launchd_sim tree (iOS only). Share is of the scope's CPU-seconds. RSS is the label's summed RSS per 500 ms tick (0 where it had no process). Spawns counts distinct pids a tick saw: a process that lives between two ticks is only seen through the (exit charge) rows (CPU of a child the bench ran, booked at its exit), so many short-lived xcrun simctl calls read low in Spawns and in CPU.

warden

ProcessScopeCPU-sShareRSS avgRSS peakSpawns
warden-simdhost1.76 s60.0%56.5 MB56.7 MB1
bun testhost1.16 s39.5%90.1 MB101.3 MB1
bun test (exit charge)host0.01 s0.5%0 B0 B0
bun cli.tshost0.00 s0.0%0 B0 B0
simctlhost0.00 s0.0%0 B0 B0
wardenexamplesim32.07 s48.8%373.1 MB428.9 MB8
iOSsim25.41 s38.6%9.7 GB9.7 GB108
SimulatorFrameworkBridge-iOS servesim3.53 s5.4%185.6 MB199.8 MB13
bun cli.tssim2.28 s3.5%228.3 MB229.5 MB1
CoreSimulatorBridgesim1.25 s1.9%84.9 MB85.0 MB1
pssim0.69 s1.0%1.8 MB1.8 MB171
launchd_simsim0.33 s0.5%36.8 MB36.8 MB1
xpcproxy_simsim0.22 s0.3%411.4 KB13.3 MB7
pkdsim0.00 s0.0%58.9 MB58.9 MB1
aslmanagersim0.00 s0.0%21.2 MB21.2 MB1
caffeinatesim0.00 s0.0%7.3 MB7.3 MB1
(launchctl)sim0.00 s0.0%0 B0 B0
othersim0.00 s0.0%0 B0 B0

Residue

Unsupported / failed

None.