| <!DOCTYPE html> |
| <meta charset=utf-8> |
| <title>Test Error Scopes.</title> |
| <body> |
| <script src="js/webgpu-functions.js"></script> |
| <script src="../resources/testharness.js"></script> |
| <script src="../resources/testharnessreport.js"></script> |
| <script> |
| let tests = {}; |
| let eventWatcher; |
| |
| const causeUncapturedErrorEvent = device => { |
| device.createBuffer({ size: 4, usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.MAP_WRITE }); |
| }; |
| |
| tests["Fire an uncaptured GPUDevice error event at 'device'."] = async device => { |
| const asyncTest = async_test("GPUUncapturedErrorEvent async test."); |
| const eventWatcher = new EventWatcher(asyncTest, device, "uncapturederror"); |
| const eventFired = eventWatcher.wait_for("uncapturederror").then(event => { |
| assert_true(event.error instanceof GPUValidationError, "Successfully fired GPUUncapturedErrorEvent."); |
| asyncTest.done(); |
| }); |
| |
| const timeout = new Promise((_, reject) => { |
| setTimeout(() => { reject("Timed out waiting for error event!") }, 3000); |
| }); |
| |
| causeUncapturedErrorEvent(device); |
| |
| return Promise.race([eventFired, timeout]); |
| }; |
| |
| tests["Intercept an uncaptured error with GPUDevice.onuncapturederror EventHandler."] = async device => { |
| const capturedErrorPromise = new Promise(resolve => { |
| device.onuncapturederror = event => { |
| assert_true(event.error instanceof GPUValidationError, "Successfully fired GPUUncapturedErrorEvent."); |
| resolve(); |
| }; |
| |
| causeUncapturedErrorEvent(device); |
| }); |
| |
| const timeout = new Promise((_, reject) => { |
| setTimeout(() => { reject("Timed out waiting for error event!") }, 3000); |
| }); |
| |
| return Promise.race([capturedErrorPromise, timeout]); |
| }; |
| |
| runTestsWithDevice(tests); |
| </script> |
| </body> |