completed-frame-entry.json
docs/evidence/completed-frame-entry.json
1{
2 "date": "2026-10-25",
3 "scope": "Completed first-scene GPU frame before initial player entry, corrected headless Vulkan surface configuration, and explicitly incomplete Chromium 155 multiplayer qualification.",
4 "source": {
5 "baseCommit": "63fbca03936e0a6fd0656b70f84eb4b461a9685a",
6 "files": [
7 {
8 "path": "apps/player/main.ts",
9 "sha256": "23790195980044f8feb2ad0bbf0bdd6bf17ba0d2dfbd8f0c0b9840b53d031eee"
10 },
11 {
12 "path": "playwright.config.ts",
13 "sha256": "02042817ed56698d5bc9b2a3449dd2487c5195db0f90c6683c52e6ca81d449c4"
14 },
15 {
16 "path": "tools/cli/review-traveler.mjs",
17 "sha256": "7973b07dc10ddbd9235eac85a901cb0746c70d5634df2c46fbc2a911cecbb603"
18 },
19 {
20 "path": "tests/browser/player.spec.ts",
21 "sha256": "1ca4c52d69cd943a6b43b4762136ac7a0a210ff695f8da4e3fa0da5eeea27b1b"
22 }
23 ]
24 },
25 "typecheck": "Passed; 123 source-file package boundaries",
26 "clearExperiment": [
27 {
28 "name": "155-original",
29 "browser": "155.0.8059.84",
30 "args": [
31 "--enable-unsafe-webgpu",
32 "--enable-unsafe-swiftshader",
33 "--use-angle=vulkan",
34 "--use-vulkan=swiftshader",
35 "--use-webgpu-adapter=swiftshader",
36 "--enable-features=Vulkan",
37 "--disable-vulkan-surface"
38 ],
39 "ready": {
40 "error": "Error: No adapter"
41 },
42 "main": [
43 0,
44 0,
45 0,
46 255
47 ],
48 "worker": [
49 0,
50 0,
51 0,
52 255
53 ]
54 },
55 {
56 "name": "155-surface",
57 "browser": "155.0.8059.84",
58 "args": [
59 "--enable-unsafe-webgpu",
60 "--enable-unsafe-swiftshader",
61 "--use-angle=vulkan",
62 "--use-vulkan=swiftshader",
63 "--use-webgpu-adapter=swiftshader",
64 "--enable-features=Vulkan"
65 ],
66 "ready": {
67 "ready": true
68 },
69 "main": [
70 255,
71 0,
72 0,
73 255
74 ],
75 "worker": [
76 0,
77 255,
78 0,
79 255
80 ]
81 },
82 {
83 "name": "141-surface",
84 "browser": "141.0.7390.37",
85 "args": [
86 "--enable-unsafe-webgpu",
87 "--enable-unsafe-swiftshader",
88 "--use-angle=vulkan",
89 "--use-vulkan=swiftshader",
90 "--use-webgpu-adapter=swiftshader",
91 "--enable-features=Vulkan"
92 ],
93 "ready": {
94 "ready": true
95 },
96 "main": [
97 255,
98 0,
99 0,
100 255
101 ],
102 "worker": [
103 0,
104 255,
105 0,
106 255
107 ]
108 },
109 {
110 "name": "141-original",
111 "browser": "141.0.7390.37",
112 "args": [
113 "--enable-unsafe-webgpu",
114 "--enable-unsafe-swiftshader",
115 "--use-angle=vulkan",
116 "--use-vulkan=swiftshader",
117 "--use-webgpu-adapter=swiftshader",
118 "--enable-features=Vulkan",
119 "--disable-vulkan-surface"
120 ],
121 "ready": {
122 "ready": true
123 },
124 "main": [
125 255,
126 0,
127 0,
128 255
129 ],
130 "worker": [
131 0,
132 255,
133 0,
134 255
135 ]
136 }
137 ],
138 "rejectedAlternative": [
139 {
140 "name": "155-swangle",
141 "browser": "155.0.8059.84",
142 "args": [
143 "--enable-unsafe-webgpu",
144 "--enable-unsafe-swiftshader",
145 "--use-gl=angle",
146 "--use-angle=swiftshader",
147 "--use-vulkan=swiftshader",
148 "--use-webgpu-adapter=swiftshader"
149 ],
150 "ready": {
151 "error": "OperationError: A valid external Instance reference no longer exists."
152 },
153 "main": [
154 255,
155 255,
156 255,
157 255
158 ],
159 "worker": [
160 0,
161 0,
162 0,
163 255
164 ]
165 },
166 {
167 "name": "141-swangle",
168 "browser": "141.0.7390.37",
169 "args": [
170 "--enable-unsafe-webgpu",
171 "--enable-unsafe-swiftshader",
172 "--use-gl=angle",
173 "--use-angle=swiftshader",
174 "--use-vulkan=swiftshader",
175 "--use-webgpu-adapter=swiftshader"
176 ],
177 "ready": {
178 "error": "OperationError: A valid external Instance reference no longer exists."
179 },
180 "main": [
181 255,
182 255,
183 255,
184 255
185 ],
186 "worker": [
187 0,
188 0,
189 0,
190 255
191 ]
192 }
193 ],
194 "chromium155": {
195 "stats": {
196 "startTime": "2026-10-25T13:11:53.295Z",
197 "duration": 22577.095,
198 "expected": 3,
199 "skipped": 0,
200 "unexpected": 0,
201 "flaky": 0
202 },
203 "cases": [
204 {
205 "title": "entry waits for the first accepted scene frame to complete (worker)",
206 "status": "expected",
207 "durationsMs": [
208 5533
209 ]
210 },
211 {
212 "title": "entry waits for the first accepted scene frame to complete (main)",
213 "status": "expected",
214 "durationsMs": [
215 7318
216 ]
217 },
218 {
219 "title": "world pixel checks use completed presentation and reject an invisible canvas despite visible UI",
220 "status": "expected",
221 "durationsMs": [
222 6461
223 ]
224 }
225 ]
226 },
227 "chromium141": {
228 "stats": {
229 "startTime": "2026-10-25T13:14:34.268Z",
230 "duration": 56167.191000000006,
231 "expected": 5,
232 "skipped": 0,
233 "unexpected": 0,
234 "flaky": 0
235 },
236 "cases": [
237 {
238 "title": "startup deadline closes an admitted simulation while initial graphics remain held",
239 "status": "expected",
240 "durationsMs": [
241 20803
242 ]
243 },
244 {
245 "title": "entry waits for the first accepted scene frame to complete (worker)",
246 "status": "expected",
247 "durationsMs": [
248 4468
249 ]
250 },
251 {
252 "title": "entry waits for the first accepted scene frame to complete (main)",
253 "status": "expected",
254 "durationsMs": [
255 3628
256 ]
257 },
258 {
259 "title": "world pixel checks use completed presentation and reject an invisible canvas despite visible UI",
260 "status": "expected",
261 "durationsMs": [
262 6580
263 ]
264 },
265 {
266 "title": "renders, walks, pauses, releases input, and restores the local checkpoint",
267 "status": "expected",
268 "durationsMs": [
269 17401
270 ]
271 }
272 ]
273 },
274 "persistent141": {
275 "stats": {
276 "startTime": "2026-10-25T13:15:33.639Z",
277 "duration": 60302.702000000005,
278 "expected": 1,
279 "skipped": 0,
280 "unexpected": 0,
281 "flaky": 0
282 },
283 "cases": [
284 {
285 "title": "persistent players share objects and restore committed travel without local position saves",
286 "status": "expected",
287 "durationsMs": [
288 58722
289 ]
290 }
291 ]
292 },
293 "firstFrameReports155": {
294 "first-frame-worker-held.json": {
295 "browser": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/155.0.0.0 Safari/537.36",
296 "renderPlacement": "worker",
297 "startupStages": {
298 "started": 75.90000003576279,
299 "admission": 79.20000004768372,
300 "graphics": 1264.6000000238419,
301 "simulation": 522.4000000357628,
302 "presentation": 1264.9000000357628,
303 "room": null,
304 "ready": null,
305 "failed": null
306 },
307 "render": {
308 "instances": 674,
309 "triangles": 47016,
310 "visibleInstances": 575,
311 "shadowInstances": 378,
312 "visibleTriangles": 41304,
313 "shadowTriangles": 30732,
314 "drawCalls": 9,
315 "buffers": 53,
316 "textures": 4,
317 "targetBytes": 32329216,
318 "targetGeneration": 1,
319 "width": 1440,
320 "height": 900,
321 "frameMs": 2.900000035762787,
322 "submittedFrames": 1,
323 "completedFrames": 0,
324 "failedFrames": 0,
325 "cancelledFrames": 0,
326 "pendingFrames": 1,
327 "skippedFrames": 51,
328 "completionWaitMs": 0,
329 "maxCompletionWaitMs": 0,
330 "lastSubmittedAtMs": 1301.299853503704,
331 "lastCompletedAtMs": null
332 },
333 "graphicsIncidents": [],
334 "viewport": [
335 1440,
336 900,
337 1
338 ]
339 },
340 "first-frame-worker-ready.json": {
341 "browser": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/155.0.0.0 Safari/537.36",
342 "renderPlacement": "worker",
343 "startupStages": {
344 "started": 75.90000003576279,
345 "admission": 79.20000004768372,
346 "graphics": 1264.6000000238419,
347 "simulation": 522.4000000357628,
348 "presentation": 1264.9000000357628,
349 "room": null,
350 "ready": 2155.100000023842,
351 "failed": null
352 },
353 "render": {
354 "instances": 674,
355 "triangles": 47016,
356 "visibleInstances": 575,
357 "shadowInstances": 378,
358 "visibleTriangles": 41304,
359 "shadowTriangles": 30732,
360 "drawCalls": 9,
361 "buffers": 53,
362 "textures": 4,
363 "targetBytes": 32329216,
364 "targetGeneration": 1,
365 "width": 1440,
366 "height": 900,
367 "frameMs": 1.300000011920929,
368 "submittedFrames": 9,
369 "completedFrames": 8,
370 "failedFrames": 0,
371 "cancelledFrames": 0,
372 "pendingFrames": 1,
373 "skippedFrames": 162,
374 "completionWaitMs": 266,
375 "maxCompletionWaitMs": 842.9000000357628,
376 "lastSubmittedAtMs": 3987.799853503704,
377 "lastCompletedAtMs": 3981.999853491783
378 },
379 "graphicsIncidents": [],
380 "viewport": [
381 1440,
382 900,
383 1
384 ]
385 },
386 "first-frame-main-held.json": {
387 "browser": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/155.0.0.0 Safari/537.36",
388 "renderPlacement": "main",
389 "startupStages": {
390 "started": 106.60000002384186,
391 "admission": 111.40000003576279,
392 "graphics": 1147.9000000357628,
393 "simulation": 854.3000000119209,
394 "presentation": 1147.9000000357628,
395 "room": null,
396 "ready": null,
397 "failed": null
398 },
399 "render": {
400 "instances": 674,
401 "triangles": 47016,
402 "visibleInstances": 575,
403 "shadowInstances": 378,
404 "visibleTriangles": 41304,
405 "shadowTriangles": 30732,
406 "drawCalls": 9,
407 "buffers": 53,
408 "textures": 4,
409 "targetBytes": 32329216,
410 "targetGeneration": 1,
411 "width": 1440,
412 "height": 900,
413 "frameMs": 3.5,
414 "submittedFrames": 1,
415 "completedFrames": 0,
416 "failedFrames": 0,
417 "cancelledFrames": 0,
418 "pendingFrames": 1,
419 "skippedFrames": 6,
420 "completionWaitMs": 0,
421 "maxCompletionWaitMs": 0,
422 "lastSubmittedAtMs": 1201.699999988079,
423 "lastCompletedAtMs": null
424 },
425 "graphicsIncidents": [],
426 "viewport": [
427 1440,
428 900,
429 1
430 ]
431 },
432 "first-frame-main-ready.json": {
433 "browser": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/155.0.0.0 Safari/537.36",
434 "renderPlacement": "main",
435 "startupStages": {
436 "started": 106.60000002384186,
437 "admission": 111.40000003576279,
438 "graphics": 1147.9000000357628,
439 "simulation": 854.3000000119209,
440 "presentation": 1147.9000000357628,
441 "room": null,
442 "ready": 1787.9000000357628,
443 "failed": null
444 },
445 "render": {
446 "instances": 674,
447 "triangles": 47016,
448 "visibleInstances": 575,
449 "shadowInstances": 378,
450 "visibleTriangles": 41304,
451 "shadowTriangles": 30732,
452 "drawCalls": 9,
453 "buffers": 53,
454 "textures": 4,
455 "targetBytes": 32329216,
456 "targetGeneration": 1,
457 "width": 1440,
458 "height": 900,
459 "frameMs": 1.9000000357627869,
460 "submittedFrames": 7,
461 "completedFrames": 7,
462 "failedFrames": 0,
463 "cancelledFrames": 0,
464 "pendingFrames": 0,
465 "skippedFrames": 19,
466 "completionWaitMs": 517.6999999880791,
467 "maxCompletionWaitMs": 589.9000000357628,
468 "lastSubmittedAtMs": 4383.400000035763,
469 "lastCompletedAtMs": 4901.100000023842
470 },
471 "graphicsIncidents": [],
472 "viewport": [
473 1440,
474 900,
475 1
476 ]
477 }
478 },
479 "firstFrameReports141": {
480 "first-frame-worker-held.json": {
481 "browser": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/141.0.7390.37 Safari/537.36",
482 "renderPlacement": "worker",
483 "startupStages": {
484 "started": 63.89999997615814,
485 "admission": 66.39999997615814,
486 "graphics": 1202.300000011921,
487 "simulation": 462.80000001192093,
488 "presentation": 1202.6000000238419,
489 "room": null,
490 "ready": null,
491 "failed": null
492 },
493 "render": {
494 "instances": 674,
495 "triangles": 47016,
496 "visibleInstances": 575,
497 "shadowInstances": 378,
498 "visibleTriangles": 41304,
499 "shadowTriangles": 30732,
500 "drawCalls": 9,
501 "buffers": 53,
502 "textures": 4,
503 "targetBytes": 32329216,
504 "targetGeneration": 1,
505 "width": 1440,
506 "height": 900,
507 "frameMs": 2.100000023841858,
508 "submittedFrames": 1,
509 "completedFrames": 0,
510 "failedFrames": 0,
511 "cancelledFrames": 0,
512 "pendingFrames": 1,
513 "skippedFrames": 48,
514 "completionWaitMs": 0,
515 "maxCompletionWaitMs": 0,
516 "lastSubmittedAtMs": 1242.6000000238419,
517 "lastCompletedAtMs": null
518 },
519 "graphicsIncidents": [],
520 "viewport": [
521 1440,
522 900,
523 1
524 ]
525 },
526 "first-frame-worker-ready.json": {
527 "browser": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/141.0.7390.37 Safari/537.36",
528 "renderPlacement": "worker",
529 "startupStages": {
530 "started": 63.89999997615814,
531 "admission": 66.39999997615814,
532 "graphics": 1202.300000011921,
533 "simulation": 462.80000001192093,
534 "presentation": 1202.6000000238419,
535 "room": null,
536 "ready": 2078.100000023842,
537 "failed": null
538 },
539 "render": {
540 "instances": 674,
541 "triangles": 47016,
542 "visibleInstances": 575,
543 "shadowInstances": 378,
544 "visibleTriangles": 41304,
545 "shadowTriangles": 30732,
546 "drawCalls": 9,
547 "buffers": 53,
548 "textures": 4,
549 "targetBytes": 32329216,
550 "targetGeneration": 1,
551 "width": 1440,
552 "height": 900,
553 "frameMs": 1.5999999642372131,
554 "submittedFrames": 6,
555 "completedFrames": 5,
556 "failedFrames": 0,
557 "cancelledFrames": 0,
558 "pendingFrames": 1,
559 "skippedFrames": 114,
560 "completionWaitMs": 245.5999999642372,
561 "maxCompletionWaitMs": 798.3999999761581,
562 "lastSubmittedAtMs": 3081.800000011921,
563 "lastCompletedAtMs": 3071.399999976158
564 },
565 "graphicsIncidents": [],
566 "viewport": [
567 1440,
568 900,
569 1
570 ]
571 },
572 "first-frame-main-held.json": {
573 "browser": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/141.0.7390.37 Safari/537.36",
574 "renderPlacement": "main",
575 "startupStages": {
576 "started": 54.19999998807907,
577 "admission": 58.10000002384186,
578 "graphics": 784.6999999880791,
579 "simulation": 785.5,
580 "presentation": 784.8000000119209,
581 "room": null,
582 "ready": null,
583 "failed": null
584 },
585 "render": {
586 "instances": 674,
587 "triangles": 47016,
588 "visibleInstances": 575,
589 "shadowInstances": 378,
590 "visibleTriangles": 41304,
591 "shadowTriangles": 30732,
592 "drawCalls": 9,
593 "buffers": 53,
594 "textures": 4,
595 "targetBytes": 32329216,
596 "targetGeneration": 1,
597 "width": 1440,
598 "height": 900,
599 "frameMs": 2.400000035762787,
600 "submittedFrames": 1,
601 "completedFrames": 0,
602 "failedFrames": 0,
603 "cancelledFrames": 0,
604 "pendingFrames": 1,
605 "skippedFrames": 5,
606 "completionWaitMs": 0,
607 "maxCompletionWaitMs": 0,
608 "lastSubmittedAtMs": 824.6000000238419,
609 "lastCompletedAtMs": null
610 },
611 "graphicsIncidents": [],
612 "viewport": [
613 1440,
614 900,
615 1
616 ]
617 },
618 "first-frame-main-ready.json": {
619 "browser": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/141.0.7390.37 Safari/537.36",
620 "renderPlacement": "main",
621 "startupStages": {
622 "started": 54.19999998807907,
623 "admission": 58.10000002384186,
624 "graphics": 784.6999999880791,
625 "simulation": 785.5,
626 "presentation": 784.8000000119209,
627 "room": null,
628 "ready": 1190.6000000238419,
629 "failed": null
630 },
631 "render": {
632 "instances": 674,
633 "triangles": 47016,
634 "visibleInstances": 575,
635 "shadowInstances": 378,
636 "visibleTriangles": 41304,
637 "shadowTriangles": 30732,
638 "drawCalls": 9,
639 "buffers": 53,
640 "textures": 4,
641 "targetBytes": 32329216,
642 "targetGeneration": 1,
643 "width": 1440,
644 "height": 900,
645 "frameMs": 0.8999999761581421,
646 "submittedFrames": 7,
647 "completedFrames": 6,
648 "failedFrames": 0,
649 "cancelledFrames": 0,
650 "pendingFrames": 1,
651 "skippedFrames": 16,
652 "completionWaitMs": 294.60000002384186,
653 "maxCompletionWaitMs": 354.39999997615814,
654 "lastSubmittedAtMs": 2580.300000011921,
655 "lastCompletedAtMs": 2579.400000035763
656 },
657 "graphicsIncidents": [],
658 "viewport": [
659 1440,
660 900,
661 1
662 ]
663 }
664 },
665 "commands": [
666 "PLAYWRIGHT_EXECUTABLE_PATH=/usr/bin/chromium npm run test:browser -- tests/browser/player.spec.ts -g 'entry waits for the first|world pixel checks'",
667 "PLAYWRIGHT_EXECUTABLE_PATH=/tmp/dw-browser-test/chrome-linux/headless_shell npm run test:browser -- tests/browser/player.spec.ts -g 'entry waits for the first|world pixel checks|startup deadline|renders, walks'",
668 "PLAYWRIGHT_EXECUTABLE_PATH=/tmp/dw-browser-test/chrome-linux/headless_shell npm run test:browser:persistent"
669 ],
670 "remaining": [
671 "Chromium 155 persistent acceptance failed twice while enabling the second traveler; screenshot showed Shader compilation deadline exceeded. Neither the existing 15-second shader budget nor the scenario was weakened.",
672 "Clear experiment checks GPU admission and compositor output, not engine shader features or multi-client performance.",
673 "Software GPU testing does not qualify physical desktop or phone hardware.",
674 "Full milestones 0\u201318 remain active; approximate completion remains 62%."
675 ],
676 "references": [
677 "https://chromium.googlesource.com/chromium/src/+/main/docs/gpu/swiftshader.md"
678 ],
679 "clearExperimentSource": "import {createServer} from 'node:http';\nimport {writeFileSync} from 'node:fs';\nimport {chromium} from '/home/jason/coding/dw-web/node_modules/playwright/index.mjs';\nimport {createRequire} from 'node:module';\nconst require=createRequire('/home/jason/coding/dw-web/package.json'),{decode}=require('fast-png');\nconst html=`<style>body{margin:0;background:black}canvas{width:128px;height:128px;display:inline-block}</style><canvas id=\"a\" width=\"128\" height=\"128\"></canvas><canvas id=\"b\" width=\"128\" height=\"128\"></canvas><script>\nasync function paint(canvas,color){const adapter=await navigator.gpu.requestAdapter({powerPreference:\"high-performance\"});if(!adapter)throw Error('No adapter');const device=await adapter.requestDevice(),context=canvas.getContext('webgpu');context.configure({device,format:navigator.gpu.getPreferredCanvasFormat(),alphaMode:'opaque'});let count=0;function draw(){const command=device.createCommandEncoder(),pass=command.beginRenderPass({colorAttachments:[{view:context.getCurrentTexture().createView(),clearValue:color,loadOp:'clear',storeOp:'store'}]});pass.end();device.queue.submit([command.finish()]);count++;requestAnimationFrame(draw);}draw();await device.queue.onSubmittedWorkDone();return {adapter:adapter.info,frames:()=>count};}\n(async()=>{await paint(document.querySelector('#a'),{r:1,g:0,b:0,a:1});const code='('+paint.toString()+');';const source='const paint='+paint.toString()+';onmessage=async e=>{try{await paint(e.data,{r:0,g:1,b:0,a:1});postMessage({ready:true});}catch(error){postMessage({error:String(error)});}}';const worker=new Worker(URL.createObjectURL(new Blob([source],{type:'text/javascript'})));worker.onmessage=e=>{window.result=e.data};const canvas=document.querySelector('#b').transferControlToOffscreen();worker.postMessage(canvas,[canvas]);})().catch(error=>window.result={error:String(error)});\n</script>`;\nconst server=createServer((req,res)=>{res.setHeader('Content-Type','text/html');res.end(html);});await new Promise(r=>server.listen(0,'127.0.0.1',r));\nconst base='http://127.0.0.1:'+server.address().port;\nconst common=['--enable-unsafe-webgpu','--enable-unsafe-swiftshader'];\nconst cases=[\n ['155-original','/usr/bin/chromium',[...common,'--use-angle=vulkan','--use-vulkan=swiftshader','--use-webgpu-adapter=swiftshader','--enable-features=Vulkan','--disable-vulkan-surface']],\n ['155-surface','/usr/bin/chromium',[...common,'--use-angle=vulkan','--use-vulkan=swiftshader','--use-webgpu-adapter=swiftshader','--enable-features=Vulkan']],\n ['141-surface','/tmp/dw-browser-test/chrome-linux/headless_shell',[...common,'--use-angle=vulkan','--use-vulkan=swiftshader','--use-webgpu-adapter=swiftshader','--enable-features=Vulkan']],\n ['141-original','/tmp/dw-browser-test/chrome-linux/headless_shell',[...common,'--use-angle=vulkan','--use-vulkan=swiftshader','--use-webgpu-adapter=swiftshader','--enable-features=Vulkan','--disable-vulkan-surface']],\n];\nconst results=[];\ntry{for(const [name,executablePath,args] of cases){const browser=await chromium.launch({executablePath,args});try{const page=await browser.newPage({viewport:{width:300,height:150}});await page.goto(base);await page.waitForFunction(()=>window.result,{timeout:10000});const ready=await page.evaluate(()=>window.result);await page.evaluate(()=>new Promise(r=>requestAnimationFrame(()=>requestAnimationFrame(r))));const bytes=await page.screenshot(),png=decode(bytes);const pixel=x=>[...Array.from(png.data.slice((64*png.width+x)*png.channels,(64*png.width+x)*png.channels+3)),png.channels===4?png.data[(64*png.width+x)*png.channels+3]:255];const result={name,browser:browser.version(),args,ready,main:pixel(64),worker:pixel(192)};results.push(result);console.log(JSON.stringify(result));writeFileSync('/tmp/dw-'+name+'.png',bytes);}catch(error){results.push({name,error:String(error)});console.log(name,String(error));}finally{await browser.close();}}}finally{server.close();writeFileSync('/tmp/dw-compositor-results.json',JSON.stringify(results,null,2));}\n"
680}
681