| <script type="text/javascript"> |
| function reportProgress(msg) { |
| if (window.domAutomationController) { |
| window.domAutomationController.send(msg); |
| } |
| console.log(msg); |
| } |
| |
| // These must be "var" rather than "let" for the Telemetry harness to |
| // see them. |
| var gotDevice; |
| var deviceLost; |
| var proceed; |
| |
| const later = (delay) => |
| new Promise(resolve => setTimeout(resolve, delay)); |
| |
| async function init() |
| { |
| reportProgress('LOADED'); |
| |
| // This bakes in knowledge that GpuDataManagerImplPrivate blocks |
| // WebGPU from fetching an adapter after two device losses on the |
| // same domain. |
| for (idx = 0; idx < 2; ++idx) { |
| let adapter = await navigator.gpu.requestAdapter(); |
| if (!adapter) { |
| console.log('TEST FAILED - Could not get a GPUAdapter'); |
| reportProgress('FAILED'); |
| return; |
| } |
| |
| let device; |
| try { |
| device = await adapter.requestDevice(); |
| gotDevice = true; |
| deviceLost = false; |
| } catch { |
| console.log('TEST FAILED - Could not get a GPUDevice'); |
| reportProgress('FAILED'); |
| return; |
| } |
| |
| console.log('Waiting for a GPU crash to cause device loss'); |
| const {reason} = await device.lost; |
| gotDevice = false; |
| deviceLost = true; |
| if (reason !== undefined) { |
| console.log('TEST FAILED - Expected undefined device lost reason'); |
| reportProgress('FAILED'); |
| } |
| |
| // The harness will tell us when to proceed to the second iteration. |
| while (!proceed) { |
| await later(100); |
| } |
| } |
| |
| window.location.href = 'webgpu-domain-blocking-page2.html'; |
| } |
| |
| init(); |
| </script> |