feat(dash-apps): add web dash-app performance harness - #161
Conversation
5f7244e to
d6ddcb9
Compare
|
Renamed dash-apps/perf-harness → dash-apps/_perf-harness/ so the harness folder always sorts to the top of the directory, visually separating it from the web apps. Decided to keep it inside dash-apps/ to keep all dash-app-related work co-located. If you'd prefer it elsewhere in the project (e.g., as a sibling of dash-apps/), happy to move it before merging. |
|
Added |
6ab60cf to
6021677
Compare
|
Sorry for that extra commit. This branch is clean again. |
|
@dkneeland Is there a way we can make this PR shorter? I mean, is there anything that can make this performance test harness feature conceptually simpler? 1600 lines plus is a lot of line for this. Any low hanging fruit? Any boilerplate that's avoidable? |
bcbf0ca to
802fb43
Compare
…lify CLI and shim - Removed updateToPaintP95Ms, handlerMs, heapGrowthMb, scheduledMs - Removed multi-run pick-best, CI gate selection (lib/targets.js) - Replaced custom arg parser with node:util.parseArgs - Duration via PERF_DURATION env var (default 60s -> 20s) - Scenario periods compressed, warmup 5s -> 2s, budgets 14 -> 6 - Shim samples dropped from 5 fields to 2 (actualMs, injectionLagMs) - Single run, no loop, --enable-precise-memory-info removed - Updated CI workflow to inline bash (no targets.js) - Updated README for 20s scenario, PERF_DURATION, workflow path - Net -333 lines, 12 files changed
55bdca6 to
51523fa
Compare
Simplified harness — jsdom tripwire modelThis replaces the Playwright-based browser gate with an in-process jsdom tripwire. Key changes: Architecture: Instead of launching Chromium and running the app over HTTP, the harness now loads the app's HTML directly into a jsdom environment (via drive.js) with an injected ick() replacement. This eliminates network round-trips and browser overhead. Metrics:
Hardening:
What was dropped: Chromium launch, network server, Playwright dependency, whole-run processCpuMs metric, WASM/GLB/WGSL MIME shims, scenario/targets/gate modules, shim.js. |
Migrate from Chromium/Playwright browser gate to a lightweight jsdom tripwire model. The harness now runs app code synchronously in-process via a jsdom DOM shim, measuring per-tick CPU, DOM mutation cost, and steady-state process CPU. Changes: - Replace shim.js (network-fetching Playwright helper) with drive.js (in-process jsdom tripwire runner) - Add crash detection for suppressed window.onerror and unhandled rejections (exit 2) - Calibrate the fast-app CPU loop for Windows process timing - Exclude warmup (first 2s) from mean-process-cpu metric - Fail closed when the steady sample base is truncated - Treat jsdom environment gaps as benign, not APP_ERROR - Trim harness cost: drop whole-run processCpuMs, Chromium-era MIME support, deduplicate result shape, share fast-app drive across tests - Shorten integration-test durations (~36s -> ~18s) - Document the single-stall blind spot and exemption rationale - Document key performance metrics in README Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
27a2656 to
cc75896
Compare
|
Closing this as it has been deemed too complex for the value it brings |
Summary
Verification