Skip to content

Preview performance and resource budgets

Benchmark cold first frame, warm seek, rapid scrub, playback, multi-track composition, Material load, thumbnails, waveform work, export throughput, cancellation, and a long edit session using representative codecs, duration, resolution, frame rate, devices, and network.

Report latency distributions and terminal resource counts, not only an average FPS.

The nightly GitHub-hosted runner stores a complete raw performance observation for regression triage, but its shared CPU load and virtualized GPU are not a controlled reference device. Absolute SLOs remain fail-closed in the source-bound release gate on the reviewed reference machine. A nightly observation may therefore carry an Actions notice without making the correctness CI red; it never substitutes for release evidence.

Cancel stale requests, use proxies, keep one main preview pipeline, lower interactive resolution, bound decode-ahead and cache, reuse compiled IR/Materials, and avoid synchronous work in pointer handlers. Review mode can trade latency for fidelity.

CSS dimensions are not backing-store dimensions. Cap device-pixel-ratio scaling so a large display does not accidentally multiply decode, texture, readback, and composite cost beyond the product budget.

Set hard limits for concurrent reads/decoders, queue length, compressed and decoded cache bytes, frame ownership, GPU textures/contexts, pending preview work, thumbnail jobs, and export concurrency. Admission should reject or wait for a bounded period, never grow without limit.

Track node count, graph depth, passes, texture samples, intermediate surfaces, input dimensions, backend compilation, and per-frame time. Enforce static package budgets and runtime product tiers.

Export, proxy generation, analysis, waveform, thumbnails, and autosave must not all consume unbounded CPU/GPU/I/O. Give interactive preview priority and expose a product scheduler for background jobs.

Record first-frame/seek latency, render/decode time, dropped/cancelled frames, queue depth, audio underruns, cache hit/bytes, GPU/backend state, export fps, written bytes, memory, and cleanup outcome.

Repeat open/import/scrub/play/edit/export/cancel/switch/dispose cycles. After bounded cache settling, workers, decoders, frames, contexts, listeners, timers, object URLs, and retained bytes must return to the documented budget.