Direct RGBA receive: web 30-minute measurement

8 September 2026 · Apple M2 · 8 logical CPUs · 24 GiB memory · Darwin 23.6.0

Method

This report measures an experimental direct receiver.

Noisedeck A sends packed RGBA frames through Sync. Native camera publication remains active. Noisedeck B receives the packets directly. B does not capture the camera.

The frames contain 1920×1080 opaque pixels in sRGB. The source uses a checkerboard and an identity marker. Both pages use WebGL2 and SDK 0.1.5.

The web run uses Chrome 152.0.7977.77. It includes a five-second warmup and a nominal 30-minute measurement. The receiver compares input and final markers from each selected render.

The transport permits one outstanding frame and retains two packet slots. An acknowledgement releases credit after storage consumption and write completion.

30-minute result

The run completed without a diagnostic or cleanup failure. It failed the checkpoint that requires at least 50 unique frames in every complete second.

Elapsed secondsUnique pairsUnique / secondDuplicatesMinimum / secondSeconds below 50
1800.010799999102,19256.772993029165 / 1800

The average exceeds 50 unique frames per second. The run does not meet the sustained 60-frame goal. All measured input and final markers match.

The 1,800 complete seconds contain 102,191 unique pairs. The separate 10.799999237 ms tail contains one pair. The overall average includes this tail.

The minimum is 29 unique frames at seconds 1643 and 1650. Every complete second in the final minute contains exactly 30 unique frames.

All 1800 complete seconds on a zero to 66 FPS scale, followed by the final five minutes of stage measurements
The first panel includes every complete second. The other panels contain the final five minutes. No smoothing removes low intervals.

Five-minute and ten-minute intervals

The intervals include their start and exclude their end. These tables exclude the partial tail.

MinutesUnique pairsMean / secondMinimum / secondSeconds below 50
0–517,83959.463333491
5–1017,81759.390000471
10–1517,75159.170000444
15–2017,78259.273333462
20–2517,36257.8733333315
25–3013,64045.46666729142
MinutesUnique pairsMean / secondMinimum / secondSeconds below 50
0–1035,65659.426667472
10–2035,53359.221667446
20–3031,00251.67000029157

Source and receiver cadence

At minutes 25–27, both pages record 60 render entries per second. Receiver packet arrivals fall below that rate. This packet shortfall remains unresolved.

Later, source render entries and receiver render entries both reach 30 per second. This change occurs before receiver upload.

MinutesFinal unique / secondA render entry / secondB render entry / secondB packet arrival / second
25–2656.333360.000060.000056.2542
26–2757.583360.000060.000057.5593
27–2838.800039.678039.864438.6949
28–2944.616744.966144.966144.8475
29–3030.000030.000030.000030.0000

A and B use separate local clocks. Each telemetry column includes 59 complete bins within that page’s one-minute interval. The final-count column includes 60 complete measurement bins.

The last minute records mean render-entry gaps of 33.333 ms in both pages. Source render calls take 3.006 ms on average. Receiver upload calls take 2.320 ms on average.

Receiver render calls take 0.142 ms on average. Final marker readback takes 6.763 ms on average. These API and callback times do not measure GPU execution.

Both telemetry journals retain every cell. The detailed slow-event lists omit 579 source events and 4,724 receiver events. Cell totals and maxima remain available.

Post-run power observation

A host check at 19:54:22 UTC recorded battery power at 19% charge, with discharge active. The check occurred after the run ended at 19:43:39 UTC.

The host check reported macOS Low Power Mode off and no thermal warning. The run contains no power samples. It does not record browser Energy Saver activation.

The pinned Chrome 152 source specifies 30 Hz throttling. It applies a low-battery threshold below 20%, with possible platform adjustments.

The 30-frame cadence is compatible with a power-saving limit. This is a possible cause, not an established cause. A repeat with external power is pending.

This uncertainty does not remove the failed intervals. It also does not explain the earlier packet shortfall while both render rates remained at 60.

Pixel controls and cleanup

Three full-frame positive controls and three negative controls passed before this run. Each control compares 8,294,400 bytes in the texture and final canvas.

Positive controls found zero differing bytes. Negative controls kept valid input, filled the texture with black, and skipped the selected upload. Both surfaces then differed from the input.

Input and final observations can occupy different one-second bins. Their complete measurement totals agree.

Timing compares markers rather than all pixels. It records 102,192 matched pairs and zero duplicate, invalid or reordered markers. It records 1,891 missing source sequence numbers.

Missing sequence numbers do not identify the stage that skipped a frame. Zero duplicates does not mean that the receiver obtained every source frame.

Native lifetime counterCount
cameraAccepted103,471
cameraBackpressured0
cameraFailed0
copied103,446
overwritten955
begun102,491
writeCompleted102,491
acked102,491
retired102,491
discardedLatest0
failure0

The native counts cover setup, warmup and shutdown as well as measurement. The native tap copied 103,446 packets. It replaced 955 waiting packets and began 102,491 writes. B received 102,491 packets.

Writes begun, writes completed, acknowledgements and retired frames each equal 102,491. Receiver consumption and lifetime marker pairs match that count. No selected frame remains pending at shutdown.

The source records no failed sends. Native publication records no failed frames or camera backpressure. All owned processes exited, and all browser and native cleanup checks passed.

Three-minute context

Earlier web and desktop runs used the same native binary with a different diagnostic fixture version. These short runs provide context only.

ContextElapsed secondsUnique pairsUnique / secondMinimum / secondSeconds below 50
web180.00790000010,71559.525165530
desktop180.00900000010,71859.541467520

Both short runs contain 180 complete seconds and zero marker mismatches. Every complete second meets the 50-frame checkpoint. Neither run meets the 60-frame goal.

Earlier web and desktop counts for each of 180 complete seconds, with zero to 66 scales
These separate runs use the earlier fixture.

Limits

The 30-minute measurement covers web only. The desktop measurements last three minutes. These single-host results do not establish released-product performance, resource stability, external camera delivery, or physical display output.

Evidence

Measurement data · Artifact manifest · SHA-256 checksums

BindingValue
longFixtureManifestSHA2565a1d000350eacfc23a795b03199520d26915d37a41e0fb0a5c787284f86fe6c8
shortFixtureManifestSHA256f438bdc6962ba1215ab671a375f5b61c43db682738cbc23134af0b4113e92ad1
nativeSHA256b51f4bb46cbc18c75e55bdf8e3f921298855833a1c8dce0bd5f2bb679e0ff0f6
currentAppStageSHA256040b34f7a3985985c09593cd3893b29f87eaacf99ca9c67a2986a941a2e4cefb
noisedeckCommit07a8fd1553a41b8d9a8c7b937947fb447b31841f
sdk0.1.5

Artifact ID: research-2026-09-08-direct-rgba-web-30m