test_queue_write_perf.html (2890B)
1 <!doctype html> 2 <html> 3 <head> 4 <meta charset="utf-8" /> 5 <script src="/tests/SimpleTest/SimpleTest.js"></script> 6 <link rel="stylesheet" href="/tests/SimpleTest/test.css" /> 7 </head> 8 9 <body> 10 <script type="text/javascript"> 11 "use strict"; 12 13 var perfMetadata = { 14 owner: "Graphics Team", 15 name: "Queue Write", 16 description: 17 "Test the performance of Queue.writeBuffer and Queue.writeTexture", 18 test: "mochitest", 19 options: { 20 default: { 21 perfherder: true, 22 perfherder_metrics: [ 23 { name: "writeBuffer Time", unit: "ms" }, 24 { name: "writeTexture Time", unit: "ms" }, 25 ], 26 manifest: "perftest.toml", 27 manifest_flavor: "plain", 28 }, 29 }, 30 }; 31 32 const iters = 100; 33 34 ok( 35 SpecialPowers.getBoolPref("dom.webgpu.enabled"), 36 "WebGPU pref should be enabled." 37 ); 38 39 async function runTest() { 40 const adapter = await navigator.gpu.requestAdapter(); 41 const device = await adapter.requestDevice(); 42 device.onuncapturederror = function (e) { 43 ok(false, "WebGPU error: " + e.error.message); 44 }; 45 const buffer = device.createBuffer({ 46 size: 1024 * 1024, 47 usage: 48 GPUBufferUsage.COPY_DST | 49 GPUBufferUsage.COPY_SRC | 50 GPUBufferUsage.VERTEX, 51 }); 52 const arrayBuf = new ArrayBuffer(256 * 1024 * 1024); 53 new Int32Array(arrayBuf).fill(0x55); 54 55 performance.mark("start writeBuffer"); 56 for (var i = 0; i < iters; i++) { 57 device.queue.writeBuffer(buffer, 0, arrayBuf, 0, 1024 * 1024); 58 } 59 const writeBufferTime = performance.measure( 60 "writeBuffer", 61 "start writeBuffer" 62 ).duration; 63 64 const texture = device.createTexture({ 65 size: [512, 512, 1], 66 dimension: "2d", 67 format: "rgba8unorm", 68 usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC, 69 }); 70 71 performance.mark("start writeTexture"); 72 for (i = 0; i < iters; i++) { 73 device.queue.writeTexture( 74 { texture }, 75 arrayBuf, 76 { bytesPerRow: 2048 }, 77 [512, 512, 1] 78 ); 79 } 80 const writeTextureTime = performance.measure( 81 "writeTexture", 82 "start writeTexture" 83 ).duration; 84 85 ok(device !== undefined, ""); 86 info( 87 "perfMetrics", 88 JSON.stringify({ 89 "writeBuffer Time": writeBufferTime, 90 "writeTexture Time": writeTextureTime, 91 }) 92 ); 93 } 94 95 SimpleTest.waitForExplicitFinish(); 96 97 runTest() 98 .catch(e => ok(false, "Unhandled exception " + e)) 99 .finally(() => SimpleTest.finish()); 100 </script> 101 </body> 102 </html>