Direct RGBA receive: web 30-minute measurement
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 seconds | Unique pairs | Unique / second | Duplicates | Minimum / second | Seconds below 50 |
|---|---|---|---|---|---|
| 1800.010799999 | 102,192 | 56.772993 | 0 | 29 | 165 / 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.
Five-minute and ten-minute intervals
The intervals include their start and exclude their end. These tables exclude the partial tail.
| Minutes | Unique pairs | Mean / second | Minimum / second | Seconds below 50 |
|---|---|---|---|---|
| 0–5 | 17,839 | 59.463333 | 49 | 1 |
| 5–10 | 17,817 | 59.390000 | 47 | 1 |
| 10–15 | 17,751 | 59.170000 | 44 | 4 |
| 15–20 | 17,782 | 59.273333 | 46 | 2 |
| 20–25 | 17,362 | 57.873333 | 33 | 15 |
| 25–30 | 13,640 | 45.466667 | 29 | 142 |
| Minutes | Unique pairs | Mean / second | Minimum / second | Seconds below 50 |
|---|---|---|---|---|
| 0–10 | 35,656 | 59.426667 | 47 | 2 |
| 10–20 | 35,533 | 59.221667 | 44 | 6 |
| 20–30 | 31,002 | 51.670000 | 29 | 157 |
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.
| Minutes | Final unique / second | A render entry / second | B render entry / second | B packet arrival / second |
|---|---|---|---|---|
| 25–26 | 56.3333 | 60.0000 | 60.0000 | 56.2542 |
| 26–27 | 57.5833 | 60.0000 | 60.0000 | 57.5593 |
| 27–28 | 38.8000 | 39.6780 | 39.8644 | 38.6949 |
| 28–29 | 44.6167 | 44.9661 | 44.9661 | 44.8475 |
| 29–30 | 30.0000 | 30.0000 | 30.0000 | 30.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 counter | Count |
|---|---|
| cameraAccepted | 103,471 |
| cameraBackpressured | 0 |
| cameraFailed | 0 |
| copied | 103,446 |
| overwritten | 955 |
| begun | 102,491 |
| writeCompleted | 102,491 |
| acked | 102,491 |
| retired | 102,491 |
| discardedLatest | 0 |
| failure | 0 |
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.
| Context | Elapsed seconds | Unique pairs | Unique / second | Minimum / second | Seconds below 50 |
|---|---|---|---|---|---|
| web | 180.007900000 | 10,715 | 59.525165 | 53 | 0 |
| desktop | 180.009000000 | 10,718 | 59.541467 | 52 | 0 |
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.
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
| Binding | Value |
|---|---|
| longFixtureManifestSHA256 | 5a1d000350eacfc23a795b03199520d26915d37a41e0fb0a5c787284f86fe6c8 |
| shortFixtureManifestSHA256 | f438bdc6962ba1215ab671a375f5b61c43db682738cbc23134af0b4113e92ad1 |
| nativeSHA256 | b51f4bb46cbc18c75e55bdf8e3f921298855833a1c8dce0bd5f2bb679e0ff0f6 |
| currentAppStageSHA256 | 040b34f7a3985985c09593cd3893b29f87eaacf99ca9c67a2986a941a2e4cefb |
| noisedeckCommit | 07a8fd1553a41b8d9a8c7b937947fb447b31841f |
| sdk | 0.1.5 |