diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index a1ef1633de..46b84994fa 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -413,11 +413,12 @@ jobs: env: # Somewhere upload-artifact can reach; the harness default is under $TMPDIR. MOQ_TEST_RUNS: ${{ runner.temp }}/moq-test-runs + # A passing run is kept too: budgets.json is measured from these nights. + MOQ_TEST_KEEP: 1 # The run directory is the diagnosis: each process's log, the shaper's - # counters, the raw samples, and every row's summary. The harness keeps it - # on a failure without being asked. - - name: Keep the failing run - if: ${{ failure() }} + # counters, the raw samples, and every row's summary. + - name: Keep the run + if: ${{ !cancelled() }} uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: audio-quality-run diff --git a/quest/m0/README.md b/quest/m0/README.md index 09661c0e1a..8d14ee91d1 100644 --- a/quest/m0/README.md +++ b/quest/m0/README.md @@ -86,7 +86,6 @@ have fixes on `main`: macOS tests (#5335), drill-sensitivity (#5338), loom - [Wire compat on main](/quest/m0/wire-compat-green.md) - the nightly released-wire step runs again: planned breaks re-measured against the new releases, and a released-API client for the released JS lanes - [Release builds link](/quest/m0/release-link.md) - the Linux zigbuild release binaries and moq-gst packages link again after the 2026-10-11 nixpkgs bump, so the next release cut can publish - [Fuzz builds under LTO](/quest/m0/fuzz-lto.md) - the nightly fuzz targets build again despite the release profile's fat LTO -- [Audio quality budgets](/quest/m0/audio-quality-budgets.md) - the nightly Audio quality job grades against ceilings measured on its own runner, so a breach means a regression again - [web-transport releases the qmux fixes](/quest/m0/qmux-credit-upstream.md) - waiting on moq-dev/web-transport#412 and #413 to merge and ship, which qmux credit bumps to - [qmux credit](/quest/m0/qmux-credit.md) - qmux returns connection credit for dropped and stopped streams and delivers its close frame, on both lines - [Broadcast epochs](/quest/m0/broadcast-epoch/README.md) - every first-party publisher that can restart mints a fresh route epoch, the newest wins a path, and only routes with the same epoch resume a subscription diff --git a/quest/m0/audio-quality-budgets.md b/quest/m0/audio-quality-budgets.md deleted file mode 100644 index bb7d4b51e5..0000000000 --- a/quest/m0/audio-quality-budgets.md +++ /dev/null @@ -1,45 +0,0 @@ -# [S] Audio quality budgets come from the nightly runner - -## Goal - -The nightly `Audio quality` job passes on `main`'s current player, and a breach -means a regression again. The browser rows' ceilings in -`test/audio-quality/budgets.json` are measured on the nightly runner, not on a -developer machine, and the file's `note` says how. - -Non-goals: improving playout to meet tighter ceilings. That stays with -[Watch](/quest/m1/audio-jitter-target/watch.md). The replay rows, which PRs -already enforce, keep their own budgets. - -## Plan - -Seen 2026-10-02 to 2026-10-12: the job has failed every night since #4395 -added it. The 2026-10-12 run (38276133321) breached 27 keys across the -Chromium rows, for example `chromium-aac-44100-bursty-isolated` at a -`stalled_share` of 0.324 against 0.01, and `target_ms_p95` on most Opus -rows. The browser ceilings were recorded locally (#4426), but nightly -measures on an `ubuntu-24.04-arm` runner. A red job nobody can act on hides -real regressions, so this moved out of Watch into m0 (maintainer, -2026-10-13). - -- Measure across several scheduled nightly runs before setting ceilings; - Nightly is never dispatched from a branch. A single sample's noise would make - the job flaky. Failing runs keep their summaries as the - `audio-quality-run` artifact for 7 days. -- Set each ceiling from the observed spread with modest headroom, and record - the method in `budgets.json`'s `note`. Each loosened ceiling needs its - reason in review (see `test/audio-quality/README.md`). -- Some rows may be genuine defects rather than runner noise. The AAC bursty - rows stalling a third of the time look like one. Budget what the player - does today, and file each suspected defect as a follow-up quest, so the job - goes green without hiding it. -- Every row stays budgeted (decided 2026-10-13): a noisy row gets a wider - ceiling from its measured spread. The harness has no per-row opt-out, and - none is added. - -Public API: none. Wire: none. - -## Related - -- [Watch](/quest/m1/audio-jitter-target/watch.md) - tightens these ceilings once playout improves -- [Audio quality native](/quest/m2/audio-quality-native.md) - reuses the same budget file for a native lane diff --git a/quest/m1/audio-jitter-target/watch.md b/quest/m1/audio-jitter-target/watch.md index fe80fac882..53ed4ead6a 100644 --- a/quest/m1/audio-jitter-target/watch.md +++ b/quest/m1/audio-jitter-target/watch.md @@ -32,9 +32,8 @@ about 22 s with skip-aheads on the way down. - Decide whether those re-stall refills are what the goal wants, using the replay rows as the measurement. Tighten the replay budgets with any fix. - Tighten the browser rows only from the ceilings - [Audio quality budgets](/quest/m0/audio-quality-budgets.md) measures on the - nightly runner. + Tighten the browser rows only from nightly runner measurements, re-measured + as `test/audio-quality/budgets.json`'s note describes. - The replay sizes every frame as the trace's median spacing, which a trace missing most of its frames defeats; record the codec's frame duration in the trace and replay that instead. @@ -59,4 +58,3 @@ release. ## Related - [A/V clock](/quest/m1/av-clock.md) - reshapes `SyncInput` around the per-track target this line produces -- [Audio quality budgets](/quest/m0/audio-quality-budgets.md) - measures the browser rows' ceilings on the nightly runner, which this quest tightens diff --git a/test/audio-quality/README.md b/test/audio-quality/README.md index b0ed6bdd79..ad29c3bb12 100644 --- a/test/audio-quality/README.md +++ b/test/audio-quality/README.md @@ -83,7 +83,7 @@ configuration. connection and track, priority, and maximum age, so it adds no upstream subscription demand. Groups drain concurrently, so an earlier stalled group cannot hide a later arrival. Capture errors void the row. Capture adds local decoding and recording work; it is off by default and -on in nightly so a failing run preserves the inputs for diagnosis. +on in nightly so a run preserves the inputs for diagnosis. To replay a capture, put its arrivals and final environment configuration into the version 2 `Trace` below, subtract the first arrival's `at` from every arrival and from the last sample's @@ -213,10 +213,12 @@ replay row crosses no shaper, so the `shaper` void does not apply to it. `budgets.json` holds a ceiling per graded key per row, keyed by the whole row: runtime, codec, rate, profile, and ring. Under `--enforce` a run fails on a breach, a budgeted key the run left unmeasured, a void row, or a row with no budget. Tightening a ceiling is a visible diff; loosening -one needs a reason in review. The file's `note` says how the current ceilings were measured. +one needs a reason in review. The file's `note` says how the current ceilings were measured: the +browser rows come from several nightly runs, not a developer machine. -The nightly `Audio quality` job runs the matrix under `--enforce` and keeps a failing run directory -for a week: each process's log, the shaper's counters, every row's raw samples and summary. The +The nightly `Audio quality` job runs the matrix under `--enforce` and keeps every run directory for a +week as the `audio-quality-run` artifact: each process's log, the shaper's counters, every row's raw +samples and summary. The replays also run under `--enforce` on every PR that touches the player's packages (`js/watch`, `js/hang`, `js/net`, `js/signals`) or the harness (`.github/workflows/audio-quality.yml`), so a change that moves them updates `budgets.json` in the same PR. diff --git a/test/audio-quality/budgets.json b/test/audio-quality/budgets.json index 955559dbde..ecd04566ca 100644 --- a/test/audio-quality/budgets.json +++ b/test/audio-quality/budgets.json @@ -1,5 +1,5 @@ { - "note": "Measured 2026-09-28 on a shared Linux workstation: two full 60 s runs and one 20 s run, seed 7. Each ceiling is twice the worse run, rounded up to two significant figures, with a floor (5 underruns/min, 20 gap ms/min, 1 skip/min, 100 discarded ms/min, 1% stalled, 1% silence) so one runner hiccup does not fail a clean row; target_ms_p95 is the worst measured plus one 20 ms bucket. The fixed-250 control measured zero on every counter. Every auto row records today's shallow target (#3477: 43 ms for Opus, underrunning thousands of quanta a minute), so its ceilings catch a regression past that floor and nothing better; the jitter target work is expected to tighten them. Not yet measured on the nightly runner, which has no audio device; re-record from its first runs. Updated 2026-09-29: mild and wide now use shared order-preserving Gaussian jitter; bursty and step are new. Those 16 rows were re-recorded for 60 s each, seed 7, on the same shared Linux workstation with concurrent bounded builds. Their ceilings use twice the measurement rounded upward to two significant figures and the same floors above; target_ms_p95 adds one 20 ms bucket. Other rows retain their previous measurements. These remain current-player regression ceilings, not target audio quality; re-record on the nightly runner before tightening them. The replay rows are deterministic, so their ceilings are exactly what they measured on 2026-10-01, through the end of each recording, with no headroom: any regression fails them, and an improvement should be tightened in. Updated 2026-10-04: the replay rows now resolve \"auto\" from the measured arrival estimator instead of the round trip, and were re-measured exactly on the audio-jitter-target line; underruns fell to at most 2 a minute, while a run dry now re-stalls and refills to the target, which shows up as stalled and silent share.", + "note": "The browser rows are measured on the nightly runner (ubuntu-24.04-arm, headless Chromium, seed 7, 60 s a row): the audio-quality-run artifacts of the seven scheduled Nightly runs on main from 2026-10-07 to 2026-10-13 (37633358782, 37790146216, 37940662573, 38054566400, 38143901976, 38276133321, 38415278161). Each ceiling is the worst of the seven nights times 1.25, plus one runner hiccup, rounded up to two significant figures. The hiccup is sized from the single gaps the 2026-10-08 night put on otherwise clean rows, the fixed-250 control among them: 250 underruns/min, 700 gap ms/min, 3.3 skips/min, 280 discarded ms/min, 0.01 stalled, 0.015 silence, and one 20 ms bucket of target. Budgeted this way, every one of the seven nights passes when it is held out of the measurement except 2026-10-08, whose two-second stall on the Opus mild isolated row is beyond one hiccup; that row's own ceilings include it. These ceilings record today's player as the runner hears it, not target audio quality: the AAC bursty rows stall for about a third of the window and the Opus near-zero isolated row drops up to a second at a time, and both are budgeted as measured. To re-measure, download the same artifact from the latest scheduled nightlies (`gh run download -n audio-quality-run`), which keep every run, and apply the same rule. The replay rows are deterministic, so their ceilings are exactly what they measured, through the end of each recording, with no headroom: any regression fails them, and an improvement should be tightened in. They were last re-measured on 2026-10-04, when they began resolving \"auto\" from the measured arrival estimator instead of the round trip.", "rows": [ { "runtime": "chromium", @@ -7,13 +7,13 @@ "rate": 44100, "profile": "bursty", "ring": "isolated", - "underruns_per_min": 1100.0, - "underrun_ms_per_min": 3000.0, - "skip_aheads_per_min": 6.6, - "discarded_ms_per_min": 500.0, - "stalled_share": 0.01, - "silence_share": 0.05, - "target_ms_p95": 404.8 + "underruns_per_min": 320, + "underrun_ms_per_min": 890, + "skip_aheads_per_min": 31, + "discarded_ms_per_min": 4000, + "stalled_share": 0.55, + "silence_share": 0.56, + "target_ms_p95": 450 }, { "runtime": "chromium", @@ -21,13 +21,13 @@ "rate": 44100, "profile": "bursty", "ring": "plain", - "underruns_per_min": 740.0, - "underrun_ms_per_min": 2200.0, - "skip_aheads_per_min": 4.4, - "discarded_ms_per_min": 350.0, - "stalled_share": 0.01, - "silence_share": 0.034, - "target_ms_p95": 368.5 + "underruns_per_min": 270, + "underrun_ms_per_min": 740, + "skip_aheads_per_min": 27, + "discarded_ms_per_min": 3400, + "stalled_share": 0.47, + "silence_share": 0.48, + "target_ms_p95": 530 }, { "runtime": "chromium", @@ -35,13 +35,13 @@ "rate": 44100, "profile": "fixed-250", "ring": "isolated", - "underruns_per_min": 5, - "underrun_ms_per_min": 20, - "skip_aheads_per_min": 1, - "discarded_ms_per_min": 100, + "underruns_per_min": 250, + "underrun_ms_per_min": 700, + "skip_aheads_per_min": 3.3, + "discarded_ms_per_min": 280, "stalled_share": 0.01, - "silence_share": 0.01, - "target_ms_p95": 440 + "silence_share": 0.015, + "target_ms_p95": 340 }, { "runtime": "chromium", @@ -49,13 +49,13 @@ "rate": 44100, "profile": "fixed-250", "ring": "plain", - "underruns_per_min": 5, - "underrun_ms_per_min": 20, - "skip_aheads_per_min": 1, - "discarded_ms_per_min": 100, + "underruns_per_min": 250, + "underrun_ms_per_min": 700, + "skip_aheads_per_min": 3.3, + "discarded_ms_per_min": 280, "stalled_share": 0.01, - "silence_share": 0.01, - "target_ms_p95": 440 + "silence_share": 0.015, + "target_ms_p95": 340 }, { "runtime": "chromium", @@ -63,13 +63,13 @@ "rate": 44100, "profile": "mild", "ring": "isolated", - "underruns_per_min": 320.0, - "underrun_ms_per_min": 890.0, - "skip_aheads_per_min": 1.0, - "discarded_ms_per_min": 100.0, - "stalled_share": 0.01, - "silence_share": 0.014, - "target_ms_p95": 211 + "underruns_per_min": 250, + "underrun_ms_per_min": 700, + "skip_aheads_per_min": 3.3, + "discarded_ms_per_min": 280, + "stalled_share": 0.017, + "silence_share": 0.018, + "target_ms_p95": 290 }, { "runtime": "chromium", @@ -77,13 +77,13 @@ "rate": 44100, "profile": "mild", "ring": "plain", - "underruns_per_min": 340.0, - "underrun_ms_per_min": 970.0, - "skip_aheads_per_min": 1.0, - "discarded_ms_per_min": 100.0, - "stalled_share": 0.01, - "silence_share": 0.014, - "target_ms_p95": 206 + "underruns_per_min": 250, + "underrun_ms_per_min": 700, + "skip_aheads_per_min": 3.3, + "discarded_ms_per_min": 280, + "stalled_share": 0.017, + "silence_share": 0.018, + "target_ms_p95": 290 }, { "runtime": "chromium", @@ -91,13 +91,13 @@ "rate": 44100, "profile": "near-zero", "ring": "isolated", - "underruns_per_min": 760, - "underrun_ms_per_min": 2200, - "skip_aheads_per_min": 1, - "discarded_ms_per_min": 100, + "underruns_per_min": 250, + "underrun_ms_per_min": 700, + "skip_aheads_per_min": 3.3, + "discarded_ms_per_min": 280, "stalled_share": 0.01, - "silence_share": 0.028, - "target_ms_p95": 210 + "silence_share": 0.015, + "target_ms_p95": 290 }, { "runtime": "chromium", @@ -105,13 +105,13 @@ "rate": 44100, "profile": "near-zero", "ring": "plain", - "underruns_per_min": 1500, - "underrun_ms_per_min": 4400, - "skip_aheads_per_min": 17, - "discarded_ms_per_min": 690, - "stalled_share": 0.01, - "silence_share": 0.066, - "target_ms_p95": 210 + "underruns_per_min": 250, + "underrun_ms_per_min": 700, + "skip_aheads_per_min": 3.3, + "discarded_ms_per_min": 280, + "stalled_share": 0.022, + "silence_share": 0.02, + "target_ms_p95": 290 }, { "runtime": "chromium", @@ -119,13 +119,13 @@ "rate": 44100, "profile": "step", "ring": "isolated", - "underruns_per_min": 970.0, - "underrun_ms_per_min": 2800.0, - "skip_aheads_per_min": 6.6, - "discarded_ms_per_min": 380.0, - "stalled_share": 0.01, - "silence_share": 0.042, - "target_ms_p95": 207.3 + "underruns_per_min": 260, + "underrun_ms_per_min": 710, + "skip_aheads_per_min": 3.3, + "discarded_ms_per_min": 280, + "stalled_share": 0.017, + "silence_share": 0.019, + "target_ms_p95": 290 }, { "runtime": "chromium", @@ -133,13 +133,13 @@ "rate": 44100, "profile": "step", "ring": "plain", - "underruns_per_min": 450.0, - "underrun_ms_per_min": 1200.0, - "skip_aheads_per_min": 2.2, - "discarded_ms_per_min": 120.0, - "stalled_share": 0.01, - "silence_share": 0.02, - "target_ms_p95": 212.3 + "underruns_per_min": 530, + "underrun_ms_per_min": 1600, + "skip_aheads_per_min": 3.3, + "discarded_ms_per_min": 280, + "stalled_share": 0.022, + "silence_share": 0.033, + "target_ms_p95": 290 }, { "runtime": "chromium", @@ -147,13 +147,13 @@ "rate": 44100, "profile": "wide", "ring": "isolated", - "underruns_per_min": 140.0, - "underrun_ms_per_min": 360.0, - "skip_aheads_per_min": 2.2, - "discarded_ms_per_min": 140.0, - "stalled_share": 0.01, - "silence_share": 0.01, - "target_ms_p95": 319.8 + "underruns_per_min": 270, + "underrun_ms_per_min": 750, + "skip_aheads_per_min": 13, + "discarded_ms_per_min": 830, + "stalled_share": 0.17, + "silence_share": 0.16, + "target_ms_p95": 350 }, { "runtime": "chromium", @@ -161,13 +161,13 @@ "rate": 44100, "profile": "wide", "ring": "plain", - "underruns_per_min": 330.0, - "underrun_ms_per_min": 940.0, - "skip_aheads_per_min": 1.0, - "discarded_ms_per_min": 100.0, - "stalled_share": 0.01, - "silence_share": 0.018, - "target_ms_p95": 308.5 + "underruns_per_min": 270, + "underrun_ms_per_min": 730, + "skip_aheads_per_min": 11, + "discarded_ms_per_min": 600, + "stalled_share": 0.12, + "silence_share": 0.13, + "target_ms_p95": 330 }, { "runtime": "chromium", @@ -175,13 +175,13 @@ "rate": 48000, "profile": "bursty", "ring": "isolated", - "underruns_per_min": 4800.0, - "underrun_ms_per_min": 13000.0, - "skip_aheads_per_min": 8.8, - "discarded_ms_per_min": 490.0, - "stalled_share": 0.018, - "silence_share": 0.2, - "target_ms_p95": 128 + "underruns_per_min": 270, + "underrun_ms_per_min": 750, + "skip_aheads_per_min": 6.1, + "discarded_ms_per_min": 500, + "stalled_share": 0.062, + "silence_share": 0.052, + "target_ms_p95": 370 }, { "runtime": "chromium", @@ -189,13 +189,13 @@ "rate": 48000, "profile": "bursty", "ring": "plain", - "underruns_per_min": 2900.0, - "underrun_ms_per_min": 7100.0, - "skip_aheads_per_min": 6.6, - "discarded_ms_per_min": 470.0, - "stalled_share": 0.028, - "silence_share": 0.13, - "target_ms_p95": 139.3 + "underruns_per_min": 260, + "underrun_ms_per_min": 710, + "skip_aheads_per_min": 8.8, + "discarded_ms_per_min": 770, + "stalled_share": 0.044, + "silence_share": 0.048, + "target_ms_p95": 400 }, { "runtime": "chromium", @@ -203,13 +203,13 @@ "rate": 48000, "profile": "fixed-250", "ring": "isolated", - "underruns_per_min": 5, - "underrun_ms_per_min": 20, - "skip_aheads_per_min": 1, - "discarded_ms_per_min": 100, + "underruns_per_min": 250, + "underrun_ms_per_min": 700, + "skip_aheads_per_min": 3.3, + "discarded_ms_per_min": 280, "stalled_share": 0.01, - "silence_share": 0.01, - "target_ms_p95": 300 + "silence_share": 0.015, + "target_ms_p95": 340 }, { "runtime": "chromium", @@ -217,13 +217,13 @@ "rate": 48000, "profile": "fixed-250", "ring": "plain", - "underruns_per_min": 5, - "underrun_ms_per_min": 20, - "skip_aheads_per_min": 1, - "discarded_ms_per_min": 100, + "underruns_per_min": 470, + "underrun_ms_per_min": 1300, + "skip_aheads_per_min": 3.3, + "discarded_ms_per_min": 280, "stalled_share": 0.01, - "silence_share": 0.01, - "target_ms_p95": 300 + "silence_share": 0.025, + "target_ms_p95": 340 }, { "runtime": "chromium", @@ -231,13 +231,13 @@ "rate": 48000, "profile": "mild", "ring": "isolated", - "underruns_per_min": 1300.0, - "underrun_ms_per_min": 2600.0, - "skip_aheads_per_min": 1.0, - "discarded_ms_per_min": 100.0, - "stalled_share": 0.01, - "silence_share": 0.026, - "target_ms_p95": 63 + "underruns_per_min": 1600, + "underrun_ms_per_min": 4100, + "skip_aheads_per_min": 7.5, + "discarded_ms_per_min": 680, + "stalled_share": 0.034, + "silence_share": 0.079, + "target_ms_p95": 470 }, { "runtime": "chromium", @@ -245,13 +245,13 @@ "rate": 48000, "profile": "mild", "ring": "plain", - "underruns_per_min": 1400.0, - "underrun_ms_per_min": 2900.0, - "skip_aheads_per_min": 1.0, - "discarded_ms_per_min": 100.0, + "underruns_per_min": 330, + "underrun_ms_per_min": 900, + "skip_aheads_per_min": 3.3, + "discarded_ms_per_min": 280, "stalled_share": 0.01, - "silence_share": 0.032, - "target_ms_p95": 63 + "silence_share": 0.019, + "target_ms_p95": 120 }, { "runtime": "chromium", @@ -259,13 +259,13 @@ "rate": 48000, "profile": "near-zero", "ring": "isolated", - "underruns_per_min": 6100, - "underrun_ms_per_min": 16000, - "skip_aheads_per_min": 8.0, - "discarded_ms_per_min": 340, - "stalled_share": 0.034, - "silence_share": 0.25, - "target_ms_p95": 63 + "underruns_per_min": 1200, + "underrun_ms_per_min": 3100, + "skip_aheads_per_min": 15, + "discarded_ms_per_min": 2300, + "stalled_share": 0.063, + "silence_share": 0.077, + "target_ms_p95": 1100 }, { "runtime": "chromium", @@ -273,13 +273,13 @@ "rate": 48000, "profile": "near-zero", "ring": "plain", - "underruns_per_min": 4600, - "underrun_ms_per_min": 12000, - "skip_aheads_per_min": 4.4, - "discarded_ms_per_min": 290, + "underruns_per_min": 270, + "underrun_ms_per_min": 730, + "skip_aheads_per_min": 3.3, + "discarded_ms_per_min": 280, "stalled_share": 0.01, - "silence_share": 0.19, - "target_ms_p95": 63 + "silence_share": 0.018, + "target_ms_p95": 95 }, { "runtime": "chromium", @@ -287,13 +287,13 @@ "rate": 48000, "profile": "step", "ring": "isolated", - "underruns_per_min": 1300.0, - "underrun_ms_per_min": 2700.0, - "skip_aheads_per_min": 1.0, - "discarded_ms_per_min": 100.0, - "stalled_share": 0.01, - "silence_share": 0.034, - "target_ms_p95": 63 + "underruns_per_min": 290, + "underrun_ms_per_min": 800, + "skip_aheads_per_min": 4.7, + "discarded_ms_per_min": 350, + "stalled_share": 0.022, + "silence_share": 0.019, + "target_ms_p95": 150 }, { "runtime": "chromium", @@ -301,13 +301,13 @@ "rate": 48000, "profile": "step", "ring": "plain", - "underruns_per_min": 2500.0, - "underrun_ms_per_min": 5700.0, - "skip_aheads_per_min": 2.2, - "discarded_ms_per_min": 100.0, - "stalled_share": 0.01, - "silence_share": 0.084, - "target_ms_p95": 63 + "underruns_per_min": 260, + "underrun_ms_per_min": 710, + "skip_aheads_per_min": 4.7, + "discarded_ms_per_min": 360, + "stalled_share": 0.022, + "silence_share": 0.019, + "target_ms_p95": 150 }, { "runtime": "chromium", @@ -315,13 +315,13 @@ "rate": 48000, "profile": "wide", "ring": "isolated", - "underruns_per_min": 2200.0, - "underrun_ms_per_min": 5600.0, - "skip_aheads_per_min": 2.2, - "discarded_ms_per_min": 100.0, - "stalled_share": 0.01, - "silence_share": 0.092, - "target_ms_p95": 150.5 + "underruns_per_min": 270, + "underrun_ms_per_min": 740, + "skip_aheads_per_min": 6.1, + "discarded_ms_per_min": 410, + "stalled_share": 0.033, + "silence_share": 0.028, + "target_ms_p95": 270 }, { "runtime": "chromium", @@ -329,13 +329,13 @@ "rate": 48000, "profile": "wide", "ring": "plain", - "underruns_per_min": 2300.0, - "underrun_ms_per_min": 5700.0, - "skip_aheads_per_min": 4.4, - "discarded_ms_per_min": 200.0, - "stalled_share": 0.01, - "silence_share": 0.09, - "target_ms_p95": 154.3 + "underruns_per_min": 260, + "underrun_ms_per_min": 710, + "skip_aheads_per_min": 6.1, + "discarded_ms_per_min": 420, + "stalled_share": 0.028, + "silence_share": 0.03, + "target_ms_p95": 300 }, { "runtime": "replay",