Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion quest/m1/audio-jitter-target/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,10 @@ the native decode path too, asserting the same target series the browser's

## Required

- [Opus isolated-ring target](/quest/m1/audio-jitter-target/opus-isolated-target.md) - the isolated ring holds the target at near-zero jitter
- [Audio rename](/quest/m1/audio-jitter-target/audio-rename.md) - a renamed audio track continues the outgoing arrival estimate, so playback neither skips nor stalls
- [Watch](/quest/m1/audio-jitter-target/watch.md) - the browser's measured target, proven on Chrome and Safari against the public relay
- [AAC bursty budgets](/quest/m1/audio-jitter-target/aac-bursty-budgets.md) - post-fix nightlies confirm AAC no longer re-stalls, and its budgets are tightened from them
- [Opus near-zero budgets](/quest/m1/audio-jitter-target/opus-near-zero-budgets.md) - post-flush nightlies confirm the first row no longer stalls, and its budgets are tightened from them

## Closes

Expand Down
63 changes: 0 additions & 63 deletions quest/m1/audio-jitter-target/opus-isolated-target.md

This file was deleted.

32 changes: 32 additions & 0 deletions quest/m1/audio-jitter-target/opus-near-zero-budgets.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# [XS] Tighten the Opus near-zero browser budgets after the build flush

## Goal

Seven scheduled nightlies on `main` after the harness began flushing its build
before the first row show the Opus `near-zero` `isolated` row holding the
same 60 ms target as the `plain` row with no underrun episodes, and
`test/audio-quality/budgets.json` carries ceilings re-measured from them.

## Plan

Waits on the nightlies: check the `audio-quality-run` artifacts of the
scheduled Nightly runs on `main` (`gh run download <id> -n audio-quality-run`)
once seven have run since the fix merged. Never dispatch the nightly by hand.

The stall was never the isolated ring. That row is simply the matrix's first,
and a cold `cargo build` left about 800 MB dirty when it started. On the ARM
runner each periodic writeback burst (100 to 280 MB, about 10 s apart) froze
the page's main thread for 100 to 320 ms until the backlog drained, about 30 s
in. A branch experiment put the plain ring first after a cold build, and it
failed the same way (540 ms target, the same 10 s long-task clusters).
Isolated-first, with the build flushed beforehand, held 60 ms.

Re-measure the Opus near-zero rows by the rule in the budgets note, and drop
the note's sentence that budgets the isolated row's one-second drops as
measured. If the first row still shows long-task clusters, compare
`<tag>.longtasks.json` against the runner's disk activity before changing the
player.

## Related

- [AAC bursty budgets](/quest/m1/audio-jitter-target/aac-bursty-budgets.md) - the same re-measure for the AAC rows, on its own fix's nightlies
5 changes: 1 addition & 4 deletions quest/m1/audio-jitter-target/watch.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,11 +55,8 @@ Decided 2026-10-15: keep this proof in m1 with the existing playback and
A/V clock work. The estimator defaults on; deferring watch-worker does not
defer validation of the current player.

## Required

- [Opus isolated-ring target](/quest/m1/audio-jitter-target/opus-isolated-target.md) - the isolated ring holds the target at near-zero jitter

## Related

- [A/V clock](/quest/m1/av-clock.md) - reshapes `SyncInput` around the per-track target this line produces
- [AAC bursty budgets](/quest/m1/audio-jitter-target/aac-bursty-budgets.md) - confirms the AAC reorder fix on the nightlies, no gate on this proof
- [Opus near-zero budgets](/quest/m1/audio-jitter-target/opus-near-zero-budgets.md) - confirms the build-flush fix on the nightlies, no gate on this proof
2 changes: 1 addition & 1 deletion quest/m1/browser-rename-check.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,4 +59,4 @@ racing the old track's finish (`stream aborted by the remote server`).

- [Rust identity enforcement](/quest/m1/catalog-identity-rs.md) - the same contract for the Rust publishers
- [Capture channel count and cold-start tone](/quest/m1/publish-audio-channel-count.md) - already owns the unpinned cold-start audio-tone symptom
- [Isolated Opus target](/quest/m1/audio-jitter-target/opus-isolated-target.md) - related playout stalls, with no shared cause established
- [Isolated Opus target (#5807)](https://github.com/moq-dev/moq/pull/5807) - related playout stalls, with no shared cause established
6 changes: 6 additions & 0 deletions test/audio-quality/run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,12 @@ if [[ ${#ROWS[@]} -gt 0 ]]; then
bunx vite build --outDir "$HARNESS_RUN/page" --emptyOutDir
)

# A cold build leaves hundreds of MB dirty, and on the nightly runner each periodic writeback
# burst stalls the page's main thread for ~300 ms, so the first row would grade the build's
# flush instead of the player. Flush it before any row plays.
echo "flushing the build to disk..."
sync

# ── relay ───────────────────────────────────────────────────────────────
harness_port relay
RELAY_PORT="$HARNESS_PORT"
Expand Down