Raw device-run numbers, citable

The README renders these as designed panels; this file keeps the raw markdown tables verbatim for citing, diffing, and copy-pasting. All results measured on physical hardware, same workload corpus on both backends. Raw reports: bench/scripts/reports/.

1 vs 20 — force-stop replay

force-stop scenario, large_chunked (200 MB / 40 chunks), process killed mid-run and relaunched:

metric bridge workmanager
attempts 2 2
chunks replayed 1 20
time to complete 61,350 ms 72,346 ms

Bridge re-executed only the chunk in flight at the kill; every completed chunk’s result survived. WorkManager, with no resume primitive, restarted from chunk 0.

The stall verdict

stall scenario: unplugged, demoted to RARE, deep Doze forced — then both APIs asked “why?”:

item workmanager says bridge says
ping-none SUCCEEDED Finished [INFERRED]
ping-unmetered_charging RUNNING DeferredByDoze(deep=true) [REPORTED]
medium_sync-none RUNNING Finished [INFERRED]
medium_sync-unmetered_charging SUCCEEDED DeferredByDoze(deep=true) [REPORTED]
large_chunked-none RUNNING DeferredByDoze(deep=true) [REPORTED]
large_chunked-unmetered_charging RUNNING DeferredByDoze(deep=true) [REPORTED]

WorkManager reports RUNNING for jobs the forced idle has stopped — a stale answer, not just an empty one (in medium_sync-none it reports RUNNING for work Bridge’s copy had already finished). Bridge’s verdicts for still-pending items carry basis=REPORTED: they come from getPendingJobReasons, the platform’s own explanation, not inference; completed items answer Finished.

Durable acceptance — force-stop mid-delay

Durable block force-stopped mid-delay(20s), relaunched after the timer elapsed while the process was dead:

metric value
state SUCCEEDED
firstStepExecutions 1 (ran before the kill, replayed after)
secondStepExecutions 1 (ran only after relaunch)
step events journaled 2
parks 1

Step counters persist in on-device storage precisely because process memory does not — that is the scenario. The simulator’s signature demo additionally survives death at +30 min and deep Doze 1–3 h mid-delay(2h).

Bridge vs WorkManager

capability Bridge WorkManager  
Resume interrupted work at the exact chunk Yes — chunk ledger No — restarts from zero device-verified (1 vs 20 chunks replayed)
Explain stalled work Typed verdict + platform evidence ([REPORTED]) ENQUEUED (and can report stale RUNNING) device-verified (stall scenario)
Durable coroutines (suspend blocks surviving death) Yes — deterministic replay, journaled steps/timers/awaits No device-verified (force-stop mid-delay)
Chains resume at the failed link Yes — links compile to chunks No — chain restarts verified in instrumented suite
Per-run history with death forensics ledger(): Died(exitReason) attributed via ApplicationExitInfo, device context, cost None (keeps no run history)  
Measured per-run cost HealthStats deltas; flags “expensive work declared unimportant” None  
Deadline escalation mustCompleteBy: DEFAULT → EXPEDITED → while-idle alarm, each step journaled Expedited flag only  
Importance-aware quota budgeting LOW/MIN sheds explicitly in demoted buckets, never silently Silent platform deferral  
Doze strategy Maintenance-window burst-drain, doze-exit freshness dispatch, rhythm prediction Platform default  
Constraints charging, network/unmetered, battery/storage-not-low, device-idle, content-URI triggers same  
Periodic + initial delay Yes (journaled generations / exact-path latency) Yes  
Data payloads Yes — journaled input + per-attempt output Yes — latest output only device-verified (round trip)
Tags (query / cancel by tag) Yes Yes device-verified
Work observers Flow (stateFlow / eventsFlow); LiveData via asLiveData() LiveData / Flow device-verified
Multi-branch chains Yes — prerequisite DAG (after(...) / combine) Yes device-verified (DAG join)
Where WorkManager still wins      
OEM maturity one device of hardware evidence a decade across every OEM’s process killer honest gap
Ecosystem (Hilt integration, docs, Stack Overflow mass) new vast  

This site uses Just the Docs, a documentation theme for Jekyll.