e2e framework benchmark — ios 2026-10-25

Run eas-ios-warden, started 2026-10-25T12:35:52.050Z

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.1.1
Host load at start
3.85
Device
warden-iphone-17-1 (ios, iOS 26.5), udid 07FBA7CD-07EC-40FA-8ADF-5EC275C0C571
App
nz.co.delacour.warden.example, hash import:2d35643eda49, sha256 2d35643eda49, 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-e2e97.04 s98.63 s1.00×98.33 s1.94 s652 ms85 ms80 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 97.04 s · 1.00×025 s50 s75 s100 swarden bun 1.3.14 + warden-e2ewarden: 97.04 s · 1.00× (p95 98.63 s, cold rep 1 98.33 s)97.04 s · 1.00×

Per-test medians (ms)

Testwarden
onboarding steps through to sign-in3136 (1.00×)
invalid email and short password show field errors17987 (1.00×)
a locked account shows the form alert11046 (1.00×)
valid credentials land on todos10937 (1.00×)
add, complete and filter todos16997 (1.00×)
open a todo, mark it done, then delete it12015 (1.00×)
deep link opens a todo by id11791 (1.00×)
settings shows the account, toggles switches and signs out13018 (1.00×)

Median per test

Warm median per test and framework, in millisecondsonboarding steps through to sign-in: warden 3136 ms · 1.00×. invalid email and short password show field errors: warden 17987 ms · 1.00×. a locked account shows the form alert: warden 11046 ms · 1.00×. valid credentials land on todos: warden 10937 ms · 1.00×. add, complete and filter todos: warden 16997 ms · 1.00×. open a todo, mark it done, then delete it: warden 12015 ms · 1.00×. deep link opens a todo by id: warden 11791 ms · 1.00×. settings shows the account, toggles switches and signs out: warden 13018 ms · 1.00×05 s10 s15 s20 sonboarding steps through to sign-inwarden: 3136 ms · 1.00×3136 ms · 1.00×invalid email and short password show field errorswarden: 17987 ms · 1.00×17987 ms · 1.00×a locked account shows the form alertwarden: 11046 ms · 1.00×11046 ms · 1.00×valid credentials land on todoswarden: 10937 ms · 1.00×10937 ms · 1.00×add, complete and filter todoswarden: 16997 ms · 1.00×16997 ms · 1.00×open a todo, mark it done, then delete itwarden: 12015 ms · 1.00×12015 ms · 1.00×deep link opens a todo by idwarden: 11791 ms · 1.00×11791 ms · 1.00×settings shows the account, toggles switches and signs outwarden: 13018 ms · 1.00×13018 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 3.14 s. invalid email and short password show field errors: warden warden 17.99 s. a locked account shows the form alert: warden warden 11.05 s. valid credentials land on todos: warden warden 10.94 s. add, complete and filter todos: warden warden 17.00 s. open a todo, mark it done, then delete it: warden warden 12.02 s. deep link opens a todo by id: warden warden 11.79 s. settings shows the account, toggles switches and signs out: warden warden 13.02 s05 s10 s15 s20 sonboarding steps through to sign-inwarden: warden 3.14 s (p95 3.23 s, min 3057, max 3233, n 4)warden 3.14 sinvalid email and short password show field errorswarden: warden 17.99 s (p95 18.28 s, min 17578, max 18283, n 4)warden 17.99 sa locked account shows the form alertwarden: warden 11.05 s (p95 11.56 s, min 10749, max 11557, n 4)warden 11.05 svalid credentials land on todoswarden: warden 10.94 s (p95 11.34 s, min 10606, max 11344, n 4)warden 10.94 sadd, complete and filter todoswarden: warden 17.00 s (p95 17.26 s, min 16603, max 17260, n 4)warden 17.00 sopen a todo, mark it done, then delete itwarden: warden 12.02 s (p95 12.57 s, min 11808, max 12569, n 4)warden 12.02 sdeep link opens a todo by idwarden: warden 11.79 s (p95 12.22 s, min 11202, max 12223, n 4)warden 11.79 ssettings shows the account, toggles switches and signs outwarden: warden 13.02 s (p95 13.79 s, min 12502, max 13787, n 4)warden 13.02 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 170 ms · p95 3.93 s02 s4 s6 swarden (504 steps)warden: 170 ms · p95 3.93 s170 ms · p95 3.93 s
FrameworkStepsMedianp95Max
warden504170 ms3.93 s5.00 s

Resources

CPU

CPU use per frameworkHost CPU average: warden 8.1%. Host CPU peak: warden 59.4%. Simulator CPU average: warden 102.7%. Simulator CPU peak: warden 292.5%0%100%200%300%Host CPU averagewarden: 8.1%8.1%Host CPU peakwarden: 59.4%59.4%Simulator CPU averagewarden: 102.7%102.7%Simulator CPU peakwarden: 292.5%292.5%

Memory

Peak resident memory per frameworkHost RSS peak: warden 184.9 MB. Simulator RSS peak: warden 36.5 GB0 B9.3 GB18.6 GB27.9 GB37.3 GBHost RSS peakwarden: 184.9 MB184.9 MBSimulator RSS peakwarden: 36.5 GB36.5 GB
FrameworkScopeCPU-s / repCPU avgCPU peakRSS avgRSS peak
wardenhost9.12 s8.1%59.4%147.8 MB184.9 MB
wardensim—102.7%292.5%36.4 GB36.5 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-simdhost7.03 s77.2%55.9 MB56.0 MB1
bun testhost1.15 s12.6%92.2 MB107.1 MB1
bun test (exit charge)host0.69 s7.5%0 B0 B0
simctlhost0.24 s2.7%277.4 KB20.7 MB3
(PlistBuddy)host0.00 s0.0%0 B0 B0
(bash)host0.00 s0.0%0 B0 B0
(simctl)host0.00 s0.0%0 B0 B0
bun cli.tshost0.00 s0.0%0 B0 B0
iOSsim75.30 s64.7%34.8 GB34.8 GB286
wardenexamplesim30.57 s26.3%374.9 MB432.8 MB8
SimulatorFrameworkBridge-iOS servesim6.04 s5.2%197.7 MB210.2 MB12
bun cli.tssim2.01 s1.7%235.0 MB241.7 MB1
CoreSimulatorBridgesim0.94 s0.8%83.7 MB83.9 MB1
launchd_simsim0.39 s0.3%52.2 MB52.2 MB1
xpcproxy_simsim0.26 s0.2%390.5 KB11.4 MB8
mlhostdsim0.24 s0.2%129.7 KB14.4 MB2
pssim0.15 s0.1%1.9 MB1.9 MB191
(launchctl)sim0.14 s0.1%93.2 KB17.4 MB1
storekitdsim0.14 s0.1%127.9 MB127.9 MB1
trialdsim0.13 s0.1%96.6 MB96.6 MB1
othersim0.00 s0.0%443.9 MB443.9 MB6

Residue

Unsupported / failed

None.