← RetroAppleJS

GPU.js kernel stress test

Direct calls to the current Apple II video kernels at 560 × 384. The harness controls demand and completion independently of emulator clocks, FPS sliders and animation frames.

Ready. Keep this tab visible during testing.

Results will identify the highest sustainable tested rate and the measured throughput ceiling for each dispatch driver.

Completed rendering throughput

Blue: JavaScript · Orange: WASM · Dashed grey: requested rate. FPS counts completed kernel renders, not displayed screen refreshes. MAX is an uncapped demand run.

Batch completion latency — p95

Blue: JavaScript · Orange: WASM. Time from the first kernel call until the batch's completion is observed, including browser notification/polling delay.

CPU submission, upload calls and GPU draw time

Blue: JavaScript · Orange: WASM. Solid: CPU ms/render · Dashed: upload-call ms/render · Dotted: isolated GPU draw ms. Profiling is separate from throughput; unavailable measurements show N/A.

Measurements

Driver / repeatRequest FPSCompleted FPSCPU ms/renderBatch p50 msBatch p95 msUpload call msUpload KiB/renderUpload complete msGPU draw msMissed budgetTarget met
How to interpret the test

One batch is outstanding at a time. WebGL2 uses asynchronous completion fences; WebGL1 is explicitly labelled when it uses blocking gl.finish. The sustainable threshold requires at least 95% of requested throughput and p95 batch latency within the batch interval in every repetition. The boundary is refined with two additional requested rates when a passing/failing bracket exists.

The default reuses deterministic precomputed inputs. The optional RAM snapshot setting includes the production-style 24 KiB slice allocation/copy. WASM changes only the dispatch loop; GPU.js still executes in JavaScript. GPU timers and upload-call timings are diagnostic measurements, not physical DMA time. Tests stop when this tab becomes hidden.

Benchmark methodology and WASM source

Active kernel source