Files
ytplayer/plans/jamesdsp-integration-report.md
2026-10-09 21:08:58 +08:00

3.0 KiB
Raw Blame History

JamesDSP integration report — 2026-10-09

Phases 1–5 are implemented in five focused commits. Standard remains the default and its EQ construction is byte-for-byte checked against the pre-refactor fixture. JamesDSP lives only in the lazy feature:jamesdsp group; the service worker shell has no DSP assets. The shared AudioGraph owns the sole context and one source per media element. Enabling JamesDSP creates one worklet and one WASM heap; errors restore Standard routing. iOS remains gated by liveAudioIOS. Uploaded impulse responses are session-only, and Liveprog/DDC/arbitrary text effects are excluded. The worklet uses a static, pinned relative module import because AudioWorkletGlobalScope rejects dynamic import.

Verification:

Check Result
Frontend tests 266 passed, 0 failed
Server suite Passed with the integration test venv on PATH
Offline completion Chromium + WebKit: 109/109 runtime files, zero missing/failures; all four layouts
Lazy / hidden timers Both engines pass; hidden-timers has no page errors
UI geometry / icons 384 geometry cases and 24 icon cases pass
Settings persistence 24 settings keys unchanged through old-client update; Chromium OPFS save/play passes before and after update. Linux WebKit lacks native OPFS. DSP preset persists while disabled.
DSP harness Both engines pass all seven presets, Standard comparison, A/B bypass, track switch, offline reload and corrupt-WASM fallback. One heap, one worklet, two pre-existing media sources.
Migration Both engines pass unthrottled: one banner/reload, 142 cached entries, offline reload and playback guard. Lossy Chromium repeatedly times out waiting for the new stamped page after the legacy user-triggered refresh, despite candidate install and CACHE_STATUS ready:true; WebKit lossy was not reached.

Three-run cold medians versus plans/integration-report.md:

Engine/profile FCP before → after Boot before → after Cold wire before → after Positive app.js bodies
Chromium LTE 1360 → 1360 ms 6457 → 6677 ms 648 KB → 1.82 MB 1
Chromium lossy 1992 → 1936 ms 10407 → 10582 ms 648 KB → 1.82 MB 1
WebKit LTE 895 → 904 ms 2307 → 2374 ms 976 KB → 2.14 MB 1
WebKit lossy 2744 → 2751 ms 5642 → 5757 ms 983 KB → 2.15 MB 1

FCP/boot are within 4% of the integrated build. Cold-session wire grows by the approximately 1.2 MB upstream WASM, fetched after paint by the required completion job so JamesDSP remains available offline. This is a real first-install transfer cost. The cold results are in perf/results/dsp-cold-check.json.

No real iPhone, locked-screen playback, thermal/CPU timing, real-ear preset tuning, crossfade, P2P, or active-DSP saved/OPFS playback was verified. Phase 7 beta push/deploy was intentionally not run: this task explicitly forbids push/deploy. Do not merge or enable the engine by default until the lossy migration handoff is resolved and an iPhone beta check validates lock-screen expectations and CPU cost.