Measurements of 1080p camera performance

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

Configuration and method

This research fixture uses task-local ordered export and a bounded queue of raw frames. The queue processes frames in arrival order. The fixture includes experimental changes that the released product does not contain. These results do not establish performance of the released product or physical display output.

Resolution and sourceNoisedeck source A renders a GLSL test pattern at 1920 × 1080. The pattern contains sequence and time markers.
Data pathOrdered export sends frames to the Sync camera source. Receiver B reads the borrowed NV12 input. The ordinary media effect renders the final canvas. The observer reads that canvas after the same render.
Web runtimeChrome 152.0.7977.77 runs the source and receiver in separate processes.
Desktop runtimeElectron 42.3.0 / Chrome 148.0.7778.180 runs the source and receiver in separate processes.
Run continuityOne source and receiver remain active for each run. The stream does not reset between report intervals.
Pixel controlsThree positive controls and three poison-negative controls check all pixels for each context before timing. During timing, the observer records marker identity. It does not archive full-color frames.
Selection and timingThe observer selects pairs with exact upload ordinals. It uses one-second intervals on a common local clock. Each interval includes its start and excludes its end. Late completions retain their reserved identities. Unique FPS divides unique pairs by the actual measurement duration, including the partial tail.
Acceptance criteriaAverage ≥50 unique frames/s, every complete second ≥50, and sustained 60 are separate criteria.

Measurement results

All three runs passed the diagnostic and cleanup checks. All selected input/final pairs matched, with zero invalid or reordered identities. Each run passed the average-50 criterion. No run passed the every-second-50 criterion or the sustained-60 goal. The report counts duplicate pairs separately and excludes them from unique FPS.

RunActual duration (s)Selected pairsUniqueDuplicatesUnique FPSSeconds <50 / complete secondsMinimum
Web · 3 hours10800.017199999642,082628,77813,30458.220092464787 / 10,8000
Web · 30 minutes1800.020400000107,569105,8821,68758.82266667692 / 1,80041
Desktop · 30 minutes1800.008700001105,932105,8775558.82027125868 / 1,80043
Partial final cells
RunDuration (ms)Input pairsFinal pairsFinal unique
Web · 3 hours17.199998856111
Web · 30 minutes20.399999619122
Desktop · 30 minutes8.700000763111
Three-hour one-second unique counts and a detail view of minutes 73 through 83.
Figure 1. Blue lines indicate unique counts in complete one-second cells. Dark horizontal lines indicate five-minute means. Reference lines indicate 50 and 60. Both panels use the same scale, which starts at zero. Input/final counts can cross a cell boundary, but totals for the full measurement match. SVG

Intervals with low counts in the three-hour run

The three-hour run contains 787 complete seconds below 50 unique frames/s and one zero-pair second. At measurement second 4,928, approximately 14:18:28.720 UTC, both input and final observers recorded zero admitted pairs. The following second recorded 13 pairs: 9 unique and 4 duplicate. This is an observed-upload gap, not an invalid-marker event.

A receiver snapshot by minute 90 recorded a maximum render gap of 1,669.8 ms. The record does not contain its exact event clock or source progress for each second. Four new receiver processes first appeared in the adjacent resource sample. The times correlate, with approximately 55 ms of uncertainty in clock alignment. The cause remains unresolved.

All 11 complete seconds below 30 unique frames/s
Second indexElapsed mm:ssPairsUniqueDuplicates
444574:05352510
446374:2326197
460076:40362610
488181:2129290
488281:2219181
488381:2323194
488481:2420182
488581:2527243
492782:0726251
492882:08000
492982:091394
Non-overlapping five-minute means for each run.
Figure 2. The plot uses means from complete five-minute intervals that do not overlap. Its vertical range is 54–61. These means exclude partial tails. SVG

The final five minutes contain 17,521 unique pairs and 316 duplicate pairs. The mean is 58.403333 unique frames/s. The minimum is 42, with 18 complete seconds below 50. The interval series does not indicate monotonic degradation across the full run.

Three-hour five-minute intervals
MinutesUniqueDuplicatesUnique FPSMinimum one-second countSeconds <50
0–517,65926858.8633334115
5–1017,64428258.8133334217
10–1517,56634258.5533334122
15–2017,67126158.9033334215
20–2517,66325958.8766674314
25–3017,54834258.4933334019
30–3517,68823958.9600004214
35–4017,66325558.8766674112
40–4517,55934158.5300004019
45–5017,68022758.933333398
50–5517,54340158.4766674119
55–6017,49941758.3300004219
60–6517,54437058.4800004315
65–7017,64928358.8300004113
70–7516,48572654.9500001961
75–8016,88649656.2866672645
80–8516,86746756.223333040
85–9017,57030058.5666674214
90–9517,42842158.0933334327
95–10017,40846058.0266674224
100–10517,44544058.1500004025
105–11017,56332358.5433334519
110–11517,49837058.3266674121
115–12017,43441658.1133334222
120–12517,44039158.1333334221
125–13017,52733158.4233334218
130–13517,44040458.1333334123
135–14017,37947757.9300004127
140–14517,39844757.9933334227
145–15017,56733658.5566674219
150–15517,45636458.1866674119
155–16017,36047757.8666674131
160–16517,43838758.1266674228
165–17017,61326558.7100004214
170–17517,47840358.2600004323
175–18017,52131658.4033334218
Web and desktop thirty-minute one-second unique counts.
Figure 3. Each web and desktop run contains 1,800 complete seconds. Both panels use the same scale, which starts at zero. Similar averages from separate runs do not establish an effect from the browser version. SVG

