tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>