WebGPU shader stress test
Raw submissions to the current Apple II WebGPU shader at 560 × 384. The harness controls demand and queue completion independently of emulator clocks, the renderer's two-frame queue, FPS controls and animation frames.
Completed rendering throughput
Blue: JavaScript · Orange: WASM · Dashed grey: requested rate. FPS counts completed shader renders, not displayed refreshes. MAX is uncapped demand.
Batch completion latency — p95
Blue: JavaScript · Orange: WASM. Time from the first submission call until completion of all work in the batch is observed through the WebGPU queue.
CPU submission, uploads and GPU render-pass time
Blue: JavaScript · Orange: WASM. Solid: CPU ms/render · Dashed: writeBuffer call ms · Dash-dot: upload-only queue completion ms · Dotted: isolated GPU render-pass ms. Profiling is separate from throughput; unavailable timestamp queries show N/A.
Measurements
| Driver / repeat | Request FPS | Completed FPS | CPU ms/render | Batch p50 ms | Batch p95 ms | Upload call ms | Upload KiB/render | Upload complete ms | GPU draw ms | Missed budget | Target met |
|---|
How to interpret the test
One bounded batch is outstanding at a time. Every batch is counted only after queue.onSubmittedWorkDone() resolves. The sustainable threshold requires at least 95% of requested throughput and p95 batch latency within the batch interval in every repetition. Two midpoint measurements refine a passing/failing bracket.
The default reuses deterministic inputs. The optional RAM snapshot setting includes a fresh 24 KiB copy. WASM changes only the dispatch loop; WebGPU calls and shader execution remain browser operations. Upload completion includes queue and promise-notification overhead and is not physical DMA time. Tests stop when this tab becomes hidden.