1.1 KiB
1.1 KiB
Speaker Queue Performance
Goal
Reduce render-path latency and variance that can produce audible output glitches.
Benchmark
Run bun run bench:audio from packages/voice.
The benchmark compiles the production SpeakerQueue, performs one warmup run and seven measured runs, and reports callback latency for a 512-frame pop followed by a same-sized producer push. The queue starts with one second of 24 kHz PCM audio.
Metrics
- Primary:
speaker_queue_p99_ns - Secondary:
speaker_queue_median_ns,speaker_queue_worst_ns
Scope
src/duplex-audio.swiftscripts/bench-speaker-queue.ts
Experiments
Baseline: allocating Data queue
- Median: 3,750 ns
- p99: 5,833 ns
- Worst: 92,209 ns median across runs; one run reached 7,497,334 ns
- Decision: baseline
Experiment 1: preallocated circular queue
- Hypothesis: rendering directly from preallocated storage will reduce callback tail latency by avoiding an array allocation and
Data.removeFirst()on every callback. - Median: 1,417 ns, down 62.2%
- p99: 1,917 ns, down 67.1%
- Worst: 32,709 ns median across runs, down 64.5%
- Decision: keep