commit 59220ad8186a87d85160d78bba4c6c7cd7b6c5da
parent e03821f3c7bf02b1d5a20e36c07904476e846053
Author: umhau <umhau@example.invalid>
Date: Wed, 21 Oct 2026 12:00:20 +0000
Record recovery, native 90 Hz soak, and calibrated rendering evidence
Diffstat:
36 files changed, 2597 insertions(+), 0 deletions(-)
diff --git a/evidence/app-recovery-trials-90hz.json b/evidence/app-recovery-trials-90hz.json
@@ -0,0 +1,249 @@
+{
+ "started": 565.151639,
+ "app_recovery": true,
+ "commands": [
+ {
+ "started": 565.188874,
+ "argv": [
+ "hidcmd",
+ "off"
+ ],
+ "ended": 565.307219,
+ "code": 0,
+ "stdout": "screen_off 0",
+ "stderr": ""
+ },
+ {
+ "started": 565.374558,
+ "argv": [
+ "hidcmd",
+ "on"
+ ],
+ "ended": 565.668005,
+ "code": 0,
+ "stdout": "screen_on 0",
+ "stderr": ""
+ },
+ {
+ "started": 577.157944,
+ "argv": [
+ "hidcmd",
+ "off"
+ ],
+ "ended": 577.281840,
+ "code": 0,
+ "stdout": "screen_off 0",
+ "stderr": ""
+ },
+ {
+ "started": 577.342010,
+ "argv": [
+ "hidcmd",
+ "on"
+ ],
+ "ended": 577.6670132,
+ "code": 0,
+ "stdout": "screen_on 0",
+ "stderr": ""
+ },
+ {
+ "started": 591.887796,
+ "argv": [
+ "hidcmd",
+ "off"
+ ],
+ "ended": 592.0210729,
+ "code": 0,
+ "stdout": "screen_off 0",
+ "stderr": ""
+ },
+ {
+ "started": 592.1071081,
+ "argv": [
+ "hidcmd",
+ "on"
+ ],
+ "ended": 592.4302661,
+ "code": 0,
+ "stdout": "screen_on 0",
+ "stderr": ""
+ }
+ ],
+ "display_events": [
+ {
+ "received": 565.188674,
+ "line": "565.188422 start: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ },
+ {
+ "received": 565.374486,
+ "line": "565.374422 display 2 [REMOVE]: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 565.3745122,
+ "line": "565.374422 display 1 []: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 567.1534278,
+ "line": "567.153422 display 2 [ADD,MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 567.153450,
+ "line": "567.153422 display 1 []: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 567.562732,
+ "line": "567.562422 display 2 [MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ },
+ {
+ "received": 567.562749,
+ "line": "567.562422 display 1 []: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ },
+ {
+ "received": 574.426373,
+ "line": "574.426422 display 2 [REMOVE]: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 574.426451,
+ "line": "574.426422 display 1 []: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 575.210498,
+ "line": "575.209422 display 2 [ADD,MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 575.210515,
+ "line": "575.209422 display 1 []: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 575.670484,
+ "line": "575.670422 display 2 [MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ },
+ {
+ "received": 575.670501,
+ "line": "575.670422 display 1 []: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ },
+ {
+ "received": 577.341881,
+ "line": "577.341422 display 2 [REMOVE]: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 577.341931,
+ "line": "577.341422 display 1 []: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 581.877207,
+ "line": "581.877422 display 2 [ADD,MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 581.877422,
+ "line": "581.877422 display 1 []: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 582.309493,
+ "line": "582.309422 display 2 [MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ },
+ {
+ "received": 582.309518,
+ "line": "582.309422 display 1 []: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ },
+ {
+ "received": 586.939449,
+ "line": "586.939422 display 2 [REMOVE]: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 586.939467,
+ "line": "586.939422 display 1 []: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 587.7288592,
+ "line": "587.728422 display 2 [ADD,MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 587.728875,
+ "line": "587.728422 display 1 []: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 588.1889489,
+ "line": "588.188422 display 2 [MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ },
+ {
+ "received": 588.1889699,
+ "line": "588.189422 display 1 []: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ },
+ {
+ "received": 592.106874,
+ "line": "592.106422 display 2 [REMOVE]: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 592.106915,
+ "line": "592.106422 display 1 []: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 596.639261,
+ "line": "596.639422 display 2 [ADD,MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 596.639282,
+ "line": "596.639422 display 1 []: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 597.074720,
+ "line": "597.071422 display 2 [MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ },
+ {
+ "received": 597.0748038,
+ "line": "597.071422 display 1 []: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ },
+ {
+ "received": 601.701619,
+ "line": "601.699422 display 2 [REMOVE]: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 601.701655,
+ "line": "601.699422 display 1 []: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 602.3262138,
+ "line": "602.326422 display 2 [ADD,MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 602.326231,
+ "line": "602.326422 display 1 []: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 602.7690868,
+ "line": "602.769422 display 2 [MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ },
+ {
+ "received": 602.769116,
+ "line": "602.769422 display 1 []: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ }
+ ],
+ "trials": [
+ {
+ "index": 1,
+ "outcome": "returned_after_screen_on_without_DRST",
+ "post_recovery_drops": [
+ 0.7841250896453857
+ ]
+ },
+ {
+ "index": 2,
+ "outcome": "recovered_by_app",
+ "seconds": 2.2007510662078857,
+ "post_recovery_drops": [
+ 0.7894101142883301
+ ]
+ },
+ {
+ "index": 3,
+ "outcome": "recovered_by_app",
+ "seconds": 2.202544927597046,
+ "post_recovery_drops": [
+ 0.6245949268341064
+ ]
+ }
+ ],
+ "result": "passed",
+ "ended": 606.6429398
+}
diff --git a/evidence/calibrated-90hz-trial.json b/evidence/calibrated-90hz-trial.json
@@ -0,0 +1,19 @@
+{
+ "process_exit": 0,
+ "resolution": [
+ 4320,
+ 2160
+ ],
+ "internal_resolution": [
+ 6048,
+ 3024
+ ],
+ "settled_health_seconds": 159.9960000514984,
+ "presented_fps": 89.99599987103021,
+ "skipped_delta": 1,
+ "gpu_errors": 0,
+ "gpu_ms": 5.97,
+ "display_removes": 0,
+ "join_timeout": false,
+ "visual_improvement": "awaiting user assessment"
+}
diff --git a/evidence/calibrated-90hz-trial.txt b/evidence/calibrated-90hz-trial.txt
@@ -0,0 +1,83 @@
+3891.738422 [hmd] serial REDACTED-DEVICE-SERIAL
+3891.848422 [hmd] wake commands accepted; waiting for IMU and video evidence
+3891.859422 captured display 2: ok
+3892.401422 [display callback] id=2 flags=8 main=true
+3892.402422 mode 4320x2160@90 (ui 4320x2160): ok
+3892.430422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0); dedicated Metal display loop at 90 Hz
+3892.431422 render worker main=false
+frame 1 drawable 4320x2160
+3892.478422 [display callback] handled after 77.1 ms
+3892.490422 [hmd] display ready=false; raw 05 00 01 01 00 3b 00 00 00 0a 27
+3892.490422 headset reports display not ready
+3893.741422 [hmd] display ready=true; raw 05 01 01 01 01 3b 00 00 00 0a 27
+frame 300 drawable 4320x2160
+frame 600 drawable 4320x2160
+3901.849422 health display=2 submitted=846 presented=839 skipped=4 fps=79.95 presentAge=0.00s GPUms=5.97 GPUerrors=0 IMU=9528 lastIMU=0.0s status=2
+frame 900 drawable 4320x2160
+frame 1200 drawable 4320x2160
+frame 1500 drawable 4320x2160
+3911.850422 health display=2 submitted=1746 presented=1739 skipped=4 fps=89.99 presentAge=0.00s GPUms=5.97 GPUerrors=0 IMU=19532 lastIMU=0.0s status=2
+frame 1800 drawable 4320x2160
+frame 2100 drawable 4320x2160
+frame 2400 drawable 4320x2160
+3921.850422 health display=2 submitted=2646 presented=2639 skipped=4 fps=90.00 presentAge=0.00s GPUms=5.98 GPUerrors=0 IMU=29536 lastIMU=0.0s status=2
+frame 2700 drawable 4320x2160
+frame 3000 drawable 4320x2160
+frame 3300 drawable 4320x2160
+3931.849422 health display=2 submitted=3546 presented=3539 skipped=4 fps=90.01 presentAge=0.00s GPUms=5.98 GPUerrors=0 IMU=39540 lastIMU=0.0s status=2
+frame 3600 drawable 4320x2160
+frame 3900 drawable 4320x2160
+frame 4200 drawable 4320x2160
+3941.850422 health display=2 submitted=4446 presented=4439 skipped=4 fps=89.99 presentAge=0.00s GPUms=5.97 GPUerrors=0 IMU=49544 lastIMU=0.0s status=2
+frame 4500 drawable 4320x2160
+frame 4800 drawable 4320x2160
+frame 5100 drawable 4320x2160
+3951.849422 health display=2 submitted=5346 presented=5339 skipped=4 fps=90.00 presentAge=0.00s GPUms=5.97 GPUerrors=0 IMU=59548 lastIMU=0.0s status=2
+frame 5400 drawable 4320x2160
+frame 5700 drawable 4320x2160
+frame 6000 drawable 4320x2160
+3961.849422 health display=2 submitted=6246 presented=6239 skipped=4 fps=90.00 presentAge=0.00s GPUms=5.97 GPUerrors=0 IMU=69548 lastIMU=0.0s status=2
+frame 6300 drawable 4320x2160
+frame 6600 drawable 4320x2160
+frame 6900 drawable 4320x2160
+3971.848422 health display=2 submitted=7146 presented=7139 skipped=4 fps=90.01 presentAge=0.00s GPUms=5.97 GPUerrors=0 IMU=79552 lastIMU=0.0s status=2
+frame 7200 drawable 4320x2160
+frame 7500 drawable 4320x2160
+frame 7800 drawable 4320x2160
+3981.849422 health display=2 submitted=8046 presented=8038 skipped=5 fps=89.89 presentAge=0.00s GPUms=5.97 GPUerrors=0 IMU=89556 lastIMU=0.0s status=2
+frame 8100 drawable 4320x2160
+frame 8400 drawable 4320x2160
+frame 8700 drawable 4320x2160
+3991.849422 health display=2 submitted=8946 presented=8938 skipped=5 fps=90.00 presentAge=0.00s GPUms=5.97 GPUerrors=0 IMU=99560 lastIMU=0.0s status=2
+frame 9000 drawable 4320x2160
+frame 9300 drawable 4320x2160
+frame 9600 drawable 4320x2160
+4001.847422 health display=2 submitted=9846 presented=9838 skipped=5 fps=90.02 presentAge=0.00s GPUms=5.97 GPUerrors=0 IMU=109560 lastIMU=0.0s status=2
+frame 9900 drawable 4320x2160
+frame 10200 drawable 4320x2160
+frame 10500 drawable 4320x2160
+4011.847422 health display=2 submitted=10746 presented=10738 skipped=5 fps=90.00 presentAge=0.00s GPUms=5.97 GPUerrors=0 IMU=119564 lastIMU=0.0s status=2
+frame 10800 drawable 4320x2160
+frame 11100 drawable 4320x2160
+frame 11400 drawable 4320x2160
+4021.847422 health display=2 submitted=11646 presented=11638 skipped=5 fps=90.00 presentAge=0.00s GPUms=5.97 GPUerrors=0 IMU=129568 lastIMU=0.0s status=2
+frame 11700 drawable 4320x2160
+frame 12000 drawable 4320x2160
+frame 12300 drawable 4320x2160
+4031.847422 health display=2 submitted=12546 presented=12538 skipped=5 fps=90.00 presentAge=0.00s GPUms=5.97 GPUerrors=0 IMU=139572 lastIMU=0.0s status=2
+frame 12600 drawable 4320x2160
+frame 12900 drawable 4320x2160
+frame 13200 drawable 4320x2160
+4041.847422 health display=2 submitted=13446 presented=13438 skipped=5 fps=90.00 presentAge=0.00s GPUms=5.97 GPUerrors=0 IMU=149576 lastIMU=0.0s status=2
+frame 13500 drawable 4320x2160
+frame 13800 drawable 4320x2160
+frame 14100 drawable 4320x2160
+4051.847422 health display=2 submitted=14346 presented=14338 skipped=5 fps=90.00 presentAge=0.00s GPUms=5.97 GPUerrors=0 IMU=159580 lastIMU=0.0s status=2
+frame 14400 drawable 4320x2160
+frame 14700 drawable 4320x2160
+frame 15000 drawable 4320x2160
+4061.846422 health display=2 submitted=15246 presented=15238 skipped=5 fps=90.00 presentAge=0.00s GPUms=5.97 GPUerrors=0 IMU=169584 lastIMU=0.0s status=2
+frame 15300 drawable 4320x2160
+frame 15600 drawable 4320x2160
+frame 15900 drawable 4320x2160
+4071.846422 health display=2 submitted=16146 presented=16138 skipped=5 fps=90.00 presentAge=0.00s GPUms=5.97 GPUerrors=0 IMU=179588 lastIMU=0.0s status=2
diff --git a/evidence/calibrated-recovery-live.txt b/evidence/calibrated-recovery-live.txt
@@ -0,0 +1,66 @@
+4104.077422 [hmd] serial REDACTED-DEVICE-SERIAL
+4104.186422 [hmd] wake commands accepted; waiting for IMU and video evidence
+4104.200422 captured display 2: ok
+4104.736422 [display callback] id=2 flags=8 main=true
+4104.738422 mode 4320x2160@90 (ui 4320x2160): ok
+4104.753422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0); dedicated Metal display loop at 90 Hz
+4104.761422 render worker main=false
+frame 1 drawable 4320x2160
+4104.808422 [display callback] handled after 71.3 ms
+4104.821422 [hmd] display ready=false; raw 05 00 01 01 00 3b 00 00 00 0a 27
+4104.821422 headset reports display not ready
+4105.065422 [display callback] id=2 flags=4640 main=true
+4107.449422 recovery: display absent after grace period; resetting DP adapter
+rid 1 recover DRST: 0x00000000, task result: 0x00, bytes: 64
+4107.508422 recovery helper accepted DRST; waiting for display ADD
+4109.621422 [display callback] id=2 flags=4378 main=true
+4109.621422 [display callback] handled after 4556.2 ms
+4109.624422 headset display LOST
+4109.624422 [display callback] handled after 2.9 ms
+4109.624422 headset display back after 4559 ms
+4109.631422 captured display 2: ok
+4110.374422 [display callback] id=2 flags=8 main=true
+4110.375422 mode 4320x2160@90 (ui 4320x2160): ok
+4110.376422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0); dedicated Metal display loop at 90 Hz
+4110.377422 [display callback] handled after 2.4 ms
+4110.397422 [hmd] display ready=false; raw 05 00 01 01 00 00 00 00 00 00 00
+4110.397422 headset reports display not ready
+frame 300 drawable 4320x2160
+4114.188422 health display=2 submitted=363 presented=345 skipped=14 fps=32.87 presentAge=0.01s GPUms=5.92 GPUerrors=0 IMU=4372 lastIMU=0.0s status=2
+4114.604422 [hmd] display ready=false; raw 05 00 01 01 00 59 00 00 00 07 3b
+4114.604422 headset reports display not ready
+4114.697422 [display callback] id=2 flags=4640 main=true
+4115.347422 [display callback] id=2 flags=4378 main=true
+4115.348422 [display callback] handled after 650.4 ms
+4115.349422 headset display LOST
+4115.349422 [display callback] handled after 1.8 ms
+4115.349422 headset display back after 651 ms
+4115.357422 captured display 2: ok
+4116.065422 [display callback] id=2 flags=8 main=true
+4116.079422 mode 4320x2160@90 (ui 4320x2160): ok
+4116.080422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0); dedicated Metal display loop at 90 Hz
+4116.080422 [display callback] handled after 15.3 ms
+4117.402422 [hmd] display ready=true; raw 05 01 01 01 01 59 00 00 00 07 3b
+frame 600 drawable 4320x2160
+frame 900 drawable 4320x2160
+4124.187422 health display=2 submitted=1134 presented=1109 skipped=21 fps=76.40 presentAge=0.00s GPUms=5.93 GPUerrors=0 IMU=13124 lastIMU=0.0s status=4
+frame 1200 drawable 4320x2160
+frame 1500 drawable 4320x2160
+frame 1800 drawable 4320x2160
+4134.187422 health display=2 submitted=2034 presented=2009 skipped=22 fps=90.00 presentAge=0.00s GPUms=5.94 GPUerrors=0 IMU=23128 lastIMU=0.0s status=4
+frame 2100 drawable 4320x2160
+frame 2400 drawable 4320x2160
+frame 2700 drawable 4320x2160
+4144.186422 health display=2 submitted=2934 presented=2909 skipped=22 fps=90.00 presentAge=0.00s GPUms=5.95 GPUerrors=0 IMU=33132 lastIMU=0.0s status=4
+frame 3000 drawable 4320x2160
+frame 3300 drawable 4320x2160
+frame 3600 drawable 4320x2160
+4154.186422 health display=2 submitted=3834 presented=3808 skipped=22 fps=89.90 presentAge=0.00s GPUms=5.95 GPUerrors=0 IMU=43136 lastIMU=0.0s status=4
+frame 3900 drawable 4320x2160
+frame 4200 drawable 4320x2160
+frame 4500 drawable 4320x2160
+4164.188422 health display=2 submitted=4734 presented=4708 skipped=22 fps=89.99 presentAge=0.00s GPUms=5.95 GPUerrors=0 IMU=53140 lastIMU=0.0s status=4
+frame 4800 drawable 4320x2160
+frame 5100 drawable 4320x2160
+frame 5400 drawable 4320x2160
+4174.187422 health display=2 submitted=5634 presented=5608 skipped=22 fps=90.01 presentAge=0.00s GPUms=5.95 GPUerrors=0 IMU=63144 lastIMU=0.0s status=4
diff --git a/evidence/calibrated-recovery-trial.json b/evidence/calibrated-recovery-trial.json
@@ -0,0 +1,85 @@
+{
+ "started": 4104.8182678,
+ "app_recovery": true,
+ "leave_off": true,
+ "commands": [
+ {
+ "started": 4104.871066,
+ "argv": [
+ "hidcmd",
+ "off"
+ ],
+ "ended": 4104.994136,
+ "code": 0,
+ "stdout": "screen_off 0",
+ "stderr": ""
+ }
+ ],
+ "display_events": [
+ {
+ "received": 4104.8708851,
+ "line": "4104.870422 start: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ },
+ {
+ "received": 4105.057977,
+ "line": "4105.057422 display 2 [REMOVE]: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 4105.058000,
+ "line": "4105.057422 display 1 []: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 4109.6343849,
+ "line": "4109.633422 display 2 [ADD,MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 4109.634406,
+ "line": "4109.633422 display 1 []: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 4110.104664,
+ "line": "4110.103422 display 2 [MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ },
+ {
+ "received": 4110.1047008,
+ "line": "4110.103422 display 1 []: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ },
+ {
+ "received": 4114.718140,
+ "line": "4114.716422 display 2 [REMOVE]: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 4114.7181602,
+ "line": "4114.716422 display 1 []: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 4115.3725262,
+ "line": "4115.372422 display 2 [ADD,MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 4115.372591,
+ "line": "4115.372422 display 1 []: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 4115.821454,
+ "line": "4115.821422 display 2 [MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ },
+ {
+ "received": 4115.821494,
+ "line": "4115.821422 display 1 []: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ }
+ ],
+ "trials": [
+ {
+ "index": 1,
+ "outcome": "recovered_by_app",
+ "seconds": 2.5662858486175537,
+ "outage_seconds": 4.5764079093933105,
+ "post_recovery_drops": [
+ 0.6543862819671631
+ ]
+ }
+ ],
+ "result": "passed",
+ "ended": 4119.646784
+}
diff --git a/evidence/calibration-offline-checks.txt b/evidence/calibration-offline-checks.txt
@@ -0,0 +1,25 @@
+PASS key: 1024 bytes, upstream prefix
+PASS request layout
+PASS chunk reply parse
+PASS end reply parse
+PASS metadata size LE
+PASS config block XOR/header round trip
+PASS parse displays + gyro
+PASS IPD from Rt translations
+PASS gyro bias constant terms
+PASS view 0: identity bounds = +-1080/1000
+PASS view 0 identity (0.0, 0.0)
+PASS view 0 identity (0.5, 0.5)
+PASS view 0 identity (0.25, 0.8)
+PASS view 0 identity (1.0, 1.0)
+PASS view 1: identity bounds = +-1080/1000
+PASS view 1 identity (0.0, 0.0)
+PASS view 1 identity (0.5, 0.5)
+PASS view 1 identity (0.25, 0.8)
+PASS view 1 identity (1.0, 1.0)
+PASS k1>0: centre maps to centre
+PASS k1>0: left/right symmetric
+PASS k1>0: matches hand calculation
+PASS chromatic: red samples farther out than green, blue nearer
+PASS bounds -> asymmetric FOV angles
+all calibration self-tests passed
diff --git a/evidence/clean-shutdown-1.txt b/evidence/clean-shutdown-1.txt
@@ -0,0 +1,17 @@
+2141.286422 [hmd] serial REDACTED-DEVICE-SERIAL
+2141.396422 [hmd] wake commands accepted; waiting for IMU and video evidence
+2141.413422 captured display 2: ok
+2141.934422 [display callback] id=2 flags=8 main=true
+2141.946422 mode 4320x2160@90 (ui 4320x2160): ok
+2141.964422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0); dedicated Metal display loop at 90 Hz
+2141.973422 render worker main=false
+frame 1 drawable 4320x2160
+2142.004422 [display callback] handled after 70.1 ms
+2142.016422 [hmd] display ready=false; raw 05 00 01 01 00 3b 00 00 00 0a 27
+2142.016422 headset reports display not ready
+2143.272422 [hmd] display ready=true; raw 05 01 01 01 01 3b 00 00 00 0a 27
+frame 300 drawable 4320x2160
+frame 600 drawable 4320x2160
+2151.398422 health display=2 submitted=847 presented=839 skipped=4 fps=79.95 presentAge=0.01s GPUms=1.68 GPUerrors=0 IMU=9556 lastIMU=0.0s status=2
+frame 900 drawable 4320x2160
+frame 1200 drawable 4320x2160
diff --git a/evidence/clean-shutdown-2.txt b/evidence/clean-shutdown-2.txt
@@ -0,0 +1,15 @@
+2157.765422 [hmd] serial REDACTED-DEVICE-SERIAL
+2157.874422 [hmd] wake commands accepted; waiting for IMU and video evidence
+2157.892422 captured display 2: ok
+2158.442422 [display callback] id=2 flags=8 main=true
+2158.444422 mode 4320x2160@90 (ui 4320x2160): ok
+2158.464422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0); dedicated Metal display loop at 90 Hz
+2158.473422 render worker main=false
+frame 1 drawable 4320x2160
+2158.504422 [display callback] handled after 61.4 ms
+2159.772422 [hmd] display ready=true; raw 05 01 01 01 01 59 00 00 00 07 3b
+frame 300 drawable 4320x2160
+frame 600 drawable 4320x2160
+2167.876422 health display=2 submitted=845 presented=837 skipped=5 fps=79.77 presentAge=0.01s GPUms=1.66 GPUerrors=0 IMU=9524 lastIMU=0.0s status=1
+frame 900 drawable 4320x2160
+frame 1200 drawable 4320x2160
diff --git a/evidence/clean-shutdown-trials.json b/evidence/clean-shutdown-trials.json
@@ -0,0 +1,22 @@
+[
+ {
+ "trial": 1,
+ "started": 2140.810004,
+ "ended": 2156.991325,
+ "exit": 0,
+ "background_render": true,
+ "live_gpu": true,
+ "worker_join_timeout": false,
+ "log": "evidence/clean-shutdown-1.txt"
+ },
+ {
+ "trial": 2,
+ "started": 2156.991812,
+ "ended": 2173.514829,
+ "exit": 0,
+ "background_render": true,
+ "live_gpu": true,
+ "worker_join_timeout": false,
+ "log": "evidence/clean-shutdown-2.txt"
+ }
+]
diff --git a/evidence/factory-calibration-read-verified.txt b/evidence/factory-calibration-read-verified.txt
@@ -0,0 +1,4 @@
+4097.709422 read factory configuration: 10737 bytes
+saved factory configuration to /tmp/vr-factory-verified.bin and /tmp/vr-factory-verified.json
+Factory optical model parsed successfully; unit-specific geometry omitted.
+Factory optical model parsed successfully; unit-specific geometry omitted.
diff --git a/evidence/factory-calibration-read.txt b/evidence/factory-calibration-read.txt
@@ -0,0 +1,4 @@
+3624.432422 read factory configuration: 10737 bytes
+saved factory configuration to /Users/USER/Library/Application Support/VRWorkstation/factory.bin and /Users/USER/Library/Application Support/VRWorkstation/factory.json
+Factory optical model parsed successfully; unit-specific geometry omitted.
+Factory optical model parsed successfully; unit-specific geometry omitted.
diff --git a/evidence/final-app-recovery-trials.json b/evidence/final-app-recovery-trials.json
@@ -0,0 +1,153 @@
+{
+ "started": 2261.4293602,
+ "app_recovery": true,
+ "leave_off": true,
+ "commands": [
+ {
+ "started": 2261.473825,
+ "argv": [
+ "hidcmd",
+ "off"
+ ],
+ "ended": 2261.5942671,
+ "code": 0,
+ "stdout": "screen_off 0",
+ "stderr": ""
+ },
+ {
+ "started": 2286.1512919,
+ "argv": [
+ "hidcmd",
+ "off"
+ ],
+ "ended": 2286.284213,
+ "code": 0,
+ "stdout": "screen_off 0",
+ "stderr": ""
+ }
+ ],
+ "display_events": [
+ {
+ "received": 2261.4736362,
+ "line": "2261.473422 start: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ },
+ {
+ "received": 2261.6660302,
+ "line": "2261.666422 display 2 [REMOVE]: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 2261.666055,
+ "line": "2261.666422 display 1 []: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 2276.144535,
+ "line": "2276.144422 display 2 [ADD,MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 2276.1445508,
+ "line": "2276.144422 display 1 []: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 2276.662928,
+ "line": "2276.662422 display 2 [MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ },
+ {
+ "received": 2276.662950,
+ "line": "2276.662422 display 1 []: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ },
+ {
+ "received": 2281.189590,
+ "line": "2281.189422 display 2 [REMOVE]: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 2281.1896079,
+ "line": "2281.189422 display 1 []: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 2281.860051,
+ "line": "2281.860422 display 2 [ADD,MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 2281.8600671,
+ "line": "2281.860422 display 1 []: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 2282.245164,
+ "line": "2282.245422 display 2 [MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ },
+ {
+ "received": 2282.245182,
+ "line": "2282.245422 display 1 []: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ },
+ {
+ "received": 2286.381590,
+ "line": "2286.381422 display 2 [REMOVE]: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 2286.381641,
+ "line": "2286.381422 display 1 []: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 2300.825486,
+ "line": "2300.825422 display 2 [ADD,MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 2300.8255029,
+ "line": "2300.825422 display 1 []: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 2301.260823,
+ "line": "2301.260422 display 2 [MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ },
+ {
+ "received": 2301.260840,
+ "line": "2301.260422 display 1 []: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ },
+ {
+ "received": 2305.908484,
+ "line": "2305.908422 display 2 [REMOVE]: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 2305.908523,
+ "line": "2305.908422 display 1 []: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 2306.567575,
+ "line": "2306.565422 display 2 [ADD,MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 2306.567596,
+ "line": "2306.565422 display 1 []: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 2307.053112,
+ "line": "2307.053422 display 2 [MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ },
+ {
+ "received": 2307.053128,
+ "line": "2307.053422 display 1 []: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ }
+ ],
+ "trials": [
+ {
+ "index": 1,
+ "outcome": "recovered_by_app",
+ "seconds": 12.468422889709473,
+ "outage_seconds": 14.47850489616394,
+ "post_recovery_drops": [
+ 0.6704609394073486
+ ]
+ },
+ {
+ "index": 2,
+ "outcome": "recovered_by_app",
+ "seconds": 12.438634872436523,
+ "outage_seconds": 14.443896055221558,
+ "post_recovery_drops": [
+ 0.6590909957885742
+ ]
+ }
+ ],
+ "result": "passed",
+ "ended": 2310.840199
+}
diff --git a/evidence/final-metal-worker-soak.txt b/evidence/final-metal-worker-soak.txt
@@ -0,0 +1,326 @@
+2260.703422 [hmd] serial REDACTED-DEVICE-SERIAL
+2260.813422 [hmd] wake commands accepted; waiting for IMU and video evidence
+2260.825422 captured display 2: ok
+2261.373422 [display callback] id=2 flags=8 main=true
+2261.379422 mode 4320x2160@90 (ui 4320x2160): ok
+2261.399422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0); dedicated Metal display loop at 90 Hz
+2261.401422 render worker main=false
+frame 1 drawable 4320x2160
+2261.439422 [display callback] handled after 65.6 ms
+2261.468422 [hmd] display ready=false; raw 05 00 01 01 00 3b 00 00 00 0a 27
+2261.468422 headset reports display not ready
+2261.674422 [display callback] id=2 flags=4640 main=true
+frame 300 drawable 4320x2160
+frame 600 drawable 4320x2160
+2271.674422 [display callback] handled after 10000.1 ms
+2271.675422 headset display LOST
+2271.688422 health display=absent submitted=612 presented=12 skipped=600 fps=1.06 presentAge=10.06s GPUms=1.17 GPUerrors=0 IMU=548 lastIMU=0.0s status=1
+2273.677422 recovery: display absent after grace period; resetting DP adapter
+rid 1 recover DRST: 0x00000000, task result: 0x00, bytes: 64
+2273.991422 recovery helper accepted DRST; waiting for display ADD
+2275.184422 [hmd] display ready=false; raw 05 00 01 01 00 00 00 00 00 00 00
+2275.184422 headset reports display not ready
+2276.112422 [display callback] id=2 flags=4378 main=true
+2276.113422 [display callback] handled after 0.3 ms
+2276.113422 headset display back after 4438 ms
+2276.116422 captured display 2: ok
+2276.912422 [display callback] id=2 flags=8 main=true
+2276.913422 mode 4320x2160@90 (ui 4320x2160): ok
+2276.914422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0); dedicated Metal display loop at 90 Hz
+2276.914422 [display callback] handled after 2.4 ms
+frame 900 drawable 4320x2160
+2280.815422 health display=2 submitted=963 presented=357 skipped=602 fps=37.80 presentAge=0.01s GPUms=1.21 GPUerrors=0 IMU=8936 lastIMU=0.0s status=2
+2281.087422 [hmd] display ready=false; raw 05 00 01 01 00 59 00 00 00 07 3b
+2281.087422 headset reports display not ready
+2281.185422 [display callback] id=2 flags=4640 main=true
+2281.817422 [display callback] id=2 flags=4378 main=true
+2281.829422 [display callback] handled after 643.4 ms
+2281.830422 headset display LOST
+2281.830422 [display callback] handled after 13.3 ms
+2281.830422 headset display back after 2 ms
+2281.835422 captured display 2: ok
+2282.518422 [display callback] id=2 flags=8 main=true
+2282.519422 mode 4320x2160@90 (ui 4320x2160): ok
+2282.520422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0); dedicated Metal display loop at 90 Hz
+2282.520422 [display callback] handled after 2.2 ms
+2283.839422 [hmd] display ready=true; raw 05 01 01 01 01 59 00 00 00 07 3b
+frame 1200 drawable 4320x2160
+2286.355422 [display callback] id=2 flags=4640 main=true
+frame 1500 drawable 4320x2160
+frame 1800 drawable 4320x2160
+2296.351422 [display callback] handled after 9995.6 ms
+2296.352422 headset display LOST
+2296.353422 health display=absent submitted=1928 presented=722 skipped=1206 fps=23.49 presentAge=10.05s GPUms=1.24 GPUerrors=0 IMU=13412 lastIMU=0.0s status=4
+2298.354422 recovery: display absent after grace period; resetting DP adapter
+rid 1 recover DRST: 0x00000000, task result: 0x04, bytes: 64
+2298.654422 recovery helper failed (exit 1)
+2299.895422 [hmd] display ready=false; raw 05 00 01 01 00 00 00 00 00 00 00
+2299.896422 headset reports display not ready
+2300.792422 [display callback] id=2 flags=4378 main=true
+2300.792422 [display callback] handled after 0.2 ms
+2300.792422 headset display back after 4441 ms
+2300.795422 captured display 2: ok
+2301.518422 [display callback] id=2 flags=8 main=true
+2301.519422 mode 4320x2160@90 (ui 4320x2160): ok
+2301.524422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0); dedicated Metal display loop at 90 Hz
+2301.524422 [display callback] handled after 6.8 ms
+2301.525422 health display=2 submitted=1928 presented=722 skipped=1206 fps=0.00 presentAge=15.23s GPUms=1.24 GPUerrors=0 IMU=17908 lastIMU=0.0s status=5
+frame 2100 drawable 4320x2160
+2305.797422 [hmd] display ready=false; raw 05 00 01 01 00 59 00 00 00 07 3b
+2305.797422 headset reports display not ready
+2305.892422 [display callback] id=2 flags=4640 main=true
+2306.555422 [display callback] id=2 flags=4378 main=true
+2306.565422 [display callback] handled after 673.3 ms
+2306.567422 headset display LOST
+2306.567422 [display callback] handled after 12.4 ms
+2306.567422 headset display back after 1 ms
+2306.571422 captured display 2: ok
+2307.320422 [display callback] id=2 flags=8 main=true
+2307.321422 mode 4320x2160@90 (ui 4320x2160): ok
+2307.322422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0); dedicated Metal display loop at 90 Hz
+2307.322422 [display callback] handled after 2.1 ms
+frame 2400 drawable 4320x2160
+2308.640422 [hmd] display ready=true; raw 05 01 01 01 01 59 00 00 00 07 3b
+2310.814422 health display=2 submitted=2632 presented=1409 skipped=1219 fps=73.96 presentAge=0.01s GPUms=1.29 GPUerrors=0 IMU=25908 lastIMU=0.0s status=7
+frame 2700 drawable 4320x2160
+frame 3000 drawable 4320x2160
+frame 3300 drawable 4320x2160
+2320.814422 health display=2 submitted=3533 presented=2309 skipped=1220 fps=90.00 presentAge=0.01s GPUms=1.36 GPUerrors=0 IMU=35912 lastIMU=0.0s status=7
+frame 3600 drawable 4320x2160
+frame 3900 drawable 4320x2160
+frame 4200 drawable 4320x2160
+2330.814422 health display=2 submitted=4433 presented=3209 skipped=1220 fps=90.00 presentAge=0.01s GPUms=1.41 GPUerrors=0 IMU=45916 lastIMU=0.0s status=7
+frame 4500 drawable 4320x2160
+frame 4800 drawable 4320x2160
+frame 5100 drawable 4320x2160
+2340.814422 health display=2 submitted=5333 presented=4108 skipped=1220 fps=89.90 presentAge=0.01s GPUms=1.46 GPUerrors=0 IMU=55920 lastIMU=0.0s status=7
+frame 5400 drawable 4320x2160
+frame 5700 drawable 4320x2160
+frame 6000 drawable 4320x2160
+2350.814422 health display=2 submitted=6233 presented=5008 skipped=1220 fps=90.00 presentAge=0.01s GPUms=1.49 GPUerrors=0 IMU=65924 lastIMU=0.0s status=7
+frame 6300 drawable 4320x2160
+frame 6600 drawable 4320x2160
+frame 6900 drawable 4320x2160
+2360.814422 health display=2 submitted=7132 presented=5908 skipped=1220 fps=90.00 presentAge=0.01s GPUms=1.51 GPUerrors=0 IMU=75928 lastIMU=0.0s status=7
+frame 7200 drawable 4320x2160
+frame 7500 drawable 4320x2160
+frame 7800 drawable 4320x2160
+2370.814422 health display=2 submitted=8032 presented=6808 skipped=1220 fps=90.00 presentAge=0.01s GPUms=1.53 GPUerrors=0 IMU=85932 lastIMU=0.0s status=7
+frame 8100 drawable 4320x2160
+frame 8400 drawable 4320x2160
+frame 8700 drawable 4320x2160
+2380.813422 health display=2 submitted=8932 presented=7708 skipped=1220 fps=90.00 presentAge=0.01s GPUms=1.54 GPUerrors=0 IMU=95936 lastIMU=0.0s status=7
+frame 9000 drawable 4320x2160
+frame 9300 drawable 4320x2160
+frame 9600 drawable 4320x2160
+2390.813422 health display=2 submitted=9832 presented=8608 skipped=1220 fps=90.00 presentAge=0.01s GPUms=1.55 GPUerrors=0 IMU=105940 lastIMU=0.0s status=7
+frame 9900 drawable 4320x2160
+frame 10200 drawable 4320x2160
+frame 10500 drawable 4320x2160
+2400.813422 health display=2 submitted=10732 presented=9508 skipped=1220 fps=90.00 presentAge=0.01s GPUms=1.56 GPUerrors=0 IMU=115944 lastIMU=0.0s status=7
+frame 10800 drawable 4320x2160
+2401.764422 [display callback] id=2 flags=4640 main=true
+frame 11100 drawable 4320x2160
+2411.762422 [display callback] handled after 9997.3 ms
+2411.763422 headset display LOST
+2411.764422 health display=absent submitted=11397 presented=9590 skipped=1807 fps=7.49 presentAge=10.06s GPUms=1.54 GPUerrors=0 IMU=117040 lastIMU=0.0s status=7
+2413.765422 recovery: display absent after grace period; resetting DP adapter
+rid 1 recover DRST: 0x00000000, task result: 0x00, bytes: 64
+2414.084422 recovery helper accepted DRST; waiting for display ADD
+2415.272422 [hmd] display ready=false; raw 05 00 01 01 00 00 00 00 00 00 00
+2415.272422 headset reports display not ready
+2416.243422 [display callback] id=2 flags=4378 main=true
+2416.244422 [display callback] handled after 0.3 ms
+2416.244422 headset display back after 4482 ms
+2416.247422 captured display 2: ok
+2416.931422 [display callback] id=2 flags=8 main=true
+2416.961422 mode 4320x2160@90 (ui 4320x2160): ok
+2416.962422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0); dedicated Metal display loop at 90 Hz
+2416.963422 [display callback] handled after 31.4 ms
+frame 11400 drawable 4320x2160
+frame 11700 drawable 4320x2160
+2420.811422 health display=2 submitted=11742 presented=9928 skipped=1810 fps=37.36 presentAge=0.00s GPUms=1.54 GPUerrors=0 IMU=125432 lastIMU=0.0s status=8
+2421.174422 [hmd] display ready=false; raw 05 00 01 01 00 59 00 00 00 07 3b
+2421.174422 headset reports display not ready
+2421.251422 [display callback] id=2 flags=4640 main=true
+2421.902422 [display callback] id=2 flags=4378 main=true
+2421.910422 [display callback] handled after 658.5 ms
+2421.913422 headset display LOST
+2421.913422 [display callback] handled after 10.5 ms
+2421.913422 headset display back after 3 ms
+2421.918422 captured display 2: ok
+2422.554422 [display callback] id=2 flags=8 main=true
+2422.555422 mode 4320x2160@90 (ui 4320x2160): ok
+2422.556422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0); dedicated Metal display loop at 90 Hz
+2422.556422 [display callback] handled after 2.1 ms
+2423.878422 [hmd] display ready=true; raw 05 01 01 01 01 59 00 00 00 07 3b
+frame 12000 drawable 4320x2160
+frame 12300 drawable 4320x2160
+2430.812422 health display=2 submitted=12523 presented=10700 skipped=1820 fps=77.19 presentAge=0.01s GPUms=1.54 GPUerrors=0 IMU=134276 lastIMU=0.0s status=10
+frame 12600 drawable 4320x2160
+frame 12900 drawable 4320x2160
+frame 13200 drawable 4320x2160
+2440.812422 health display=2 submitted=13423 presented=11600 skipped=1820 fps=90.00 presentAge=0.01s GPUms=1.54 GPUerrors=0 IMU=144280 lastIMU=0.0s status=10
+frame 13500 drawable 4320x2160
+frame 13800 drawable 4320x2160
+frame 14100 drawable 4320x2160
+2450.812422 health display=2 submitted=14323 presented=12500 skipped=1820 fps=90.00 presentAge=0.01s GPUms=1.55 GPUerrors=0 IMU=154284 lastIMU=0.0s status=10
+frame 14400 drawable 4320x2160
+frame 14700 drawable 4320x2160
+frame 15000 drawable 4320x2160
+2460.811422 health display=2 submitted=15223 presented=13400 skipped=1820 fps=90.00 presentAge=0.01s GPUms=1.55 GPUerrors=0 IMU=164288 lastIMU=0.0s status=10
+frame 15300 drawable 4320x2160
+frame 15600 drawable 4320x2160
+frame 15900 drawable 4320x2160
+2470.811422 health display=2 submitted=16123 presented=14300 skipped=1820 fps=90.00 presentAge=0.01s GPUms=1.56 GPUerrors=0 IMU=174292 lastIMU=0.0s status=10
+frame 16200 drawable 4320x2160
+frame 16500 drawable 4320x2160
+frame 16800 drawable 4320x2160
+2480.811422 health display=2 submitted=17023 presented=15200 skipped=1820 fps=90.00 presentAge=0.01s GPUms=1.55 GPUerrors=0 IMU=184296 lastIMU=0.0s status=10
+frame 17100 drawable 4320x2160
+frame 17400 drawable 4320x2160
+frame 17700 drawable 4320x2160
+2490.811422 health display=2 submitted=17923 presented=16100 skipped=1820 fps=90.00 presentAge=0.01s GPUms=1.55 GPUerrors=0 IMU=194300 lastIMU=0.0s status=10
+frame 18000 drawable 4320x2160
+frame 18300 drawable 4320x2160
+frame 18600 drawable 4320x2160
+2500.811422 health display=2 submitted=18823 presented=17000 skipped=1820 fps=90.00 presentAge=0.01s GPUms=1.56 GPUerrors=0 IMU=204304 lastIMU=0.0s status=10
+frame 18900 drawable 4320x2160
+frame 19200 drawable 4320x2160
+frame 19500 drawable 4320x2160
+2510.811422 health display=2 submitted=19723 presented=17900 skipped=1820 fps=90.00 presentAge=0.01s GPUms=1.57 GPUerrors=0 IMU=214312 lastIMU=0.0s status=10
+frame 19800 drawable 4320x2160
+frame 20100 drawable 4320x2160
+frame 20400 drawable 4320x2160
+2520.811422 health display=2 submitted=20623 presented=18800 skipped=1820 fps=90.00 presentAge=0.01s GPUms=1.57 GPUerrors=0 IMU=224316 lastIMU=0.0s status=10
+frame 20700 drawable 4320x2160
+frame 21000 drawable 4320x2160
+frame 21300 drawable 4320x2160
+2530.811422 health display=2 submitted=21523 presented=19700 skipped=1820 fps=90.00 presentAge=0.01s GPUms=1.58 GPUerrors=0 IMU=234320 lastIMU=0.0s status=10
+frame 21600 drawable 4320x2160
+frame 21900 drawable 4320x2160
+frame 22200 drawable 4320x2160
+2540.811422 health display=2 submitted=22423 presented=20600 skipped=1820 fps=90.00 presentAge=0.01s GPUms=1.58 GPUerrors=0 IMU=244324 lastIMU=0.0s status=10
+frame 22500 drawable 4320x2160
+frame 22800 drawable 4320x2160
+frame 23100 drawable 4320x2160
+2550.811422 health display=2 submitted=23323 presented=21500 skipped=1820 fps=90.00 presentAge=0.01s GPUms=1.58 GPUerrors=0 IMU=254328 lastIMU=0.0s status=10
+frame 23400 drawable 4320x2160
+frame 23700 drawable 4320x2160
+frame 24000 drawable 4320x2160
+2560.815422 health display=2 submitted=24223 presented=22400 skipped=1820 fps=90.01 presentAge=0.01s GPUms=1.57 GPUerrors=0 IMU=264332 lastIMU=0.0s status=10
+frame 24300 drawable 4320x2160
+frame 24600 drawable 4320x2160
+frame 24900 drawable 4320x2160
+2570.818422 health display=2 submitted=25123 presented=23300 skipped=1820 fps=90.00 presentAge=0.01s GPUms=1.56 GPUerrors=0 IMU=274336 lastIMU=0.0s status=10
+frame 25200 drawable 4320x2160
+frame 25500 drawable 4320x2160
+frame 25800 drawable 4320x2160
+2580.820422 health display=2 submitted=26023 presented=24200 skipped=1820 fps=90.00 presentAge=0.01s GPUms=1.55 GPUerrors=0 IMU=284340 lastIMU=0.0s status=10
+frame 26100 drawable 4320x2160
+frame 26400 drawable 4320x2160
+frame 26700 drawable 4320x2160
+2590.821422 health display=2 submitted=26923 presented=25100 skipped=1820 fps=90.00 presentAge=0.01s GPUms=1.55 GPUerrors=0 IMU=294344 lastIMU=0.0s status=10
+frame 27000 drawable 4320x2160
+frame 27300 drawable 4320x2160
+frame 27600 drawable 4320x2160
+2600.821422 health display=2 submitted=27823 presented=26000 skipped=1820 fps=90.00 presentAge=0.01s GPUms=1.54 GPUerrors=0 IMU=304348 lastIMU=0.0s status=10
+frame 27900 drawable 4320x2160
+frame 28200 drawable 4320x2160
+frame 28500 drawable 4320x2160
+2610.821422 health display=2 submitted=28723 presented=26900 skipped=1820 fps=90.00 presentAge=0.01s GPUms=1.54 GPUerrors=0 IMU=314352 lastIMU=0.0s status=10
+frame 28800 drawable 4320x2160
+frame 29100 drawable 4320x2160
+frame 29400 drawable 4320x2160
+2620.822422 health display=2 submitted=29623 presented=27798 skipped=1821 fps=89.80 presentAge=0.01s GPUms=1.53 GPUerrors=0 IMU=324356 lastIMU=0.0s status=10
+frame 29700 drawable 4320x2160
+frame 30000 drawable 4320x2160
+frame 30300 drawable 4320x2160
+2630.822422 health display=2 submitted=30523 presented=28698 skipped=1821 fps=90.00 presentAge=0.01s GPUms=1.53 GPUerrors=0 IMU=334360 lastIMU=0.0s status=10
+frame 30600 drawable 4320x2160
+frame 30900 drawable 4320x2160
+frame 31200 drawable 4320x2160
+2640.822422 health display=2 submitted=31423 presented=29598 skipped=1821 fps=90.00 presentAge=0.01s GPUms=1.53 GPUerrors=0 IMU=344364 lastIMU=0.0s status=10
+frame 31500 drawable 4320x2160
+frame 31800 drawable 4320x2160
+frame 32100 drawable 4320x2160
+2650.822422 health display=2 submitted=32323 presented=30498 skipped=1821 fps=90.00 presentAge=0.01s GPUms=1.52 GPUerrors=0 IMU=354368 lastIMU=0.0s status=10
+frame 32400 drawable 4320x2160
+frame 32700 drawable 4320x2160
+frame 33000 drawable 4320x2160
+2660.822422 health display=2 submitted=33223 presented=31398 skipped=1821 fps=90.00 presentAge=0.01s GPUms=1.51 GPUerrors=0 IMU=364372 lastIMU=0.0s status=10
+frame 33300 drawable 4320x2160
+frame 33600 drawable 4320x2160
+frame 33900 drawable 4320x2160
+2670.822422 health display=2 submitted=34123 presented=32298 skipped=1821 fps=90.00 presentAge=0.01s GPUms=1.51 GPUerrors=0 IMU=374376 lastIMU=0.0s status=10
+frame 34200 drawable 4320x2160
+frame 34500 drawable 4320x2160
+frame 34800 drawable 4320x2160
+2680.822422 health display=2 submitted=35023 presented=33198 skipped=1821 fps=90.00 presentAge=0.01s GPUms=1.50 GPUerrors=0 IMU=384380 lastIMU=0.0s status=10
+frame 35100 drawable 4320x2160
+frame 35400 drawable 4320x2160
+frame 35700 drawable 4320x2160
+2690.821422 health display=2 submitted=35923 presented=34098 skipped=1821 fps=90.00 presentAge=0.01s GPUms=1.50 GPUerrors=0 IMU=394384 lastIMU=0.0s status=10
+frame 36000 drawable 4320x2160
+frame 36300 drawable 4320x2160
+frame 36600 drawable 4320x2160
+2700.821422 health display=2 submitted=36823 presented=34998 skipped=1821 fps=90.00 presentAge=0.01s GPUms=1.49 GPUerrors=0 IMU=404388 lastIMU=0.0s status=10
+frame 36900 drawable 4320x2160
+frame 37200 drawable 4320x2160
+frame 37500 drawable 4320x2160
+2710.821422 health display=2 submitted=37723 presented=35898 skipped=1821 fps=90.00 presentAge=0.01s GPUms=1.50 GPUerrors=0 IMU=414392 lastIMU=0.0s status=10
+frame 37800 drawable 4320x2160
+frame 38100 drawable 4320x2160
+frame 38400 drawable 4320x2160
+2720.821422 health display=2 submitted=38623 presented=36798 skipped=1821 fps=90.00 presentAge=0.01s GPUms=1.50 GPUerrors=0 IMU=424396 lastIMU=0.0s status=10
+frame 38700 drawable 4320x2160
+frame 39000 drawable 4320x2160
+frame 39300 drawable 4320x2160
+2730.821422 health display=2 submitted=39523 presented=37696 skipped=1823 fps=89.80 presentAge=0.01s GPUms=1.50 GPUerrors=0 IMU=434396 lastIMU=0.0s status=10
+frame 39600 drawable 4320x2160
+frame 39900 drawable 4320x2160
+frame 40200 drawable 4320x2160
+2740.821422 health display=2 submitted=40423 presented=38595 skipped=1825 fps=89.90 presentAge=0.01s GPUms=1.50 GPUerrors=0 IMU=444400 lastIMU=0.0s status=10
+frame 40500 drawable 4320x2160
+frame 40800 drawable 4320x2160
+frame 41100 drawable 4320x2160
+2750.821422 health display=2 submitted=41323 presented=39495 skipped=1825 fps=90.00 presentAge=0.01s GPUms=1.51 GPUerrors=0 IMU=454404 lastIMU=0.0s status=10
+frame 41400 drawable 4320x2160
+frame 41700 drawable 4320x2160
+frame 42000 drawable 4320x2160
+2760.819422 health display=2 submitted=42223 presented=40394 skipped=1825 fps=89.91 presentAge=0.00s GPUms=1.51 GPUerrors=0 IMU=464408 lastIMU=0.0s status=10
+frame 42300 drawable 4320x2160
+frame 42600 drawable 4320x2160
+frame 42900 drawable 4320x2160
+2770.821422 health display=2 submitted=43123 presented=41294 skipped=1826 fps=89.99 presentAge=0.01s GPUms=1.51 GPUerrors=0 IMU=474412 lastIMU=0.0s status=10
+frame 43200 drawable 4320x2160
+frame 43500 drawable 4320x2160
+frame 43800 drawable 4320x2160
+2780.821422 health display=2 submitted=44023 presented=42193 skipped=1826 fps=89.90 presentAge=0.01s GPUms=1.51 GPUerrors=0 IMU=484416 lastIMU=0.0s status=10
+frame 44100 drawable 4320x2160
+frame 44400 drawable 4320x2160
+frame 44700 drawable 4320x2160
+2790.821422 health display=2 submitted=44923 presented=43093 skipped=1826 fps=90.00 presentAge=0.01s GPUms=1.51 GPUerrors=0 IMU=494420 lastIMU=0.0s status=10
+frame 45000 drawable 4320x2160
+frame 45300 drawable 4320x2160
+frame 45600 drawable 4320x2160
+2800.821422 health display=2 submitted=45823 presented=43993 skipped=1826 fps=90.00 presentAge=0.01s GPUms=1.51 GPUerrors=0 IMU=504424 lastIMU=0.0s status=10
+frame 45900 drawable 4320x2160
+frame 46200 drawable 4320x2160
+frame 46500 drawable 4320x2160
+2810.820422 health display=2 submitted=46723 presented=44893 skipped=1826 fps=90.00 presentAge=0.01s GPUms=1.51 GPUerrors=0 IMU=514428 lastIMU=0.0s status=10
+frame 46800 drawable 4320x2160
+frame 47100 drawable 4320x2160
+frame 47400 drawable 4320x2160
+2820.820422 health display=2 submitted=47623 presented=45793 skipped=1826 fps=90.00 presentAge=0.01s GPUms=1.51 GPUerrors=0 IMU=524432 lastIMU=0.0s status=10
+frame 47700 drawable 4320x2160
+frame 48000 drawable 4320x2160
+frame 48300 drawable 4320x2160
+2830.820422 health display=2 submitted=48523 presented=46693 skipped=1826 fps=90.00 presentAge=0.00s GPUms=1.51 GPUerrors=0 IMU=534436 lastIMU=0.0s status=10
+frame 48600 drawable 4320x2160
+frame 48900 drawable 4320x2160
+frame 49200 drawable 4320x2160
+2840.818422 health display=2 submitted=49423 presented=47593 skipped=1826 fps=90.02 presentAge=0.00s GPUms=1.51 GPUerrors=0 IMU=544440 lastIMU=0.0s status=10
+frame 49500 drawable 4320x2160
+frame 49800 drawable 4320x2160
+frame 50100 drawable 4320x2160
diff --git a/evidence/frameclock-first-soak.txt b/evidence/frameclock-first-soak.txt
@@ -0,0 +1,157 @@
+664.608422 [hmd] serial REDACTED-DEVICE-SERIAL
+664.717422 [hmd] wake commands accepted; waiting for IMU and video evidence
+664.728422 captured display 2: ok
+665.258422 mode 4320x2160@90 (ui 4320x2160): ok
+665.279422 headset display link: maximum 90 fps
+665.279422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0)
+665.335422 [hmd] display ready=false; raw 05 00 01 01 00 3b 00 00 00 0a 27
+665.335422 headset reports panel off
+frame 1 drawable (4320.0, 2160.0)
+666.586422 [hmd] display ready=true; raw 05 01 01 01 01 3b 00 00 00 0a 27
+frame 300 drawable (4320.0, 2160.0)
+frame 600 drawable (4320.0, 2160.0)
+674.737422 health display=2 submitted=842 presented=828 fps=78.75 IMU=9568 lastIMU=0.0s status=2
+frame 900 drawable (4320.0, 2160.0)
+frame 1200 drawable (4320.0, 2160.0)
+frame 1500 drawable (4320.0, 2160.0)
+684.737422 health display=2 submitted=1742 presented=839 fps=1.10 IMU=19572 lastIMU=0.0s status=2
+frame 1800 drawable (4320.0, 2160.0)
+frame 2100 drawable (4320.0, 2160.0)
+frame 2400 drawable (4320.0, 2160.0)
+694.737422 health display=2 submitted=2640 presented=1739 fps=90.00 IMU=29580 lastIMU=0.0s status=2
+frame 2700 drawable (4320.0, 2160.0)
+frame 3000 drawable (4320.0, 2160.0)
+frame 3300 drawable (4320.0, 2160.0)
+704.737422 health display=2 submitted=3540 presented=2637 fps=89.80 IMU=39584 lastIMU=0.0s status=2
+frame 3600 drawable (4320.0, 2160.0)
+frame 3900 drawable (4320.0, 2160.0)
+frame 4200 drawable (4320.0, 2160.0)
+714.737422 health display=2 submitted=4440 presented=3537 fps=90.00 IMU=49592 lastIMU=0.0s status=2
+frame 4500 drawable (4320.0, 2160.0)
+frame 4800 drawable (4320.0, 2160.0)
+frame 5100 drawable (4320.0, 2160.0)
+724.736422 health display=2 submitted=5340 presented=4437 fps=90.00 IMU=59596 lastIMU=0.0s status=2
+frame 5400 drawable (4320.0, 2160.0)
+frame 5700 drawable (4320.0, 2160.0)
+frame 6000 drawable (4320.0, 2160.0)
+734.736422 health display=2 submitted=6240 presented=5337 fps=90.00 IMU=69604 lastIMU=0.0s status=2
+frame 6300 drawable (4320.0, 2160.0)
+frame 6600 drawable (4320.0, 2160.0)
+frame 6900 drawable (4320.0, 2160.0)
+744.736422 health display=2 submitted=7140 presented=6237 fps=90.00 IMU=79608 lastIMU=0.0s status=2
+frame 7200 drawable (4320.0, 2160.0)
+frame 7500 drawable (4320.0, 2160.0)
+frame 7800 drawable (4320.0, 2160.0)
+754.736422 health display=2 submitted=8040 presented=7136 fps=89.90 IMU=89612 lastIMU=0.0s status=2
+frame 8100 drawable (4320.0, 2160.0)
+frame 8400 drawable (4320.0, 2160.0)
+frame 8700 drawable (4320.0, 2160.0)
+764.736422 health display=2 submitted=8940 presented=8036 fps=90.00 IMU=99616 lastIMU=0.0s status=2
+frame 9000 drawable (4320.0, 2160.0)
+frame 9300 drawable (4320.0, 2160.0)
+frame 9600 drawable (4320.0, 2160.0)
+774.736422 health display=2 submitted=9840 presented=8936 fps=90.00 IMU=109624 lastIMU=0.0s status=2
+frame 9900 drawable (4320.0, 2160.0)
+frame 10200 drawable (4320.0, 2160.0)
+frame 10500 drawable (4320.0, 2160.0)
+784.736422 health display=2 submitted=10740 presented=9836 fps=90.00 IMU=119628 lastIMU=0.0s status=2
+frame 10800 drawable (4320.0, 2160.0)
+frame 11100 drawable (4320.0, 2160.0)
+frame 11400 drawable (4320.0, 2160.0)
+794.736422 health display=2 submitted=11640 presented=10736 fps=90.00 IMU=129632 lastIMU=0.0s status=2
+frame 11700 drawable (4320.0, 2160.0)
+frame 12000 drawable (4320.0, 2160.0)
+frame 12300 drawable (4320.0, 2160.0)
+804.736422 health display=2 submitted=12540 presented=11636 fps=90.00 IMU=139636 lastIMU=0.0s status=2
+frame 12600 drawable (4320.0, 2160.0)
+frame 12900 drawable (4320.0, 2160.0)
+frame 13200 drawable (4320.0, 2160.0)
+814.736422 health display=2 submitted=13440 presented=12536 fps=90.00 IMU=149644 lastIMU=0.0s status=2
+frame 13500 drawable (4320.0, 2160.0)
+frame 13800 drawable (4320.0, 2160.0)
+frame 14100 drawable (4320.0, 2160.0)
+824.736422 health display=2 submitted=14340 presented=13436 fps=90.00 IMU=159648 lastIMU=0.0s status=2
+frame 14400 drawable (4320.0, 2160.0)
+frame 14700 drawable (4320.0, 2160.0)
+frame 15000 drawable (4320.0, 2160.0)
+834.736422 health display=2 submitted=15240 presented=14336 fps=90.00 IMU=169652 lastIMU=0.0s status=2
+frame 15300 drawable (4320.0, 2160.0)
+frame 15600 drawable (4320.0, 2160.0)
+frame 15900 drawable (4320.0, 2160.0)
+844.736422 health display=2 submitted=16140 presented=15236 fps=90.00 IMU=179656 lastIMU=0.0s status=2
+frame 16200 drawable (4320.0, 2160.0)
+frame 16500 drawable (4320.0, 2160.0)
+frame 16800 drawable (4320.0, 2160.0)
+854.736422 health display=2 submitted=17037 presented=16324 fps=108.79 IMU=189664 lastIMU=0.0s status=2
+frame 17100 drawable (4320.0, 2160.0)
+frame 17400 drawable (4320.0, 2160.0)
+frame 17700 drawable (4320.0, 2160.0)
+864.736422 health display=2 submitted=17937 presented=17033 fps=70.90 IMU=199668 lastIMU=0.0s status=2
+frame 18000 drawable (4320.0, 2160.0)
+frame 18300 drawable (4320.0, 2160.0)
+frame 18600 drawable (4320.0, 2160.0)
+874.736422 health display=2 submitted=18837 presented=17933 fps=90.00 IMU=209676 lastIMU=0.0s status=2
+frame 18900 drawable (4320.0, 2160.0)
+frame 19200 drawable (4320.0, 2160.0)
+frame 19500 drawable (4320.0, 2160.0)
+884.736422 health display=2 submitted=19737 presented=18833 fps=90.00 IMU=219680 lastIMU=0.0s status=2
+frame 19800 drawable (4320.0, 2160.0)
+frame 20100 drawable (4320.0, 2160.0)
+frame 20400 drawable (4320.0, 2160.0)
+894.736422 health display=2 submitted=20637 presented=19733 fps=90.00 IMU=229684 lastIMU=0.0s status=2
+frame 20700 drawable (4320.0, 2160.0)
+frame 21000 drawable (4320.0, 2160.0)
+frame 21300 drawable (4320.0, 2160.0)
+904.735422 health display=2 submitted=21537 presented=20633 fps=90.00 IMU=239688 lastIMU=0.0s status=2
+frame 21600 drawable (4320.0, 2160.0)
+frame 21900 drawable (4320.0, 2160.0)
+frame 22200 drawable (4320.0, 2160.0)
+914.735422 health display=2 submitted=22437 presented=21533 fps=90.00 IMU=249692 lastIMU=0.0s status=2
+frame 22500 drawable (4320.0, 2160.0)
+frame 22800 drawable (4320.0, 2160.0)
+frame 23100 drawable (4320.0, 2160.0)
+924.735422 health display=2 submitted=23337 presented=22433 fps=90.00 IMU=259696 lastIMU=0.0s status=2
+frame 23400 drawable (4320.0, 2160.0)
+frame 23700 drawable (4320.0, 2160.0)
+frame 24000 drawable (4320.0, 2160.0)
+934.735422 health display=2 submitted=24237 presented=23333 fps=90.00 IMU=269704 lastIMU=0.0s status=2
+frame 24300 drawable (4320.0, 2160.0)
+frame 24600 drawable (4320.0, 2160.0)
+frame 24900 drawable (4320.0, 2160.0)
+944.735422 health display=2 submitted=25137 presented=24233 fps=90.00 IMU=279708 lastIMU=0.0s status=2
+frame 25200 drawable (4320.0, 2160.0)
+frame 25500 drawable (4320.0, 2160.0)
+frame 25800 drawable (4320.0, 2160.0)
+954.735422 health display=2 submitted=26037 presented=25133 fps=90.00 IMU=289712 lastIMU=0.0s status=2
+frame 26100 drawable (4320.0, 2160.0)
+frame 26400 drawable (4320.0, 2160.0)
+frame 26700 drawable (4320.0, 2160.0)
+964.735422 health display=2 submitted=26937 presented=26881 fps=174.80 IMU=299716 lastIMU=0.0s status=2
+frame 27000 drawable (4320.0, 2160.0)
+frame 27300 drawable (4320.0, 2160.0)
+frame 27600 drawable (4320.0, 2160.0)
+974.735422 health display=2 submitted=27837 presented=26933 fps=5.20 IMU=309720 lastIMU=0.0s status=2
+frame 27900 drawable (4320.0, 2160.0)
+frame 28200 drawable (4320.0, 2160.0)
+frame 28500 drawable (4320.0, 2160.0)
+984.735422 health display=2 submitted=28737 presented=27833 fps=90.00 IMU=319728 lastIMU=0.0s status=2
+frame 28800 drawable (4320.0, 2160.0)
+frame 29100 drawable (4320.0, 2160.0)
+frame 29400 drawable (4320.0, 2160.0)
+994.735422 health display=2 submitted=29637 presented=28733 fps=90.00 IMU=329732 lastIMU=0.0s status=2
+frame 29700 drawable (4320.0, 2160.0)
+frame 30000 drawable (4320.0, 2160.0)
+frame 30300 drawable (4320.0, 2160.0)
+1004.735422 health display=2 submitted=30537 presented=29633 fps=90.00 IMU=339736 lastIMU=0.0s status=2
+frame 30600 drawable (4320.0, 2160.0)
+frame 30900 drawable (4320.0, 2160.0)
+frame 31200 drawable (4320.0, 2160.0)
+1014.735422 health display=2 submitted=31437 presented=30533 fps=90.00 IMU=349740 lastIMU=0.0s status=2
+frame 31500 drawable (4320.0, 2160.0)
+frame 31800 drawable (4320.0, 2160.0)
+frame 32100 drawable (4320.0, 2160.0)
+1024.724422 health display=2 submitted=32336 presented=31433 fps=90.10 IMU=359732 lastIMU=0.0s status=2
+frame 32400 drawable (4320.0, 2160.0)
+frame 32700 drawable (4320.0, 2160.0)
+frame 33000 drawable (4320.0, 2160.0)
+1034.724422 health display=2 submitted=33236 presented=32332 fps=89.90 IMU=369740 lastIMU=0.0s status=2
diff --git a/evidence/helper-safety-checks.txt b/evidence/helper-safety-checks.txt
@@ -0,0 +1,10 @@
+recovery helper accepted DRST; waiting for display ADD
+recovery helper accepted DRST; waiting for display ADD
+recovery helper accepted DRST; waiting for display ADD
+recovery rate limit: at most 3 resets per minute
+recovery helper exceeded 3s; terminating
+recovery helper failed (exit 9)
+recovery helper missing: run tools/build.sh (expected /tmp/REDACTED-TEST-DIRECTORY)
+recovery: display absent after grace period; resetting DP adapter
+recovery helper accepted DRST; waiting for display ADD
+PASS: three resets/minute; stuck helper stopped in 3.0318520069122314s; missing helper rejected
diff --git a/evidence/lenswarp-gpu-checks.txt b/evidence/lenswarp-gpu-checks.txt
@@ -0,0 +1,2 @@
+PASS: 3750 RGB float-coordinate pairs, max GPU/CPU error 4.573614134084636e-07
+PASS: 1632 RGB channel samples, max GPU/CPU error 0.0041510994889600375; asymmetric projection edges correct
diff --git a/evidence/recovery-callback-release.json b/evidence/recovery-callback-release.json
@@ -0,0 +1,153 @@
+{
+ "started": 2895.146761,
+ "app_recovery": true,
+ "leave_off": true,
+ "commands": [
+ {
+ "started": 2895.1915672,
+ "argv": [
+ "hidcmd",
+ "off"
+ ],
+ "ended": 2895.309618,
+ "code": 0,
+ "stdout": "screen_off 0",
+ "stderr": ""
+ },
+ {
+ "started": 2909.983598,
+ "argv": [
+ "hidcmd",
+ "off"
+ ],
+ "ended": 2910.111507,
+ "code": 0,
+ "stdout": "screen_off 0",
+ "stderr": ""
+ }
+ ],
+ "display_events": [
+ {
+ "received": 2895.1913872,
+ "line": "2895.191422 start: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ },
+ {
+ "received": 2895.368872,
+ "line": "2895.368422 display 2 [REMOVE]: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 2895.368903,
+ "line": "2895.368422 display 1 []: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 2899.972082,
+ "line": "2899.966422 display 2 [ADD,MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 2899.972110,
+ "line": "2899.966422 display 1 []: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 2900.390583,
+ "line": "2900.389422 display 2 [MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ },
+ {
+ "received": 2900.3905988,
+ "line": "2900.389422 display 1 []: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ },
+ {
+ "received": 2904.977834,
+ "line": "2904.977422 display 2 [REMOVE]: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 2904.977854,
+ "line": "2904.977422 display 1 []: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 2905.655492,
+ "line": "2905.654422 display 2 [ADD,MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 2905.655723,
+ "line": "2905.654422 display 1 []: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 2906.082351,
+ "line": "2906.082422 display 2 [MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ },
+ {
+ "received": 2906.082369,
+ "line": "2906.082422 display 1 []: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ },
+ {
+ "received": 2910.205076,
+ "line": "2910.205422 display 2 [REMOVE]: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 2910.2051032,
+ "line": "2910.205422 display 1 []: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 2914.7905011,
+ "line": "2914.790422 display 2 [ADD,MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 2914.7905169,
+ "line": "2914.790422 display 1 []: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 2915.211743,
+ "line": "2915.211422 display 2 [MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ },
+ {
+ "received": 2915.211775,
+ "line": "2915.211422 display 1 []: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ },
+ {
+ "received": 2919.861314,
+ "line": "2919.859422 display 2 [REMOVE]: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 2919.8613381,
+ "line": "2919.859422 display 1 []: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 2920.499697,
+ "line": "2920.499422 display 2 [ADD,MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 2920.499715,
+ "line": "2920.499422 display 1 []: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 2920.929865,
+ "line": "2920.929422 display 2 [MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ },
+ {
+ "received": 2920.929881,
+ "line": "2920.929422 display 1 []: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ }
+ ],
+ "trials": [
+ {
+ "index": 1,
+ "outcome": "recovered_by_app",
+ "seconds": 2.5929999351501465,
+ "outage_seconds": 4.603209972381592,
+ "post_recovery_drops": [
+ 0.6776580810546875
+ ]
+ },
+ {
+ "index": 2,
+ "outcome": "recovered_by_app",
+ "seconds": 2.575688123703003,
+ "outage_seconds": 4.585425138473511,
+ "post_recovery_drops": [
+ 0.6383829116821289
+ ]
+ }
+ ],
+ "result": "passed",
+ "ended": 2924.8016331
+}
diff --git a/evidence/recovery-callback-release.txt b/evidence/recovery-callback-release.txt
@@ -0,0 +1,90 @@
+2889.379422 [hmd] serial REDACTED-DEVICE-SERIAL
+2889.488422 [hmd] wake commands accepted; waiting for IMU and video evidence
+2889.503422 captured display 2: ok
+2890.059422 [display callback] id=2 flags=8 main=true
+2890.060422 mode 4320x2160@90 (ui 4320x2160): ok
+2890.082422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0); dedicated Metal display loop at 90 Hz
+2890.091422 render worker main=false
+frame 1 drawable 4320x2160
+2890.121422 [display callback] handled after 62.5 ms
+2891.388422 [hmd] display ready=true; raw 05 01 01 01 01 59 00 00 00 07 3b
+frame 300 drawable 4320x2160
+2895.378422 [display callback] id=2 flags=4640 main=true
+2895.378422 callback capture release result=1001 duration=0.0ms
+2897.759422 recovery: display absent after grace period; resetting DP adapter
+rid 1 recover DRST: 0x00000000, task result: 0x00, bytes: 64
+2897.816422 recovery helper accepted DRST; waiting for display ADD
+2899.956422 [display callback] id=2 flags=4378 main=true
+2899.967422 [display callback] handled after 4588.6 ms
+2899.968422 headset display LOST
+2899.968422 [display callback] handled after 12.5 ms
+2899.968422 headset display back after 2 ms
+2899.978422 captured display 2: ok
+2900.645422 [display callback] id=2 flags=8 main=true
+2900.647422 mode 4320x2160@90 (ui 4320x2160): ok
+2900.664422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0); dedicated Metal display loop at 90 Hz
+2900.664422 [display callback] handled after 18.9 ms
+2900.665422 [hmd] display ready=false; raw 05 00 01 01 00 00 00 00 00 00 00
+2900.665422 headset reports display not ready
+2900.665422 health display=2 submitted=470 presented=460 skipped=10 fps=39.42 presentAge=5.35s GPUms=1.51 GPUerrors=0 IMU=5548 lastIMU=0.0s status=2
+frame 600 drawable 4320x2160
+2904.913422 [hmd] display ready=false; raw 05 00 01 01 00 59 00 00 00 07 3b
+2904.913422 headset reports display not ready
+2904.997422 [display callback] id=2 flags=4640 main=true
+2904.997422 callback capture release result=1001 duration=0.0ms
+2905.651422 [display callback] id=2 flags=4378 main=true
+2905.662422 [display callback] handled after 664.8 ms
+2905.664422 headset display LOST
+2905.665422 [display callback] handled after 13.4 ms
+2905.665422 headset display back after 3 ms
+2905.670422 captured display 2: ok
+2906.352422 [display callback] id=2 flags=8 main=true
+2906.353422 mode 4320x2160@90 (ui 4320x2160): ok
+2906.354422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0); dedicated Metal display loop at 90 Hz
+2906.354422 [display callback] handled after 2.1 ms
+frame 900 drawable 4320x2160
+2907.672422 [hmd] display ready=true; raw 05 01 01 01 01 59 00 00 00 07 3b
+2909.490422 health display=2 submitted=1139 presented=1113 skipped=22 fps=74.00 presentAge=0.00s GPUms=1.51 GPUerrors=0 IMU=13152 lastIMU=0.0s status=4
+2910.191422 [display callback] id=2 flags=4640 main=true
+2910.191422 callback capture release result=1001 duration=0.0ms
+2912.576422 recovery: display absent after grace period; resetting DP adapter
+rid 1 recover DRST: 0x00000000, task result: 0x04, bytes: 64
+2912.620422 recovery helper failed (exit 1)
+2914.766422 [display callback] id=2 flags=4378 main=true
+2914.766422 [display callback] handled after 4574.9 ms
+2914.771422 headset display LOST
+2914.771422 [display callback] handled after 5.2 ms
+2914.771422 headset display back after 5 ms
+2914.786422 captured display 2: ok
+2915.465422 [display callback] id=2 flags=8 main=true
+2915.482422 mode 4320x2160@90 (ui 4320x2160): ok
+2915.483422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0); dedicated Metal display loop at 90 Hz
+2915.483422 [display callback] handled after 17.7 ms
+2915.484422 [hmd] display ready=false; raw 05 00 01 01 00 00 00 00 00 00 00
+2915.484422 headset reports display not ready
+frame 1200 drawable 4320x2160
+frame 1500 drawable 4320x2160
+2919.491422 health display=2 submitted=1557 presented=1524 skipped=30 fps=41.10 presentAge=0.00s GPUms=1.48 GPUerrors=0 IMU=18004 lastIMU=0.0s status=5
+2919.732422 [hmd] display ready=false; raw 05 00 01 01 00 59 00 00 00 07 3b
+2919.732422 headset reports display not ready
+2919.830422 [display callback] id=2 flags=4640 main=true
+2919.830422 callback capture release result=1001 duration=0.0ms
+2920.486422 [display callback] id=2 flags=4378 main=true
+2920.497422 [display callback] handled after 666.8 ms
+2920.499422 headset display LOST
+2920.499422 [display callback] handled after 12.5 ms
+2920.499422 headset display back after 2 ms
+2920.506422 captured display 2: ok
+2921.176422 [display callback] id=2 flags=8 main=true
+2921.197422 mode 4320x2160@90 (ui 4320x2160): ok
+2921.198422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0); dedicated Metal display loop at 90 Hz
+2921.198422 [display callback] handled after 21.9 ms
+2922.513422 [hmd] display ready=true; raw 05 01 01 01 01 59 00 00 00 07 3b
+frame 1800 drawable 4320x2160
+frame 2100 drawable 4320x2160
+2929.489422 health display=2 submitted=2329 presented=2289 skipped=37 fps=76.51 presentAge=0.00s GPUms=1.44 GPUerrors=0 IMU=26772 lastIMU=0.0s status=7
+frame 2400 drawable 4320x2160
+frame 2700 drawable 4320x2160
+frame 3000 drawable 4320x2160
+2939.490422 health display=2 submitted=3229 presented=3189 skipped=37 fps=89.99 presentAge=0.00s GPUms=1.44 GPUerrors=0 IMU=36776 lastIMU=0.0s status=7
+frame 3300 drawable 4320x2160
diff --git a/evidence/recovery-command-experiments.jsonl b/evidence/recovery-command-experiments.jsonl
@@ -0,0 +1,4 @@
+{"test": "RID1 documented HRST via AppleHPMLib selector 2; no payload", "started": 0.000000, "ended": 0.012585, "exit": 1, "stdout": "rid 1 cmd 'HRST' (0x54535248): 0xe00002c6\n", "stderr": ""}
+{"test": "RID1 HRST via AppleHPMLib selector 2, corrected BE numeric 4CC; no payload", "started": 118.604449, "ended": 118.609843, "exit": 1, "stdout": "", "stderr": "IOCreatePlugInInterfaceForService: 0xe00002be\n"}
+{"test": "RID1 HRST corrected BE 4CC, signed USBCEntitlement, root; no payload", "started": 126.592107, "ended": 126.616425, "exit": 1, "stdout": "rid 1 cmd 'HRST' (0x48525354): 0xe00002c6\n", "stderr": ""}
+{"test": "RID1 DRST corrected BE 4CC, signed USBCEntitlement, root; no payload", "started": 140.8553531, "ended": 140.905904, "exit": 0, "stdout": "rid 1 cmd 'DRST' (0x44525354): 0x00000000\n", "stderr": ""}
diff --git a/evidence/recovery-queue-baseline.json b/evidence/recovery-queue-baseline.json
@@ -0,0 +1,85 @@
+{
+ "started": 2855.479031,
+ "app_recovery": true,
+ "leave_off": true,
+ "commands": [
+ {
+ "started": 2855.522815,
+ "argv": [
+ "hidcmd",
+ "off"
+ ],
+ "ended": 2855.642109,
+ "code": 0,
+ "stdout": "screen_off 0",
+ "stderr": ""
+ }
+ ],
+ "display_events": [
+ {
+ "received": 2855.522652,
+ "line": "2855.522422 start: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ },
+ {
+ "received": 2855.745588,
+ "line": "2855.722422 display 2 [REMOVE]: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 2855.745611,
+ "line": "2855.722422 display 1 []: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 2860.181673,
+ "line": "2860.181422 display 2 [ADD,MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 2860.181697,
+ "line": "2860.181422 display 1 []: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 2860.660794,
+ "line": "2860.660422 display 2 [MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ },
+ {
+ "received": 2860.660811,
+ "line": "2860.660422 display 1 []: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ },
+ {
+ "received": 2865.265085,
+ "line": "2865.265422 display 2 [REMOVE]: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 2865.265116,
+ "line": "2865.265422 display 1 []: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 2865.906528,
+ "line": "2865.906422 display 2 [ADD,MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 2865.906546,
+ "line": "2865.906422 display 1 []: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 2866.338657,
+ "line": "2866.338422 display 2 [MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ },
+ {
+ "received": 2866.338675,
+ "line": "2866.338422 display 1 []: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@90.0"
+ }
+ ],
+ "trials": [
+ {
+ "index": 1,
+ "outcome": "recovered_by_app",
+ "seconds": 2.425560235977173,
+ "outage_seconds": 4.436084985733032,
+ "post_recovery_drops": [
+ 0.6414430141448975
+ ]
+ }
+ ],
+ "result": "passed",
+ "ended": 2870.194270
+}
diff --git a/evidence/recovery-queue-baseline.txt b/evidence/recovery-queue-baseline.txt
@@ -0,0 +1,53 @@
+2849.400422 [hmd] serial REDACTED-DEVICE-SERIAL
+2849.510422 [hmd] wake commands accepted; waiting for IMU and video evidence
+2849.525422 captured display 2: ok
+2850.047422 [display callback] id=2 flags=8 main=true
+2850.048422 mode 4320x2160@90 (ui 4320x2160): ok
+2850.071422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0); dedicated Metal display loop at 90 Hz
+2850.073422 render worker main=false
+frame 1 drawable 4320x2160
+2850.120422 [display callback] handled after 72.7 ms
+2851.387422 [hmd] display ready=true; raw 05 01 01 01 01 59 00 00 00 07 3b
+frame 300 drawable 4320x2160
+2855.733422 [display callback] id=2 flags=4640 main=true
+frame 600 drawable 4320x2160
+2857.994422 recovery: display absent after grace period; resetting DP adapter
+rid 1 recover DRST: 0x00000000, task result: 0x00, bytes: 64
+2858.052422 recovery helper accepted DRST; waiting for display ADD
+2860.185422 [display callback] id=2 flags=4378 main=true
+2860.186422 [display callback] handled after 4452.6 ms
+2860.202422 headset display LOST
+2860.202422 [display callback] handled after 16.8 ms
+2860.202422 headset display back after 16 ms
+2860.210422 captured display 2: ok
+2860.916422 [display callback] id=2 flags=8 main=true
+2860.933422 mode 4320x2160@90 (ui 4320x2160): ok
+2860.936422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0); dedicated Metal display loop at 90 Hz
+2860.936422 [display callback] handled after 20.2 ms
+2860.937422 [hmd] display ready=false; raw 05 00 01 01 00 00 00 00 00 00 00
+2860.937422 headset reports display not ready
+2860.937422 health display=2 submitted=733 presented=491 skipped=242 fps=41.19 presentAge=5.28s GPUms=1.38 GPUerrors=0 IMU=5896 lastIMU=0.0s status=2
+frame 900 drawable 4320x2160
+2865.149422 [hmd] display ready=false; raw 05 00 01 01 00 59 00 00 00 07 3b
+2865.150422 headset reports display not ready
+2865.232422 [display callback] id=2 flags=4640 main=true
+2865.886422 [display callback] id=2 flags=4378 main=true
+2865.897422 [display callback] handled after 665.2 ms
+2865.898422 headset display LOST
+2865.898422 [display callback] handled after 12.9 ms
+2865.898422 headset display back after 2 ms
+2865.903422 captured display 2: ok
+2866.577422 [display callback] id=2 flags=8 main=true
+2866.579422 mode 4320x2160@90 (ui 4320x2160): ok
+2866.579422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0); dedicated Metal display loop at 90 Hz
+2866.580422 [display callback] handled after 2.4 ms
+frame 1200 drawable 4320x2160
+2867.917422 [hmd] display ready=true; raw 05 01 01 01 01 59 00 00 00 07 3b
+2869.511422 health display=2 submitted=1384 presented=1124 skipped=256 fps=73.83 presentAge=0.01s GPUms=1.31 GPUerrors=0 IMU=13260 lastIMU=0.0s status=4
+frame 1500 drawable 4320x2160
+frame 1800 drawable 4320x2160
+frame 2100 drawable 4320x2160
+2879.512422 health display=2 submitted=2284 presented=2023 skipped=257 fps=89.89 presentAge=0.01s GPUms=1.35 GPUerrors=0 IMU=23268 lastIMU=0.0s status=4
+frame 2400 drawable 4320x2160
+frame 2700 drawable 4320x2160
+frame 3000 drawable 4320x2160
diff --git a/evidence/recovery-trials-60hz.json b/evidence/recovery-trials-60hz.json
@@ -0,0 +1,179 @@
+{
+ "started": 316.243972,
+ "commands": [
+ {
+ "started": 316.279667,
+ "argv": [
+ "hidcmd",
+ "off"
+ ],
+ "ended": 316.398487,
+ "code": 0,
+ "stdout": "screen_off 0",
+ "stderr": ""
+ },
+ {
+ "started": 316.489172,
+ "argv": [
+ "hidcmd",
+ "on"
+ ],
+ "ended": 316.761458,
+ "code": 0,
+ "stdout": "screen_on 0",
+ "stderr": ""
+ },
+ {
+ "started": 318.763714,
+ "argv": [
+ "hpmctl",
+ "1",
+ "cmd",
+ "DRST"
+ ],
+ "ended": 318.8245208,
+ "code": 0,
+ "stdout": "rid 1 cmd 'DRST' (0x44525354): 0x00000000",
+ "stderr": ""
+ },
+ {
+ "started": 320.963881,
+ "argv": [
+ "hidcmd",
+ "off"
+ ],
+ "ended": 321.0945191,
+ "code": 0,
+ "stdout": "screen_off 0",
+ "stderr": ""
+ },
+ {
+ "started": 321.201378,
+ "argv": [
+ "hidcmd",
+ "on"
+ ],
+ "ended": 321.5079098,
+ "code": 0,
+ "stdout": "screen_on 0",
+ "stderr": ""
+ },
+ {
+ "started": 323.513095,
+ "argv": [
+ "hpmctl",
+ "1",
+ "cmd",
+ "DRST"
+ ],
+ "ended": 323.5814478,
+ "code": 0,
+ "stdout": "rid 1 cmd 'DRST' (0x44525354): 0x00000000",
+ "stderr": ""
+ },
+ {
+ "started": 325.728066,
+ "argv": [
+ "hidcmd",
+ "off"
+ ],
+ "ended": 325.851420,
+ "code": 0,
+ "stdout": "screen_off 0",
+ "stderr": ""
+ },
+ {
+ "started": 325.9713202,
+ "argv": [
+ "hidcmd",
+ "on"
+ ],
+ "ended": 326.2464519,
+ "code": 0,
+ "stdout": "screen_on 0",
+ "stderr": ""
+ },
+ {
+ "started": 328.251004,
+ "argv": [
+ "hpmctl",
+ "1",
+ "cmd",
+ "DRST"
+ ],
+ "ended": 328.3188632,
+ "code": 0,
+ "stdout": "rid 1 cmd 'DRST' (0x44525354): 0x00000000",
+ "stderr": ""
+ }
+ ],
+ "display_events": [
+ {
+ "received": 316.279466,
+ "line": "316.279422 start: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 316.4890769,
+ "line": "316.488422 display 2 [REMOVE]: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 316.489113,
+ "line": "316.488422 display 1 []: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 320.963742,
+ "line": "320.963422 display 2 [ADD,MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 320.963765,
+ "line": "320.963422 display 1 []: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 321.200157,
+ "line": "321.199422 display 2 [REMOVE]: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 321.200182,
+ "line": "321.199422 display 1 []: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 325.727902,
+ "line": "325.727422 display 2 [ADD,MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 325.7279239,
+ "line": "325.727422 display 1 []: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ },
+ {
+ "received": 325.971217,
+ "line": "325.971422 display 2 [REMOVE]: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 325.9712398,
+ "line": "325.971422 display 1 []: 1:1552 2560x1600@60.0"
+ },
+ {
+ "received": 330.464015,
+ "line": "330.463422 display 2 [ADD,MODE]: 1:1552 2560x1600@60.0 | 2:8718 4320x2160@60.0"
+ }
+ ],
+ "trials": [
+ {
+ "index": 1,
+ "outcome": "recovered_after_DRST",
+ "seconds": 2.2000279426574707
+ },
+ {
+ "index": 2,
+ "outcome": "recovered_after_DRST",
+ "seconds": 2.2148070335388184
+ },
+ {
+ "index": 3,
+ "outcome": "recovered_after_DRST",
+ "seconds": 2.2130110263824463
+ }
+ ],
+ "result": "passed",
+ "ended": 330.465476
+}
diff --git a/evidence/soak-before-teardown-fix.txt b/evidence/soak-before-teardown-fix.txt
@@ -0,0 +1,66 @@
+1943.028422 [hmd] serial REDACTED-DEVICE-SERIAL
+1943.136422 [hmd] wake commands accepted; waiting for IMU and video evidence
+1943.150422 captured display 2: ok
+1943.675422 [display callback] id=2 flags=8 main=true
+1943.676422 mode 4320x2160@90 (ui 4320x2160): ok
+1943.697422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0); dedicated Metal display loop at 90 Hz
+1943.707422 render worker main=false
+frame 1 drawable 4320x2160
+1943.740422 [display callback] handled after 65.1 ms
+1943.755422 [hmd] display ready=false; raw 05 00 01 01 00 3b 00 00 00 0a 27
+1943.755422 headset reports display not ready
+1945.006422 [hmd] display ready=true; raw 05 01 01 01 01 3b 00 00 00 0a 27
+frame 300 drawable 4320x2160
+frame 600 drawable 4320x2160
+1953.139422 health display=2 submitted=847 presented=839 skipped=4 fps=79.95 presentAge=0.00s GPUms=1.47 GPUerrors=0 IMU=9560 lastIMU=0.0s status=2
+frame 900 drawable 4320x2160
+frame 1200 drawable 4320x2160
+frame 1500 drawable 4320x2160
+1963.138422 health display=2 submitted=1747 presented=1739 skipped=5 fps=90.00 presentAge=0.00s GPUms=1.52 GPUerrors=0 IMU=19564 lastIMU=0.0s status=2
+frame 1800 drawable 4320x2160
+frame 2100 drawable 4320x2160
+frame 2400 drawable 4320x2160
+1973.138422 health display=2 submitted=2647 presented=2639 skipped=5 fps=90.00 presentAge=0.00s GPUms=1.56 GPUerrors=0 IMU=29568 lastIMU=0.0s status=2
+frame 2700 drawable 4320x2160
+frame 3000 drawable 4320x2160
+frame 3300 drawable 4320x2160
+1983.137422 health display=2 submitted=3547 presented=3539 skipped=5 fps=90.01 presentAge=0.00s GPUms=1.60 GPUerrors=0 IMU=39572 lastIMU=0.0s status=2
+frame 3600 drawable 4320x2160
+frame 3900 drawable 4320x2160
+frame 4200 drawable 4320x2160
+1993.138422 health display=2 submitted=4447 presented=4439 skipped=5 fps=89.99 presentAge=0.00s GPUms=1.61 GPUerrors=0 IMU=49576 lastIMU=0.0s status=2
+frame 4500 drawable 4320x2160
+frame 4800 drawable 4320x2160
+frame 5100 drawable 4320x2160
+2003.137422 health display=2 submitted=5347 presented=5339 skipped=5 fps=90.01 presentAge=0.00s GPUms=1.61 GPUerrors=0 IMU=59580 lastIMU=0.0s status=2
+frame 5400 drawable 4320x2160
+frame 5700 drawable 4320x2160
+frame 6000 drawable 4320x2160
+2013.138422 health display=2 submitted=6247 presented=6239 skipped=5 fps=89.99 presentAge=0.00s GPUms=1.61 GPUerrors=0 IMU=69588 lastIMU=0.0s status=2
+frame 6300 drawable 4320x2160
+frame 6600 drawable 4320x2160
+frame 6900 drawable 4320x2160
+2023.138422 health display=2 submitted=7147 presented=7139 skipped=5 fps=90.00 presentAge=0.00s GPUms=1.62 GPUerrors=0 IMU=79592 lastIMU=0.0s status=2
+frame 7200 drawable 4320x2160
+frame 7500 drawable 4320x2160
+frame 7800 drawable 4320x2160
+2033.138422 health display=2 submitted=8047 presented=8039 skipped=5 fps=90.00 presentAge=0.00s GPUms=1.63 GPUerrors=0 IMU=89596 lastIMU=0.0s status=2
+frame 8100 drawable 4320x2160
+frame 8400 drawable 4320x2160
+frame 8700 drawable 4320x2160
+2043.137422 health display=2 submitted=8947 presented=8939 skipped=5 fps=90.01 presentAge=0.00s GPUms=1.63 GPUerrors=0 IMU=99596 lastIMU=0.0s status=2
+frame 9000 drawable 4320x2160
+frame 9300 drawable 4320x2160
+frame 9600 drawable 4320x2160
+2053.137422 health display=2 submitted=9847 presented=9839 skipped=5 fps=89.99 presentAge=0.00s GPUms=1.62 GPUerrors=0 IMU=109604 lastIMU=0.0s status=2
+frame 9900 drawable 4320x2160
+frame 10200 drawable 4320x2160
+frame 10500 drawable 4320x2160
+2063.137422 health display=2 submitted=10747 presented=10739 skipped=5 fps=90.00 presentAge=0.00s GPUms=1.60 GPUerrors=0 IMU=119608 lastIMU=0.0s status=2
+frame 10800 drawable 4320x2160
+frame 11100 drawable 4320x2160
+frame 11400 drawable 4320x2160
+2073.135422 health display=2 submitted=11647 presented=11639 skipped=5 fps=90.02 presentAge=0.00s GPUms=1.59 GPUerrors=0 IMU=129608 lastIMU=0.0s status=2
+frame 11700 drawable 4320x2160
+frame 12000 drawable 4320x2160
+frame 12300 drawable 4320x2160
diff --git a/evidence/soak-main-thread-stall.txt b/evidence/soak-main-thread-stall.txt
@@ -0,0 +1,143 @@
+1403.862422 [hmd] serial REDACTED-DEVICE-SERIAL
+1404.123422 [hmd] wake commands accepted; waiting for IMU and video evidence
+1404.123422 waiting for the headset display...
+1404.720422 [hmd] display ready=false; raw 05 00 01 01 00 00 00 00 00 00 00
+1404.720422 headset reports display not ready
+1406.124422 recovery: display absent after grace period; resetting DP adapter
+rid 1 recover DRST: 0x00000000, task result: 0x00, bytes: 64
+1406.292422 recovery helper accepted DRST; waiting for display ADD
+1407.503422 [hmd] display ready=false; raw 05 00 01 01 00 00 00 00 00 00 00
+1407.503422 headset reports display not ready
+1408.481422 [display callback] id=2 flags=4378 main=true
+1408.482422 [display callback] handled after 0.7 ms
+1408.490422 captured display 2: ok
+1409.160422 [display callback] id=2 flags=8 main=true
+1409.180422 mode 4320x2160@90 (ui 4320x2160): ok
+1409.186422 headset display link: maximum 90 fps
+1409.186422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0)
+1409.187422 headset display link: maximum 90 fps
+1409.187422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0)
+1409.188422 [display callback] handled after 28.0 ms
+1409.188422 headset display link: maximum 90 fps
+1409.188422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0)
+frame 1 drawable (4320.0, 2160.0)
+frame 300 drawable (4320.0, 2160.0)
+1413.405422 [hmd] display ready=false; raw 05 00 01 01 00 59 00 00 00 07 3b
+1413.405422 headset reports display not ready
+1414.450422 drawable acquisition stalled 1001.5 ms
+1414.452422 health display=2 submitted=385 presented=377 skipped=6 fps=34.36 presentAge=1.03s GPUms=1.54 GPUerrors=0 IMU=9052 lastIMU=0.0s status=3
+1424.457422 [display callback] id=2 flags=4922 main=true
+1424.459422 [display callback] handled after 1.7 ms
+1424.473422 headset display LOST
+1424.473422 headset display back after 14 ms
+1424.480422 captured display 2: ok
+1425.023422 [display callback] id=2 flags=8 main=true
+1425.039422 mode 4320x2160@90 (ui 4320x2160): ok
+1425.040422 headset display link: maximum 90 fps
+1425.040422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0)
+1425.040422 headset display link: maximum 90 fps
+1425.040422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0)
+1425.041422 [display callback] handled after 17.8 ms
+1425.041422 headset display link: maximum 90 fps
+1425.041422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0)
+1425.042422 health display=2 submitted=385 presented=377 skipped=8 fps=0.00 presentAge=11.62s GPUms=1.54 GPUerrors=0 IMU=9212 lastIMU=0.0s status=3
+1425.043422 [hmd] display ready=true; raw 05 01 01 01 01 59 00 00 00 07 3b
+1425.043422 [hmd] display ready=false; raw 05 00 01 01 00 3b 00 00 00 0a 27
+1425.043422 headset reports display not ready
+frame 600 drawable (4320.0, 2160.0)
+1430.735422 [hmd] display ready=false; raw 05 00 01 01 00 3b 00 00 00 0a 27
+1430.735422 headset reports display not ready
+frame 900 drawable (4320.0, 2160.0)
+1431.710422 drawable acquisition stalled 932.4 ms
+1433.203422 [hmd] display ready=true; raw 05 01 01 01 01 3b 00 00 00 0a 27
+1433.311422 [display callback] id=2 flags=4922 main=true
+1433.313422 [display callback] handled after 2.3 ms
+1433.314422 headset display LOST
+1433.314422 headset display back after 1 ms
+1433.317422 captured display 2: ok
+1433.860422 [display callback] id=2 flags=8 main=true
+1433.870422 mode 4320x2160@90 (ui 4320x2160): ok
+1433.871422 headset display link: maximum 90 fps
+1433.871422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0)
+1433.872422 headset display link: maximum 90 fps
+1433.872422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0)
+1433.873422 [display callback] handled after 12.5 ms
+1433.873422 headset display link: maximum 90 fps
+1433.873422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0)
+1433.877422 [hmd] display ready=false; raw 05 00 01 01 00 3b 00 00 00 0a 27
+1433.877422 headset reports display not ready
+1434.124422 health display=2 submitted=1019 presented=1000 skipped=16 fps=68.60 presentAge=0.01s GPUms=1.72 GPUerrors=0 IMU=17096 lastIMU=0.0s status=8
+1435.201422 [hmd] display ready=true; raw 05 01 01 01 01 3b 00 00 00 0a 27
+frame 1200 drawable (4320.0, 2160.0)
+frame 1500 drawable (4320.0, 2160.0)
+frame 1800 drawable (4320.0, 2160.0)
+1444.124422 health display=2 submitted=1919 presented=1900 skipped=16 fps=90.00 presentAge=0.01s GPUms=1.78 GPUerrors=0 IMU=27100 lastIMU=0.0s status=9
+frame 2100 drawable (4320.0, 2160.0)
+frame 2400 drawable (4320.0, 2160.0)
+frame 2700 drawable (4320.0, 2160.0)
+1454.124422 health display=2 submitted=2819 presented=2800 skipped=16 fps=90.00 presentAge=0.01s GPUms=1.82 GPUerrors=0 IMU=37104 lastIMU=0.0s status=9
+frame 3000 drawable (4320.0, 2160.0)
+frame 3300 drawable (4320.0, 2160.0)
+frame 3600 drawable (4320.0, 2160.0)
+1464.124422 health display=2 submitted=3719 presented=3700 skipped=16 fps=90.00 presentAge=0.01s GPUms=1.83 GPUerrors=0 IMU=47108 lastIMU=0.0s status=9
+frame 3900 drawable (4320.0, 2160.0)
+frame 4200 drawable (4320.0, 2160.0)
+frame 4500 drawable (4320.0, 2160.0)
+1474.124422 health display=2 submitted=4619 presented=4600 skipped=16 fps=90.00 presentAge=0.01s GPUms=1.84 GPUerrors=0 IMU=57116 lastIMU=0.0s status=9
+frame 4800 drawable (4320.0, 2160.0)
+frame 5100 drawable (4320.0, 2160.0)
+frame 5400 drawable (4320.0, 2160.0)
+1484.123422 health display=2 submitted=5519 presented=5499 skipped=16 fps=89.90 presentAge=0.01s GPUms=1.84 GPUerrors=0 IMU=67120 lastIMU=0.0s status=9
+frame 5700 drawable (4320.0, 2160.0)
+frame 6000 drawable (4320.0, 2160.0)
+frame 6300 drawable (4320.0, 2160.0)
+1494.123422 health display=2 submitted=6419 presented=6399 skipped=16 fps=90.00 presentAge=0.01s GPUms=1.85 GPUerrors=0 IMU=77124 lastIMU=0.0s status=9
+frame 6600 drawable (4320.0, 2160.0)
+frame 6900 drawable (4320.0, 2160.0)
+frame 7200 drawable (4320.0, 2160.0)
+1504.123422 health display=2 submitted=7319 presented=7299 skipped=16 fps=90.00 presentAge=0.01s GPUms=1.85 GPUerrors=0 IMU=87128 lastIMU=0.0s status=9
+frame 7500 drawable (4320.0, 2160.0)
+frame 7800 drawable (4320.0, 2160.0)
+frame 8100 drawable (4320.0, 2160.0)
+1514.123422 health display=2 submitted=8219 presented=8199 skipped=16 fps=90.00 presentAge=0.01s GPUms=1.85 GPUerrors=0 IMU=97132 lastIMU=0.0s status=9
+frame 8400 drawable (4320.0, 2160.0)
+frame 8700 drawable (4320.0, 2160.0)
+frame 9000 drawable (4320.0, 2160.0)
+1524.122422 health display=2 submitted=9119 presented=9099 skipped=16 fps=90.01 presentAge=0.00s GPUms=1.85 GPUerrors=0 IMU=107136 lastIMU=0.0s status=9
+frame 9300 drawable (4320.0, 2160.0)
+frame 9600 drawable (4320.0, 2160.0)
+frame 9900 drawable (4320.0, 2160.0)
+1534.123422 health display=2 submitted=10019 presented=9999 skipped=16 fps=89.99 presentAge=0.01s GPUms=1.85 GPUerrors=0 IMU=117140 lastIMU=0.0s status=9
+frame 10200 drawable (4320.0, 2160.0)
+frame 10500 drawable (4320.0, 2160.0)
+frame 10800 drawable (4320.0, 2160.0)
+1544.123422 health display=2 submitted=10919 presented=10899 skipped=16 fps=90.00 presentAge=0.00s GPUms=1.85 GPUerrors=0 IMU=127144 lastIMU=0.0s status=9
+frame 11100 drawable (4320.0, 2160.0)
+frame 11400 drawable (4320.0, 2160.0)
+frame 11700 drawable (4320.0, 2160.0)
+1554.123422 health display=2 submitted=11819 presented=11799 skipped=16 fps=90.00 presentAge=0.00s GPUms=1.85 GPUerrors=0 IMU=137148 lastIMU=0.0s status=9
+frame 12000 drawable (4320.0, 2160.0)
+frame 12300 drawable (4320.0, 2160.0)
+frame 12600 drawable (4320.0, 2160.0)
+1564.122422 health display=2 submitted=12719 presented=12699 skipped=16 fps=90.00 presentAge=0.00s GPUms=1.85 GPUerrors=0 IMU=147152 lastIMU=0.0s status=9
+frame 12900 drawable (4320.0, 2160.0)
+frame 13200 drawable (4320.0, 2160.0)
+frame 13500 drawable (4320.0, 2160.0)
+1574.122422 health display=2 submitted=13619 presented=13599 skipped=16 fps=90.00 presentAge=0.00s GPUms=1.85 GPUerrors=0 IMU=157160 lastIMU=0.0s status=9
+frame 13800 drawable (4320.0, 2160.0)
+frame 14100 drawable (4320.0, 2160.0)
+frame 14400 drawable (4320.0, 2160.0)
+1584.122422 health display=2 submitted=14519 presented=14499 skipped=16 fps=90.00 presentAge=0.00s GPUms=1.85 GPUerrors=0 IMU=167164 lastIMU=0.0s status=9
+frame 14700 drawable (4320.0, 2160.0)
+frame 15000 drawable (4320.0, 2160.0)
+frame 15300 drawable (4320.0, 2160.0)
+1594.122422 health display=2 submitted=15419 presented=15399 skipped=16 fps=90.00 presentAge=0.00s GPUms=1.85 GPUerrors=0 IMU=177168 lastIMU=0.0s status=9
+frame 15600 drawable (4320.0, 2160.0)
+frame 15900 drawable (4320.0, 2160.0)
+frame 16200 drawable (4320.0, 2160.0)
+1604.121422 health display=2 submitted=16319 presented=16299 skipped=16 fps=90.00 presentAge=0.00s GPUms=1.85 GPUerrors=0 IMU=187172 lastIMU=0.0s status=9
+frame 16500 drawable (4320.0, 2160.0)
+frame 16800 drawable (4320.0, 2160.0)
+frame 17100 drawable (4320.0, 2160.0)
+1614.122422 health display=2 submitted=17219 presented=17199 skipped=16 fps=90.00 presentAge=0.00s GPUms=1.85 GPUerrors=0 IMU=197176 lastIMU=0.0s status=9
+frame 17400 drawable (4320.0, 2160.0)
diff --git a/evidence/startup-render-worker-fixed.json b/evidence/startup-render-worker-fixed.json
@@ -0,0 +1,8 @@
+{
+ "started": 1865.988883,
+ "purpose": "dedicated Metal render loop with display-link-managed presentation",
+ "off": "screen_off 0",
+ "ended": 1902.2857652,
+ "exit": -11,
+ "log": "evidence/startup-render-worker-fixed.txt"
+}
diff --git a/evidence/startup-render-worker-fixed.txt b/evidence/startup-render-worker-fixed.txt
@@ -0,0 +1,44 @@
+1866.994422 [hmd] serial REDACTED-DEVICE-SERIAL
+1867.253422 [hmd] wake commands accepted; waiting for IMU and video evidence
+1867.255422 waiting for the headset display...
+1867.850422 [hmd] display ready=false; raw 05 00 01 01 00 00 00 00 00 00 00
+1867.850422 headset reports display not ready
+1869.256422 recovery: display absent after grace period; resetting DP adapter
+rid 1 recover DRST: 0x00000000, task result: 0x00, bytes: 64
+1869.419422 recovery helper accepted DRST; waiting for display ADD
+1870.630422 [hmd] display ready=false; raw 05 00 01 01 00 00 00 00 00 00 00
+1870.630422 headset reports display not ready
+1871.583422 [display callback] id=2 flags=4378 main=true
+1871.584422 [display callback] handled after 0.9 ms
+1871.592422 captured display 2: ok
+1872.191422 [display callback] id=2 flags=8 main=true
+1872.193422 mode 4320x2160@90 (ui 4320x2160): ok
+1872.196422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0); dedicated Metal display loop at 90 Hz
+1872.197422 [display callback] handled after 6.1 ms
+1872.205422 render worker main=false
+frame 1 drawable 4320x2160
+frame 300 drawable 4320x2160
+1876.532422 [hmd] display ready=false; raw 05 00 01 01 00 59 00 00 00 07 3b
+1876.532422 headset reports display not ready
+1876.618422 [display callback] id=2 flags=4640 main=true
+1877.324422 [display callback] id=2 flags=4378 main=true
+1877.325422 [display callback] handled after 707.4 ms
+1877.356422 headset display LOST
+1877.356422 [display callback] handled after 32.0 ms
+1877.356422 headset display back after 31 ms
+1877.360422 captured display 2: ok
+1878.069422 [display callback] id=2 flags=8 main=true
+1878.071422 mode 4320x2160@90 (ui 4320x2160): ok
+1878.072422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0); dedicated Metal display loop at 90 Hz
+1878.072422 [display callback] handled after 2.8 ms
+1878.073422 health display=2 submitted=393 presented=384 skipped=9 fps=33.51 presentAge=1.52s GPUms=1.42 GPUerrors=0 IMU=9164 lastIMU=0.0s status=3
+1879.393422 [hmd] display ready=true; raw 05 01 01 01 01 59 00 00 00 07 3b
+frame 600 drawable 4320x2160
+frame 900 drawable 4320x2160
+frame 1200 drawable 4320x2160
+1887.255422 health display=2 submitted=1219 presented=1204 skipped=12 fps=89.30 presentAge=0.01s GPUms=1.44 GPUerrors=0 IMU=18348 lastIMU=0.0s status=4
+frame 1500 drawable 4320x2160
+frame 1800 drawable 4320x2160
+frame 2100 drawable 4320x2160
+1897.255422 health display=2 submitted=2119 presented=2103 skipped=12 fps=89.90 presentAge=0.01s GPUms=1.47 GPUerrors=0 IMU=28352 lastIMU=0.0s status=4
+frame 2400 drawable 4320x2160
diff --git a/evidence/startup-render-worker.json b/evidence/startup-render-worker.json
@@ -0,0 +1,8 @@
+{
+ "started": 1816.180022,
+ "purpose": "startup and postreset retrain with dedicated Metal render loop",
+ "off": "screen_off 0",
+ "ended": 1822.571053,
+ "exit": -6,
+ "log": "evidence/startup-render-worker.txt"
+}
diff --git a/evidence/startup-render-worker.txt b/evidence/startup-render-worker.txt
@@ -0,0 +1,45 @@
+1817.192422 [hmd] serial REDACTED-DEVICE-SERIAL
+1817.452422 [hmd] wake commands accepted; waiting for IMU and video evidence
+1817.452422 waiting for the headset display...
+1818.070422 [hmd] display ready=false; raw 05 00 01 01 00 00 00 00 00 00 00
+1818.070422 headset reports display not ready
+1819.454422 recovery: display absent after grace period; resetting DP adapter
+rid 1 recover DRST: 0x00000000, task result: 0x00, bytes: 64
+1819.623422 recovery helper accepted DRST; waiting for display ADD
+1820.871422 [hmd] display ready=false; raw 05 00 01 01 00 00 00 00 00 00 00
+1820.871422 headset reports display not ready
+1821.838422 [display callback] id=2 flags=4378 main=true
+1821.839422 [display callback] handled after 0.5 ms
+1821.846422 captured display 2: ok
+1822.500422 [display callback] id=2 flags=8 main=true
+1822.505422 mode 4320x2160@90 (ui 4320x2160): ok
+1822.511422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0); dedicated Metal display loop at 90 Hz
+1822.512422 [display callback] handled after 11.9 ms
+1822.522422 render worker main=false
+frame 1 drawable 4320x2160
+*** Terminating app due to uncaught exception 'CAMetalDrawableInvalidOperation', reason: '-presentAtTime should not be called when using CAMetalDisplayLink.'
+*** First throw call stack:
+(
+ 0 CoreFoundation 0x0000000183d53ae0 __exceptionPreprocess + 176
+ 1 libobjc.A.dylib 0x0000000183816b90 objc_exception_throw + 88
+ 2 CoreFoundation 0x0000000183d539d0 +[NSException exceptionWithName:reason:userInfo:] + 0
+ 3 QuartzCore 0x000000018cf89c88 -[CAMetalDrawable presentWithOptions:] + 160
+ 4 Metal 0x000000018f181bb8 __45-[_MTLCommandBuffer presentDrawable:options:]_block_invoke + 108
+ 5 Metal 0x000000018f016f5c MTLDispatchListApply + 52
+ 6 Metal 0x000000018f016ea4 -[_MTLCommandBuffer didScheduleWithStartTime:endTime:error:] + 312
+ 7 IOGPU 0x00000001a572cc74 IOGPUNotificationQueueDispatchAvailableCompletionNotifications + 136
+ 8 IOGPU 0x00000001a572cd84 __IOGPUNotificationQueueSetDispatchQueue_block_invoke + 64
+ 9 libdispatch.dylib 0x0000000183a598a4 _dispatch_client_callout4 + 16
+ 10 libdispatch.dylib 0x0000000183a5c110 _dispatch_mach_msg_invoke + 464
+ 11 libdispatch.dylib 0x0000000183a481b8 _dispatch_lane_serial_drain + 332
+ 12 libdispatch.dylib 0x0000000183a5ce74 _dispatch_mach_invoke + 472
+ 13 libdispatch.dylib 0x0000000183a481b8 _dispatch_lane_serial_drain + 332
+ 14 libdispatch.dylib 0x0000000183a48e60 _dispatch_lane_invoke + 440
+ 15 libdispatch.dylib 0x0000000183a481b8 _dispatch_lane_serial_drain + 332
+ 16 libdispatch.dylib 0x0000000183a48e2c _dispatch_lane_invoke + 388
+ 17 libdispatch.dylib 0x0000000183a53264 _dispatch_root_queue_drain_deferred_wlh + 292
+ 18 libdispatch.dylib 0x0000000183a52ae8 _dispatch_workloop_worker_thread + 540
+ 19 libsystem_pthread.dylib 0x0000000183bf3e64 _pthread_wqthread + 292
+ 20 libsystem_pthread.dylib 0x0000000183bf2b74 start_wqthread + 8
+)
+libc++abi: terminating due to uncaught exception of type NSException
diff --git a/evidence/startup-runloop-fix.json b/evidence/startup-runloop-fix.json
@@ -0,0 +1,8 @@
+{
+ "started": 1171.876446,
+ "purpose": "stuck startup after run-loop wake fix",
+ "off": "screen_off 0",
+ "ended": 1208.191423,
+ "exit": 0,
+ "log": "evidence/startup-runloop-fix.txt"
+}
diff --git a/evidence/startup-runloop-fix.txt b/evidence/startup-runloop-fix.txt
@@ -0,0 +1,35 @@
+1172.877422 [hmd] serial REDACTED-DEVICE-SERIAL
+1173.137422 [hmd] wake commands accepted; waiting for IMU and video evidence
+1173.137422 waiting for the headset display...
+1173.734422 [hmd] display ready=false; raw 05 00 01 01 00 00 00 00 00 00 00
+1173.734422 headset reports display not ready
+1175.139422 recovery: display absent after grace period; resetting DP adapter
+rid 1 recover DRST: 0x00000000, task result: 0x00, bytes: 64
+1175.296422 recovery helper accepted DRST; waiting for display ADD
+1176.512422 [hmd] display ready=false; raw 05 00 01 01 00 00 00 00 00 00 00
+1176.512422 headset reports display not ready
+1177.473422 captured display 2: ok
+1178.154422 mode 4320x2160@90 (ui 4320x2160): ok
+1178.158422 headset display link: maximum 90 fps
+1178.158422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0)
+frame 1 drawable (4320.0, 2160.0)
+frame 300 drawable (4320.0, 2160.0)
+1182.414422 [hmd] display ready=false; raw 05 00 01 01 00 59 00 00 00 07 3b
+1182.414422 headset reports display not ready
+1183.421422 health display=2 submitted=389 presented=381 skipped=7 fps=34.86 presentAge=0.01s GPUms=1.32 GPUerrors=0 IMU=9060 lastIMU=0.0s status=3
+1183.473422 headset display LOST
+1183.473422 headset display back after 26 ms
+1183.480422 captured display 2: ok
+1184.068422 mode 4320x2160@90 (ui 4320x2160): ok
+1184.069422 headset display link: maximum 90 fps
+1184.069422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0)
+1185.393422 [hmd] display ready=true; raw 05 01 01 01 01 59 00 00 00 07 3b
+frame 600 drawable (4320.0, 2160.0)
+frame 900 drawable (4320.0, 2160.0)
+frame 1200 drawable (4320.0, 2160.0)
+1193.138422 health display=2 submitted=1206 presented=1196 skipped=7 fps=83.88 presentAge=0.01s GPUms=1.62 GPUerrors=0 IMU=18336 lastIMU=0.0s status=4
+frame 1500 drawable (4320.0, 2160.0)
+frame 1800 drawable (4320.0, 2160.0)
+frame 2100 drawable (4320.0, 2160.0)
+1203.138422 health display=2 submitted=2106 presented=2095 skipped=7 fps=89.90 presentAge=0.01s GPUms=1.75 GPUerrors=0 IMU=28340 lastIMU=0.0s status=4
+frame 2400 drawable (4320.0, 2160.0)
diff --git a/evidence/startup-trial-1.txt b/evidence/startup-trial-1.txt
@@ -0,0 +1,33 @@
+1054.577422 [hmd] serial REDACTED-DEVICE-SERIAL
+1054.837422 [hmd] wake commands accepted; waiting for IMU and video evidence
+1054.837422 waiting for the headset display...
+1055.434422 [hmd] display ready=false; raw 05 00 01 01 00 00 00 00 00 00 00
+1055.434422 headset reports display not ready
+1056.839422 recovery: display absent after grace period; resetting DP adapter
+rid 1 recover DRST: 0x00000000, task result: 0x00, bytes: 64
+1057.002422 recovery helper accepted DRST; waiting for display ADD
+1058.218422 [hmd] display ready=false; raw 05 00 01 01 00 00 00 00 00 00 00
+1058.218422 headset reports display not ready
+1059.180422 captured display 2: ok
+1059.818422 mode 4320x2160@90 (ui 4320x2160): ok
+1059.840422 headset display link: maximum 90 fps
+1059.840422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0)
+frame 1 drawable (4320.0, 2160.0)
+frame 300 drawable (4320.0, 2160.0)
+1064.120422 [hmd] display ready=false; raw 05 00 01 01 00 59 00 00 00 07 3b
+1064.120422 headset reports display not ready
+1065.135422 health display=2 submitted=392 presented=384 skipped=7 fps=35.10 presentAge=0.00s GPUms=1.54 GPUerrors=0 IMU=9092 lastIMU=0.0s status=3
+1066.586422 [hmd] display ready=true; raw 05 01 01 01 01 59 00 00 00 07 3b
+frame 600 drawable (4320.0, 2160.0)
+frame 900 drawable (4320.0, 2160.0)
+1074.869422 health display=2 submitted=976 presented=965 skipped=7 fps=59.69 presentAge=0.00s GPUms=1.76 GPUerrors=0 IMU=18840 lastIMU=0.0s status=4
+1074.916422 headset display LOST
+1074.916422 headset display back after 27 ms
+1074.922422 captured display 2: ok
+1075.511422 mode 4320x2160@90 (ui 4320x2160): ok
+1075.514422 headset display link: maximum 90 fps
+1075.514422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0)
+1075.516422 [hmd] display ready=false; raw 05 00 01 01 00 3b 00 00 00 0a 27
+1075.516422 headset reports display not ready
+1076.833422 [hmd] display ready=true; raw 05 01 01 01 01 3b 00 00 00 0a 27
+frame 1200 drawable (4320.0, 2160.0)
diff --git a/evidence/startup-trial-2.txt b/evidence/startup-trial-2.txt
@@ -0,0 +1,33 @@
+1080.925422 [hmd] serial REDACTED-DEVICE-SERIAL
+1081.186422 [hmd] wake commands accepted; waiting for IMU and video evidence
+1081.186422 waiting for the headset display...
+1081.783422 [hmd] display ready=false; raw 05 00 01 01 00 00 00 00 00 00 00
+1081.783422 headset reports display not ready
+1083.188422 recovery: display absent after grace period; resetting DP adapter
+rid 1 recover DRST: 0x00000000, task result: 0x00, bytes: 64
+1083.358422 recovery helper accepted DRST; waiting for display ADD
+1084.603422 [hmd] display ready=false; raw 05 00 01 01 00 00 00 00 00 00 00
+1084.603422 headset reports display not ready
+1085.564422 captured display 2: ok
+1086.239422 mode 4320x2160@90 (ui 4320x2160): ok
+1086.246422 headset display link: maximum 90 fps
+1086.246422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0)
+frame 1 drawable (4320.0, 2160.0)
+frame 300 drawable (4320.0, 2160.0)
+1090.505422 [hmd] display ready=false; raw 05 00 01 01 00 59 00 00 00 07 3b
+1090.505422 headset reports display not ready
+1091.515422 health display=2 submitted=389 presented=382 skipped=6 fps=34.80 presentAge=0.00s GPUms=1.52 GPUerrors=0 IMU=9108 lastIMU=0.0s status=3
+1092.978422 [hmd] display ready=true; raw 05 01 01 01 01 59 00 00 00 07 3b
+frame 600 drawable (4320.0, 2160.0)
+frame 900 drawable (4320.0, 2160.0)
+1101.212422 health display=2 submitted=971 presented=962 skipped=6 fps=59.81 presentAge=0.00s GPUms=1.76 GPUerrors=0 IMU=18820 lastIMU=0.0s status=4
+1101.254422 headset display LOST
+1101.254422 headset display back after 26 ms
+1101.260422 captured display 2: ok
+1101.790422 mode 4320x2160@90 (ui 4320x2160): ok
+1101.791422 headset display link: maximum 90 fps
+1101.791422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0)
+1101.795422 [hmd] display ready=false; raw 05 00 01 01 00 3b 00 00 00 0a 27
+1101.795422 headset reports display not ready
+1103.123422 [hmd] display ready=true; raw 05 01 01 01 01 3b 00 00 00 0a 27
+frame 1200 drawable (4320.0, 2160.0)
diff --git a/evidence/startup-trials.json b/evidence/startup-trials.json
@@ -0,0 +1,38 @@
+[
+ {
+ "trial": 1,
+ "started": 1053.579293,
+ "off": {
+ "code": 0,
+ "stdout": "screen_off 0"
+ },
+ "ended": 1079.909879,
+ "exit": 0,
+ "log": "evidence/startup-trial-1.txt",
+ "captured": true,
+ "native90": true,
+ "recovery_used": true,
+ "health": [
+ "1065.135422 health display=2 submitted=392 presented=384 skipped=7 fps=35.10 presentAge=0.00s GPUms=1.54 GPUerrors=0 IMU=9092 lastIMU=0.0s status=3",
+ "1074.869422 health display=2 submitted=976 presented=965 skipped=7 fps=59.69 presentAge=0.00s GPUms=1.76 GPUerrors=0 IMU=18840 lastIMU=0.0s status=4"
+ ]
+ },
+ {
+ "trial": 2,
+ "started": 1079.910188,
+ "off": {
+ "code": 0,
+ "stdout": "screen_off 0"
+ },
+ "ended": 1106.260471,
+ "exit": 0,
+ "log": "evidence/startup-trial-2.txt",
+ "captured": true,
+ "native90": true,
+ "recovery_used": true,
+ "health": [
+ "1091.515422 health display=2 submitted=389 presented=382 skipped=6 fps=34.80 presentAge=0.00s GPUms=1.52 GPUerrors=0 IMU=9108 lastIMU=0.0s status=3",
+ "1101.212422 health display=2 submitted=971 presented=962 skipped=6 fps=59.81 presentAge=0.00s GPUms=1.76 GPUerrors=0 IMU=18820 lastIMU=0.0s status=4"
+ ]
+ }
+]
diff --git a/evidence/verified-90hz-build.json b/evidence/verified-90hz-build.json
@@ -0,0 +1,17 @@
+{
+ "recorded": 3054.196426,
+ "files": {
+ "Package.swift": "bf767b1179a5cc7ea8cbab59b95af0c59920702a37345b2d99680666e9feeaf1",
+ "Sources/VRWorkstation/App.swift": "1ad20f88522431e8b3d91dfe4a66d97c3d1afda30bb4e61954db53b9b22bb818",
+ "Sources/VRWorkstation/HMD.swift": "95b4381efd0d3b33fd7887f58cb12beff2bbca0afe1f16feeb5f55c6b5a66f82",
+ "Sources/VRWorkstation/LinkRecovery.swift": "7609b5460dae455f09df57159e0bd60f9f64ac0b305c3abe034b880b65bfb85c",
+ "Sources/VRWorkstation/MainRunLoop.swift": "82a1dfb108603f4ee4ec1cb132f8feeb3552a6fcbc0324314774e10272a25c6e",
+ "Sources/VRWorkstation/MetalOutput.swift": "efbe4b6373485f6d4332a95ac8da7e0ff2f0f7d459faf6b6f2a176a94f429fa6",
+ "Sources/VRWorkstation/Renderer.swift": "56ce6d6ad623f35bec98805abb4b0bb35785adb870f18d005e325fe67c648ce3",
+ "Sources/VRWorkstation/Scene.swift": "9cded7d1e4ad87688c04f07002e1df6f4dd86f10c9fc92e04266110eb42a0260",
+ "Sources/VRWorkstation/Shaders.swift": "4d7c3b2bafa45b18077f63deb149d5b17f8ae04fb29122ec613a4d02a2df400f",
+ "Sources/VRWorkstation/main.swift": "51784e9e6f5085d4aaaa5b6a09e543d65b52f9a6a132a63739a1de5fde487798",
+ "tools/hpmctl.c": "2ca03d3e7a4256be56961e54030ab1e87f63361ac5a674f08c032c69b27f0eed",
+ "tools/build.sh": "d54653e9ca4ed5a382387cfd4c5bbe5fee929b0250c04a8aa601a839fa068f7a"
+ }
+}
diff --git a/evidence/verified-90hz-soak.json b/evidence/verified-90hz-soak.json
@@ -0,0 +1,31 @@
+{
+ "process_exit": 0,
+ "log": "evidence/verified-90hz-soak.txt",
+ "application_commit": "5806ab0",
+ "startup_self_healing_removes": [
+ 2948.380422
+ ],
+ "startup_returns": [
+ 2949.017422
+ ],
+ "settled_interval_seconds": 649.9649999141693,
+ "settled_presented_frames": 58496,
+ "settled_presented_fps": 89.99869224915903,
+ "settled_skipped_delta": 3,
+ "gpu_errors": 0,
+ "last_health": {
+ "display": "2",
+ "submitted": "59220",
+ "presented": "59203",
+ "skipped": "13",
+ "fps": "90.00",
+ "presentAge": "0.01s",
+ "GPUms": "1.68",
+ "GPUerrors": "0",
+ "IMU": "658576",
+ "lastIMU": "0.0s",
+ "status": "3"
+ },
+ "render_join_timed_out": false,
+ "recovery_commands": 0
+}
diff --git a/evidence/verified-90hz-soak.txt b/evidence/verified-90hz-soak.txt
@@ -0,0 +1,287 @@
+2941.591422 [hmd] serial REDACTED-DEVICE-SERIAL
+2941.700422 [hmd] wake commands accepted; waiting for IMU and video evidence
+2941.713422 captured display 2: ok
+2942.250422 [display callback] id=2 flags=8 main=true
+2942.262422 mode 4320x2160@90 (ui 4320x2160): ok
+2942.278422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0); dedicated Metal display loop at 90 Hz
+2942.289422 render worker main=false
+frame 1 drawable 4320x2160
+2942.319422 [display callback] handled after 69.3 ms
+2942.680422 [hmd] display ready=true; raw 05 01 01 01 01 59 00 00 00 07 3b
+frame 300 drawable 4320x2160
+2948.280422 [hmd] display ready=false; raw 05 00 01 01 00 3b 00 00 00 0a 27
+2948.280422 headset reports display not ready
+2948.380422 [display callback] id=2 flags=4640 main=true
+2949.017422 [display callback] id=2 flags=4378 main=true
+2949.027422 [display callback] handled after 647.3 ms
+2949.030422 headset display LOST
+2949.030422 [display callback] handled after 13.3 ms
+2949.030422 headset display back after 650 ms
+2949.034422 captured display 2: ok
+2949.703422 [display callback] id=2 flags=8 main=true
+2949.705422 mode 4320x2160@90 (ui 4320x2160): ok
+2949.706422 rendering on headset (4320.0, 2160.0), drawable (4320.0, 2160.0); dedicated Metal display loop at 90 Hz
+2949.707422 [display callback] handled after 3.6 ms
+frame 600 drawable 4320x2160
+2951.020422 [hmd] display ready=true; raw 05 01 01 01 01 3b 00 00 00 0a 27
+2951.701422 health display=2 submitted=721 presented=707 skipped=10 fps=67.38 presentAge=0.01s GPUms=1.40 GPUerrors=0 IMU=8340 lastIMU=0.0s status=3
+frame 900 drawable 4320x2160
+frame 1200 drawable 4320x2160
+frame 1500 drawable 4320x2160
+2961.703422 health display=2 submitted=1620 presented=1605 skipped=12 fps=89.79 presentAge=0.01s GPUms=1.42 GPUerrors=0 IMU=18344 lastIMU=0.0s status=3
+frame 1800 drawable 4320x2160
+frame 2100 drawable 4320x2160
+frame 2400 drawable 4320x2160
+2971.702422 health display=2 submitted=2520 presented=2505 skipped=12 fps=90.00 presentAge=0.01s GPUms=1.46 GPUerrors=0 IMU=28348 lastIMU=0.0s status=3
+frame 2700 drawable 4320x2160
+frame 3000 drawable 4320x2160
+frame 3300 drawable 4320x2160
+2981.701422 health display=2 submitted=3420 presented=3405 skipped=12 fps=90.01 presentAge=0.01s GPUms=1.45 GPUerrors=0 IMU=38348 lastIMU=0.0s status=3
+frame 3600 drawable 4320x2160
+frame 3900 drawable 4320x2160
+frame 4200 drawable 4320x2160
+2991.702422 health display=2 submitted=4320 presented=4304 skipped=12 fps=89.89 presentAge=0.01s GPUms=1.44 GPUerrors=0 IMU=48356 lastIMU=0.0s status=3
+frame 4500 drawable 4320x2160
+frame 4800 drawable 4320x2160
+frame 5100 drawable 4320x2160
+3001.702422 health display=2 submitted=5220 presented=5204 skipped=12 fps=90.00 presentAge=0.01s GPUms=1.46 GPUerrors=0 IMU=58360 lastIMU=0.0s status=3
+frame 5400 drawable 4320x2160
+frame 5700 drawable 4320x2160
+frame 6000 drawable 4320x2160
+3011.700422 health display=2 submitted=6120 presented=6104 skipped=12 fps=90.01 presentAge=0.01s GPUms=1.46 GPUerrors=0 IMU=68360 lastIMU=0.0s status=3
+frame 6300 drawable 4320x2160
+frame 6600 drawable 4320x2160
+frame 6900 drawable 4320x2160
+3021.702422 health display=2 submitted=7020 presented=7004 skipped=12 fps=89.98 presentAge=0.01s GPUms=1.47 GPUerrors=0 IMU=78368 lastIMU=0.0s status=3
+frame 7200 drawable 4320x2160
+frame 7500 drawable 4320x2160
+frame 7800 drawable 4320x2160
+3031.702422 health display=2 submitted=7920 presented=7904 skipped=12 fps=90.00 presentAge=0.01s GPUms=1.48 GPUerrors=0 IMU=88372 lastIMU=0.0s status=3
+frame 8100 drawable 4320x2160
+frame 8400 drawable 4320x2160
+frame 8700 drawable 4320x2160
+3041.702422 health display=2 submitted=8820 presented=8804 skipped=12 fps=90.00 presentAge=0.01s GPUms=1.47 GPUerrors=0 IMU=98376 lastIMU=0.0s status=3
+frame 9000 drawable 4320x2160
+frame 9300 drawable 4320x2160
+frame 9600 drawable 4320x2160
+3051.702422 health display=2 submitted=9720 presented=9704 skipped=12 fps=90.00 presentAge=0.01s GPUms=1.48 GPUerrors=0 IMU=108380 lastIMU=0.0s status=3
+frame 9900 drawable 4320x2160
+frame 10200 drawable 4320x2160
+frame 10500 drawable 4320x2160
+3061.702422 health display=2 submitted=10620 presented=10604 skipped=12 fps=90.00 presentAge=0.01s GPUms=1.47 GPUerrors=0 IMU=118384 lastIMU=0.0s status=3
+frame 10800 drawable 4320x2160
+frame 11100 drawable 4320x2160
+frame 11400 drawable 4320x2160
+3071.700422 health display=2 submitted=11520 presented=11504 skipped=12 fps=90.02 presentAge=0.01s GPUms=1.47 GPUerrors=0 IMU=128384 lastIMU=0.0s status=3
+frame 11700 drawable 4320x2160
+frame 12000 drawable 4320x2160
+frame 12300 drawable 4320x2160
+3081.700422 health display=2 submitted=12420 presented=12404 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.47 GPUerrors=0 IMU=138388 lastIMU=0.0s status=3
+frame 12600 drawable 4320x2160
+frame 12900 drawable 4320x2160
+frame 13200 drawable 4320x2160
+3091.700422 health display=2 submitted=13320 presented=13304 skipped=13 fps=89.99 presentAge=0.01s GPUms=1.48 GPUerrors=0 IMU=148396 lastIMU=0.0s status=3
+frame 13500 drawable 4320x2160
+frame 13800 drawable 4320x2160
+frame 14100 drawable 4320x2160
+3101.700422 health display=2 submitted=14220 presented=14204 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.50 GPUerrors=0 IMU=158400 lastIMU=0.0s status=3
+frame 14400 drawable 4320x2160
+frame 14700 drawable 4320x2160
+frame 15000 drawable 4320x2160
+3111.700422 health display=2 submitted=15120 presented=15104 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.52 GPUerrors=0 IMU=168400 lastIMU=0.0s status=3
+frame 15300 drawable 4320x2160
+frame 15600 drawable 4320x2160
+frame 15900 drawable 4320x2160
+3121.700422 health display=2 submitted=16020 presented=16004 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.54 GPUerrors=0 IMU=178404 lastIMU=0.0s status=3
+frame 16200 drawable 4320x2160
+frame 16500 drawable 4320x2160
+frame 16800 drawable 4320x2160
+3131.700422 health display=2 submitted=16920 presented=16904 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.54 GPUerrors=0 IMU=188408 lastIMU=0.0s status=3
+frame 17100 drawable 4320x2160
+frame 17400 drawable 4320x2160
+frame 17700 drawable 4320x2160
+3141.700422 health display=2 submitted=17820 presented=17804 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.55 GPUerrors=0 IMU=198412 lastIMU=0.0s status=3
+frame 18000 drawable 4320x2160
+frame 18300 drawable 4320x2160
+frame 18600 drawable 4320x2160
+3151.700422 health display=2 submitted=18720 presented=18704 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.55 GPUerrors=0 IMU=208416 lastIMU=0.0s status=3
+frame 18900 drawable 4320x2160
+frame 19200 drawable 4320x2160
+frame 19500 drawable 4320x2160
+3161.699422 health display=2 submitted=19620 presented=19604 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.56 GPUerrors=0 IMU=218420 lastIMU=0.0s status=3
+frame 19800 drawable 4320x2160
+frame 20100 drawable 4320x2160
+frame 20400 drawable 4320x2160
+3171.699422 health display=2 submitted=20520 presented=20504 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.56 GPUerrors=0 IMU=228424 lastIMU=0.0s status=3
+frame 20700 drawable 4320x2160
+frame 21000 drawable 4320x2160
+frame 21300 drawable 4320x2160
+3181.699422 health display=2 submitted=21420 presented=21404 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.56 GPUerrors=0 IMU=238428 lastIMU=0.0s status=3
+frame 21600 drawable 4320x2160
+frame 21900 drawable 4320x2160
+frame 22200 drawable 4320x2160
+3191.700422 health display=2 submitted=22320 presented=22304 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.56 GPUerrors=0 IMU=248432 lastIMU=0.0s status=3
+frame 22500 drawable 4320x2160
+frame 22800 drawable 4320x2160
+frame 23100 drawable 4320x2160
+3201.700422 health display=2 submitted=23220 presented=23204 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.56 GPUerrors=0 IMU=258436 lastIMU=0.0s status=3
+frame 23400 drawable 4320x2160
+frame 23700 drawable 4320x2160
+frame 24000 drawable 4320x2160
+3211.699422 health display=2 submitted=24120 presented=24103 skipped=13 fps=89.90 presentAge=0.01s GPUms=1.57 GPUerrors=0 IMU=268440 lastIMU=0.0s status=3
+frame 24300 drawable 4320x2160
+frame 24600 drawable 4320x2160
+frame 24900 drawable 4320x2160
+3221.699422 health display=2 submitted=25020 presented=25003 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.57 GPUerrors=0 IMU=278444 lastIMU=0.0s status=3
+frame 25200 drawable 4320x2160
+frame 25500 drawable 4320x2160
+frame 25800 drawable 4320x2160
+3231.699422 health display=2 submitted=25920 presented=25903 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.57 GPUerrors=0 IMU=288448 lastIMU=0.0s status=3
+frame 26100 drawable 4320x2160
+frame 26400 drawable 4320x2160
+frame 26700 drawable 4320x2160
+3241.699422 health display=2 submitted=26820 presented=26803 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.58 GPUerrors=0 IMU=298452 lastIMU=0.0s status=3
+frame 27000 drawable 4320x2160
+frame 27300 drawable 4320x2160
+frame 27600 drawable 4320x2160
+3251.698422 health display=2 submitted=27720 presented=27703 skipped=13 fps=90.01 presentAge=0.01s GPUms=1.59 GPUerrors=0 IMU=308456 lastIMU=0.0s status=3
+frame 27900 drawable 4320x2160
+frame 28200 drawable 4320x2160
+frame 28500 drawable 4320x2160
+3261.699422 health display=2 submitted=28620 presented=28603 skipped=13 fps=89.99 presentAge=0.01s GPUms=1.59 GPUerrors=0 IMU=318460 lastIMU=0.0s status=3
+frame 28800 drawable 4320x2160
+frame 29100 drawable 4320x2160
+frame 29400 drawable 4320x2160
+3271.699422 health display=2 submitted=29520 presented=29503 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.59 GPUerrors=0 IMU=328464 lastIMU=0.0s status=3
+frame 29700 drawable 4320x2160
+frame 30000 drawable 4320x2160
+frame 30300 drawable 4320x2160
+3281.699422 health display=2 submitted=30420 presented=30403 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.59 GPUerrors=0 IMU=338468 lastIMU=0.0s status=3
+frame 30600 drawable 4320x2160
+frame 30900 drawable 4320x2160
+frame 31200 drawable 4320x2160
+3291.699422 health display=2 submitted=31320 presented=31303 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.60 GPUerrors=0 IMU=348472 lastIMU=0.0s status=3
+frame 31500 drawable 4320x2160
+frame 31800 drawable 4320x2160
+frame 32100 drawable 4320x2160
+3301.699422 health display=2 submitted=32220 presented=32203 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.59 GPUerrors=0 IMU=358472 lastIMU=0.0s status=3
+frame 32400 drawable 4320x2160
+frame 32700 drawable 4320x2160
+frame 33000 drawable 4320x2160
+3311.698422 health display=2 submitted=33120 presented=33103 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.60 GPUerrors=0 IMU=368476 lastIMU=0.0s status=3
+frame 33300 drawable 4320x2160
+frame 33600 drawable 4320x2160
+frame 33900 drawable 4320x2160
+3321.698422 health display=2 submitted=34020 presented=34003 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.60 GPUerrors=0 IMU=378480 lastIMU=0.0s status=3
+frame 34200 drawable 4320x2160
+frame 34500 drawable 4320x2160
+frame 34800 drawable 4320x2160
+3331.698422 health display=2 submitted=34920 presented=34903 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.60 GPUerrors=0 IMU=388484 lastIMU=0.0s status=3
+frame 35100 drawable 4320x2160
+frame 35400 drawable 4320x2160
+frame 35700 drawable 4320x2160
+3341.698422 health display=2 submitted=35820 presented=35803 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.61 GPUerrors=0 IMU=398488 lastIMU=0.0s status=3
+frame 36000 drawable 4320x2160
+frame 36300 drawable 4320x2160
+frame 36600 drawable 4320x2160
+3351.698422 health display=2 submitted=36720 presented=36703 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.61 GPUerrors=0 IMU=408492 lastIMU=0.0s status=3
+frame 36900 drawable 4320x2160
+frame 37200 drawable 4320x2160
+frame 37500 drawable 4320x2160
+3361.698422 health display=2 submitted=37620 presented=37603 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.62 GPUerrors=0 IMU=418496 lastIMU=0.0s status=3
+frame 37800 drawable 4320x2160
+frame 38100 drawable 4320x2160
+frame 38400 drawable 4320x2160
+3371.698422 health display=2 submitted=38520 presented=38503 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.62 GPUerrors=0 IMU=428500 lastIMU=0.0s status=3
+frame 38700 drawable 4320x2160
+frame 39000 drawable 4320x2160
+frame 39300 drawable 4320x2160
+3381.698422 health display=2 submitted=39420 presented=39403 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.62 GPUerrors=0 IMU=438504 lastIMU=0.0s status=3
+frame 39600 drawable 4320x2160
+frame 39900 drawable 4320x2160
+frame 40200 drawable 4320x2160
+3391.698422 health display=2 submitted=40320 presented=40303 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.63 GPUerrors=0 IMU=448504 lastIMU=0.0s status=3
+frame 40500 drawable 4320x2160
+frame 40800 drawable 4320x2160
+frame 41100 drawable 4320x2160
+3401.698422 health display=2 submitted=41220 presented=41203 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.63 GPUerrors=0 IMU=458508 lastIMU=0.0s status=3
+frame 41400 drawable 4320x2160
+frame 41700 drawable 4320x2160
+frame 42000 drawable 4320x2160
+3411.697422 health display=2 submitted=42120 presented=42103 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.63 GPUerrors=0 IMU=468512 lastIMU=0.0s status=3
+frame 42300 drawable 4320x2160
+frame 42600 drawable 4320x2160
+frame 42900 drawable 4320x2160
+3421.698422 health display=2 submitted=43020 presented=43003 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.64 GPUerrors=0 IMU=478516 lastIMU=0.0s status=3
+frame 43200 drawable 4320x2160
+frame 43500 drawable 4320x2160
+frame 43800 drawable 4320x2160
+3431.697422 health display=2 submitted=43920 presented=43903 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.64 GPUerrors=0 IMU=488520 lastIMU=0.0s status=3
+frame 44100 drawable 4320x2160
+frame 44400 drawable 4320x2160
+frame 44700 drawable 4320x2160
+3441.697422 health display=2 submitted=44820 presented=44803 skipped=13 fps=90.01 presentAge=0.01s GPUms=1.64 GPUerrors=0 IMU=498524 lastIMU=0.0s status=3
+frame 45000 drawable 4320x2160
+frame 45300 drawable 4320x2160
+frame 45600 drawable 4320x2160
+3451.696422 health display=2 submitted=45720 presented=45703 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.64 GPUerrors=0 IMU=508524 lastIMU=0.0s status=3
+frame 45900 drawable 4320x2160
+frame 46200 drawable 4320x2160
+frame 46500 drawable 4320x2160
+3461.697422 health display=2 submitted=46620 presented=46603 skipped=13 fps=89.99 presentAge=0.01s GPUms=1.64 GPUerrors=0 IMU=518532 lastIMU=0.0s status=3
+frame 46800 drawable 4320x2160
+frame 47100 drawable 4320x2160
+frame 47400 drawable 4320x2160
+3471.697422 health display=2 submitted=47520 presented=47503 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.65 GPUerrors=0 IMU=528532 lastIMU=0.0s status=3
+frame 47700 drawable 4320x2160
+frame 48000 drawable 4320x2160
+frame 48300 drawable 4320x2160
+3481.697422 health display=2 submitted=48420 presented=48403 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.65 GPUerrors=0 IMU=538536 lastIMU=0.0s status=3
+frame 48600 drawable 4320x2160
+frame 48900 drawable 4320x2160
+frame 49200 drawable 4320x2160
+3491.697422 health display=2 submitted=49320 presented=49303 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.65 GPUerrors=0 IMU=548540 lastIMU=0.0s status=3
+frame 49500 drawable 4320x2160
+frame 49800 drawable 4320x2160
+frame 50100 drawable 4320x2160
+3501.697422 health display=2 submitted=50220 presented=50203 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.66 GPUerrors=0 IMU=558544 lastIMU=0.0s status=3
+frame 50400 drawable 4320x2160
+frame 50700 drawable 4320x2160
+frame 51000 drawable 4320x2160
+3511.697422 health display=2 submitted=51120 presented=51103 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.66 GPUerrors=0 IMU=568548 lastIMU=0.0s status=3
+frame 51300 drawable 4320x2160
+frame 51600 drawable 4320x2160
+frame 51900 drawable 4320x2160
+3521.694422 health display=2 submitted=52020 presented=52003 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.66 GPUerrors=0 IMU=578552 lastIMU=0.0s status=3
+frame 52200 drawable 4320x2160
+frame 52500 drawable 4320x2160
+frame 52800 drawable 4320x2160
+3531.681422 health display=2 submitted=52920 presented=52903 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.66 GPUerrors=0 IMU=588556 lastIMU=0.0s status=3
+frame 53100 drawable 4320x2160
+frame 53400 drawable 4320x2160
+frame 53700 drawable 4320x2160
+3541.674422 health display=2 submitted=53820 presented=53803 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.66 GPUerrors=0 IMU=598556 lastIMU=0.0s status=3
+frame 54000 drawable 4320x2160
+frame 54300 drawable 4320x2160
+frame 54600 drawable 4320x2160
+3551.670422 health display=2 submitted=54720 presented=54703 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.67 GPUerrors=0 IMU=608560 lastIMU=0.0s status=3
+frame 54900 drawable 4320x2160
+frame 55200 drawable 4320x2160
+frame 55500 drawable 4320x2160
+3561.668422 health display=2 submitted=55620 presented=55603 skipped=13 fps=90.01 presentAge=0.01s GPUms=1.67 GPUerrors=0 IMU=618564 lastIMU=0.0s status=3
+frame 55800 drawable 4320x2160
+frame 56100 drawable 4320x2160
+frame 56400 drawable 4320x2160
+3571.667422 health display=2 submitted=56520 presented=56503 skipped=13 fps=89.99 presentAge=0.01s GPUms=1.67 GPUerrors=0 IMU=628568 lastIMU=0.0s status=3
+frame 56700 drawable 4320x2160
+frame 57000 drawable 4320x2160
+frame 57300 drawable 4320x2160
+3581.666422 health display=2 submitted=57420 presented=57403 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.67 GPUerrors=0 IMU=638572 lastIMU=0.0s status=3
+frame 57600 drawable 4320x2160
+frame 57900 drawable 4320x2160
+frame 58200 drawable 4320x2160
+3591.666422 health display=2 submitted=58320 presented=58303 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.68 GPUerrors=0 IMU=648576 lastIMU=0.0s status=3
+frame 58500 drawable 4320x2160
+frame 58800 drawable 4320x2160
+frame 59100 drawable 4320x2160
+3601.666422 health display=2 submitted=59220 presented=59203 skipped=13 fps=90.00 presentAge=0.01s GPUms=1.68 GPUerrors=0 IMU=658576 lastIMU=0.0s status=3