Repository navigation
fix(tiles): pin the Tiles wall at 1080p so preview no longer drops on-air members - #514
Merged
Merged
Conversation
…-air members Owner report: "CoreVideo tiles participants are dropping as I go through different people in preview" — with a few hundred ms then a color change. Root cause, confirmed live: a wall member sat at program-tiles (720p); soloing them in Preview made them a preview route (1080p). Resolution is part of the engine's subscription key, so that 720p->1080p is a real renderer destroy/create on a source LIVE on the Program wall — the drop, and the color change is the colorFromParticipantId placeholder slab shown until the rebuilt feed lands. Leaving preview flips them back 1080p->720p, a second teardown. It is ONE feed flipping, not two grabs: m_subs is keyed by participant_id and every surface (wall tile, preview, program) renders that one decoded frame. Fix: Tiles (program-tiles / preview-tiles) now request 1080p, the highest tier, so a soloed wall member has no lower tier to fall back to — same feed, no re-subscribe, no drop. This needs the concurrent-1080p cap raised, and that is the historically dangerous part: the cap of 4 came from a 2026-06 crash at 6 concurrent 1080p on the CPU-I420 path (bd3ca). So it was SOAK-PROVEN before shipping — a live 8-person meeting, all 8 wall members at 1080p on Program for 30+ min: 60fps delivery, 0 underruns, no monitor shedding, no engine crash/respawn, and totalChurn held FLAT across a full operator preview run (per-source churn = 1, the one-time take) where the old build climbed ~30/min. Cap set to 8 (proven, the meeting's camera count) — not higher on extrapolation. Graceful past 8: members are granted before the wall background in payload order, so a 9th 1080p source is demoted to 720p stably rather than flipping a member; screen share is 1080p and bypasses the camera counter (8 wall + share = 9 concurrent, one step past the soak — flagged to watch). The old ACueRaises test asserted the exact behavior this removes; rewritten as the regression test (a wall member cued to preview sends nothing). Tier + cap assertions updated. 931 native tests pass. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014yuH7EMvWCWdkhvevrtMyJ
This was referenced Sep 13, 2026
iamfatness
added a commit
that referenced
this pull request
Sep 14, 2026
…ist) (#520) Metrics from a ~5h real test-meeting session (10->16 participants, 8-member wall at 1080p, streaming to YouTube), read live from /snapshot and the logs. Records the session numbers and the prioritized list, cross-referencing the issues filed from it: #515/#514 (P0 in flight), #516/#517/#509 (P1 load), #518/#519 (P2 verify/cleanup), plus the cap-vs-9-camera-on note and the two lying counters. Claude-Session: https://claude.ai/code/session_014yuH7EMvWCWdkhvevrtMyJ Co-authored-by: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The report
"CoreVideo tiles participants are dropping as I go through different people in preview" — a few hundred ms, then their color changes.
Root cause (confirmed live)
A wall member sits at
program-tiles= 720p. Soloing them in Preview makes them apreviewroute = 1080p. Resolution is part of the Zoom engine's subscription key, so 720p→1080p is a genuine renderer destroy/create on a source that is live on the Program wall — that teardown is the drop, and the "color change" is thecolorFromParticipantIdplaceholder slab painted until the rebuilt feed lands. Moving to the next person flips the previous one 1080p→720p — a second teardown.It is one feed flipping, not two grabs:
m_subsis keyed byparticipant_id, and every surface (wall tile, preview, program) renders that single decoded frame. So the wall tile and the preview are already the same feed at two sizes — the bug is purely the resolution key changing.Fix
Tiles (
program-tiles/preview-tiles) now request 1080p, the highest tier — so a soloed wall member has no lower tier to fall back to. Same feed, no re-subscribe, no drop.That required raising the concurrent-1080p cap, which is the historically dangerous part: the cap of 4 exists because 6 concurrent 1080p crashed the SDK subprocess (
0xc000000d) — but that was measured on the 2026-06 CPU-I420 path.Soak-proven before shipping
Live, real 8-person meeting, all 8 wall members at 1080p on Program for 30+ minutes:
totalChurnacross a full operator preview runThe old build climbed ~30 churn events per minute of previewing; this one held flat, owner-confirmed ("looks good to me").
Cap = 8, deliberately
8 is the number the soak proved and the meeting's camera count. Not raised higher on extrapolation — the constant's standing rule. Graceful past 8: wall members are granted before the wall background in payload order, so a 9th 1080p source (a live wall background, a >8 wall, a non-wall bus route) is demoted to 720p stably rather than flipping a member. Screen share is 1080p and bypasses the camera counter, so 8 wall + a share = 9 concurrent 1080p — one step past what was soaked, flagged in the code and docs to watch.
Follow-ups (not in this PR)
ZoomSourceSetPolicy's purpose-override still stamps an on-air wall memberpreviewwhen soloed; harmless for resolution now (both 1080p) but semantically off — cleanup, not a fix.Tests
The old
ACueRaisesOnceTheTakeSendsNothingAndLeavingTheBusDropsBackasserted the exact behavior this removes; rewritten asAWallMemberCuedToPreviewDoesNotReSubscribe(a wall member cued to preview sends nothing). Tier + cap assertions updated. 931 native tests pass.🤖 Generated with Claude Code
https://claude.ai/code/session_014yuH7EMvWCWdkhvevrtMyJ