Resource sampling results

The sampler reads process counters approximately every ten seconds. CPU percentages divide the actual change in cumulative CPU counters by the actual interval for each process. A value of 100% equals one core. RSS and physical footprint are separate sums of process memory stocks. They do not measure uniquely owned memory, swap or GPU memory.

Web segmentSample entry times (UTC)SamplesOriginal resultGap from prior final entry
Segment 113:20:09.732–14:18:29.765351Failed endpoint. Valid sample prefix
Segment 214:29:10.489–14:57:10.486169Complete640.724 s
Segment 314:58:13.751–15:26:13.766169Complete63.265 s
Segment 415:29:06.310–15:56:16.334164Failed endpoint. Valid sample prefix172.544 s

Only segments 2 and 3 completed their declared 28-minute spans. Segments 1 and 4 retain valid sample prefixes and failed endpoints. Resource samples do not cover approximately the first 24 minutes. Later gaps remain separate. Resource samples do not cover the full three-hour run.

Four separate memory sampling segments for source, receiver and native publisher.
Figure 4. Each column contains a separate span of samples from groups of web processes. Solid lines indicate physical footprint. Dashed lines indicate RSS. The JSON retains the number of processes in each group. No line crosses a gap between spans. SVG

In segment 1, the receiver group’s footprint increased by approximately 252 MiB. The original processes contributed 151 MiB. Four new sampled processes contributed 101 MiB. The next two complete spans changed less. These observations do not establish a memory leak.

CPU counter intervals for selected processes, separated by sampling segment.
Figure 5. CPU intervals for four web processes: source renderer, receiver helper, receiver renderer and native publisher. Each process has a separate plot. The name “receiver helper” does not identify a GPU process. SVG

The native publisher’s CPU means were approximately 29.3%, 27.5%, 27.8% and 27.9% of one core across segments 1–4. These means use the actual interval durations as weights. Segment 4 failed while target processes stopped. It does not count as a completed observation.

CPU, RSS and physical footprint during the desktop twenty-eight-minute resource sample.
Figure 6. The desktop sample contains one completed 28-minute span inside the 30-minute run. It contains 169 samples from a fixed group of 15 processes. The desktop plots sum CPU within each group. The web plots contain separate processes. Resource samples cover only part of the camera run. SVG

The desktop receiver group’s footprint increased by 44.28 MiB during the sampled span. The source group’s footprint decreased by 9.14 MiB. An increase in a memory stock or a decrease in RSS alone does not establish leak or swap behavior.

Limitations

Source and checksum references

The JSON contains every complete one-second count, partial tails, five-minute summaries and separate resource series. A separate archive retains the original receipts and sources. Public data excludes local paths, process identifiers and private configuration.

Evidence SHA-256 values
Web · 3 hours receipta5eab0112d693be578a9869a87fa445db856334fdeef23d309472101a71b2ce4
Web · 3 hours cell journal62a388862a9b5a28040dc02f0d8deb1805bb36463e21143b66b15886881f6151
Web · 30 minutes receipt0d5d92b585910ea5e9b63c2641cea75dd31408037c1df6c0dad39dd0a8c8f671
Web · 30 minutes cell journale93b0432456a3f38ee036f60cef3a203776bcc829c4dc2753f8e4a9e0859fa2e
Desktop · 30 minutes receipt3db7da650536161a63805d9d5859f1ec16f401f2000aecb519e27e6c42197ac0
Desktop · 30 minutes cell journal4ab42a3d5af56a3c0f7bca60412eb5cfb425eb398ad6355a6651b64062f57f49
Web resources Segment 1 receipt68f814736e23a7794b6e2332f269598393d3a27219c95aea4cf309798a01a66f
Web resources Segment 2 receipta3a53eeda320107efd4558ae32ab58b4f2d67867a7f992f211dd012ba40c4c37
Web resources Segment 3 receipt6d057592801165b0d766b09541d850a0b661c5f112449a13f7707738603f4878
Web resources Segment 4 receipt2ff8b45dfd47ce1e2449a6989fb712b142445a98396ee78b4041a0665f81fb5e
Desktop resource receiptf35cbd082df440ee0f35c026d8030437e2b6ddd4260792909eb0a934bd76bc9d
Research fixture manifest2c96ae157ae78d272f88f806bd3907823543273b6da0a67bd03937951408dfc6
Research native executableb960a686d44eeeba51a8b519c875ad955bffbc0b32e2cccf1e1c4e299b6aa344
Archived source manifestc8fbc0fbadf56459012adb964bbe53a7efeab98285e8a7c31c3a8e371850d8c0
Independent FPS auditfe30b0d9e1f3acba55920aa86c7e4ccf3d478353a258d8ffd9faa2b1b38ecb63
Independent resource audit984168b745fca20f2a9b37b156c8f37a1181645ed448779eaba6d8df101cd06f
SDK served-byte proof8b4f22609d63bdbaf67e0e1e2c732ac5a7f43583103483b7ccfacd8ae1699f21
Sync 0.2.57 release JSON4c33d55a99f610a68df70efc473d903addfef13e005248e115901f7472338b6e
Release and guide public proof01250a785bcd335d8db0a38d11dd1fe43e18ff9da15bc427db9bd19238a8fbfa

Artifact ID: research-2026-09-08-1080p60-camera. Manifest · Checksums