Skip to content

test(audio): capture isolated Opus target stalls - #5617

Merged
kixelated merged 9 commits into
mainfrom
quest/m1/audio-jitter-target/opus-isolated-target
Oct 16, 2026
Merged

kixelated merged 9 commits into
mainfrom
quest/m1/audio-jitter-target/opus-isolated-target

Conversation

@kixelated

@kixelated kixelated commented Oct 15, 2026 •

Copy link
Copy Markdown
Collaborator

Problem

ARM near-zero Opus playback on the isolated page develops long arrival gaps, an inflated target, and underruns. The cause remains unresolved, so the quest and existing budgets remain in place.

Approach

Capture native main-thread long tasks alongside arrivals. Opt-in --trace also saves Chromium GC events and a sampled CPU profile. A regression exercises the top-level harness flag, and the quest preserves the controlled evidence.

Untraced ARM controls run both ring orders with identical configuration, including #5569's 80 ms warmup. Isolated-first reaches a 560 ms target and two underrun episodes; the other three rows hold 60 ms with no episodes. Its final profiling command failed because that checkout lacked the wrapper flag; all four untraced captures are valid. The flag omission is now fixed and regression-tested.

Arrival gaps coincide with 227–320 ms main-thread tasks. The GC profile records no GC overlapping the longest tasks. The CPU profile has 100–315 ms sampling gaps across the pauses, with boundary samples in native stream reads. This narrows the browser read/scheduling boundary without establishing its cause. Recorded arrivals produce the same target through either ring in simulated-clock replay.

Impact

  • No production public API or wire change.
  • The test harness gains --trace and diagnostic capture files.
  • The original Nightly workflow is fully restored; its final diff is empty.

Validation

just check and quest check pass, including all 30 audio-quality tests. Real local browser runs exercise untraced capture, GC tracing, sampled CPU profiling, and teardown. Both focused ARM profiles pass. Traced rows are diagnostic evidence and cannot calibrate quality budgets.

Alternatives

A ring or estimator change is not justified by the captured evidence. Budget reductions require clean remeasurement after fixing the cause.

Follow-ups

Lands as diagnostics only. Investigation of native reads and scheduling continues under the existing quest, which stays open with the original product fix and budget goals; no new quest was created.

(Written by GPT-6)

kixelated and others added 9 commits October 15, 2026 13:49
Co-Authored-By: GPT-6 <noreply@openai.com>
Temporary branch-only diagnostic workflow; restore Nightly before the final quest PR.

Co-Authored-By: GPT-6 <noreply@openai.com>
Co-Authored-By: GPT-6 <noreply@openai.com>
Co-Authored-By: GPT-6 <noreply@openai.com>
Co-Authored-By: GPT-6 <noreply@openai.com>
Co-Authored-By: GPT-6 <noreply@openai.com>
Co-Authored-By: GPT-6 <noreply@openai.com>
Co-Authored-By: GPT-6 <noreply@openai.com>
Co-Authored-By: GPT-6 <noreply@openai.com>
@kixelated

kixelated commented Oct 15, 2026 •

Copy link
Copy Markdown
Collaborator Author

Outcome: the isolated-first ARM defect is reproduced, and the draft preserves native long-task, GC, and sampled CPU diagnostics plus the top-level trace-flag regression. Required scoped checks and quest validation pass; local real-browser profile capture/teardown and both focused ARM profiles pass. The complete Nightly workflow is restored, and this worktree is clean with no owned validation process left running.

The original product and budget goals remain open. Four untraced controls isolate an order-dependent failure: isolated-first reaches 560 ms and two episodes; the other rows hold 60 ms with no episodes. GC does not overlap the long tasks; sampled CPU captures pause across native stream reads. That evidence is insufficient to choose a product change or attribute the defect to Chromium.

Public API/wire: no production API or wire change; an internal harness diagnostic flag and capture files are added. Recommended follow-up decision: keep this draft and continue native read/scheduling investigation before changing the ring, estimator, or budgets. The quest remains in place for that work.

(Written by GPT-6)

@kixelated
kixelated marked this pull request as ready for review October 16, 2026 00:06
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 16, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-16T00:09:58.800660Z 8be4594 Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@coderabbitai

coderabbitai Bot commented Oct 16, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 22 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used all 4 included reviews currently available.

Learn how review limits work.

Review configuration:

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 7c5a1641-e62c-4cd3-8a9c-5a0f3005fa7c
📥 Commits

Reviewing files that changed from the base of the PR and between 810f7cd and 8be4594.

📒 Files selected for processing: 5
  • quest/m1/audio-jitter-target/opus-isolated-target.md
  • test/audio-quality/README.md
  • test/audio-quality/clients/js/cli.test.ts
  • test/audio-quality/clients/js/driver.ts
  • test/audio-quality/run.sh
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@kixelated kixelated left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated review by review (OpenAI)

Reviewed commit: 8be4594.

No actionable bugs found. The wrapper forwards trace/capture correctly, long tasks share the arrivals' viewer clock, and capture failures invalidate the row. The linked GitHub artifacts support the reported control/profile observations: one untraced row reaches 560 ms with two underrun episodes versus three 60 ms/no-episode controls, all with 80 ms warmup; the profiles show the described pauses without overlapping recorded GC.

Direction: appropriate diagnostics-only change. Keeping the underlying stall investigation and budgets unchanged is justified; these observations do not establish the cause. The new CLI test proves flag acceptance, not end-to-end trace forwarding or teardown.

Verification: inspected source and the three linked GitHub run artifacts. No fresh tests, browser execution, fault injection or performance reproduction.

@kixelated

Copy link
Copy Markdown
Collaborator Author

Merge summary:

  • Landed as diagnostics only, per the maintainer's choice: --capture now records native long tasks, and opt-in --trace adds a Chromium GC timeline and sampled CPU profile. No estimator, ring, or budget change.
  • The audio-jitter-target quest stays open; opus-isolated-target.md keeps the fix and budget goals and gains the captured evidence.
  • Updated the Follow-ups section, which still said to keep this a draft, and marked the PR ready.
  • No conflicts with main. CI is green, and Codex gave a thumbs up with no findings.

(Written by Opus 5.5)

@kixelated
kixelated added this pull request to the merge queue Oct 16, 2026
Merged via the queue into main with commit 809ac5b Oct 16, 2026
14 checks passed
@kixelated
kixelated deleted the quest/m1/audio-jitter-target/opus-isolated-target branch October 16, 2026 00:39
@kixelated
kixelated restored the quest/m1/audio-jitter-target/opus-isolated-target branch October 16, 2026 23:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant