xref: /aosp_15_r20/external/skia/modules/canvaskit/wasm_tools/gms.html (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker<!DOCTYPE html>
2*c8dee2aaSAndroid Build Coastguard Worker<title>Testing GMs on WebGL 2 compiled with Bazel</title>
3*c8dee2aaSAndroid Build Coastguard Worker<meta charset="utf-8" />
4*c8dee2aaSAndroid Build Coastguard Worker<meta http-equiv="X-UA-Compatible" content="IE=edge">
5*c8dee2aaSAndroid Build Coastguard Worker<meta name="viewport" content="width=device-width, initial-scale=1.0">
6*c8dee2aaSAndroid Build Coastguard Worker
7*c8dee2aaSAndroid Build Coastguard Worker<script type="text/javascript" src="/build/wasm_gm_tests.js"></script>
8*c8dee2aaSAndroid Build Coastguard Worker
9*c8dee2aaSAndroid Build Coastguard Worker<p id="log"></p>
10*c8dee2aaSAndroid Build Coastguard Worker<!-- Makes png visible to user -->
11*c8dee2aaSAndroid Build Coastguard Worker<canvas id=png_canvas height=1000 width=1000></canvas>
12*c8dee2aaSAndroid Build Coastguard Worker<!-- Used for drawing/testing, but nothing is visible -->
13*c8dee2aaSAndroid Build Coastguard Worker<canvas id=gm_canvas></canvas>
14*c8dee2aaSAndroid Build Coastguard Worker
15*c8dee2aaSAndroid Build Coastguard Worker
16*c8dee2aaSAndroid Build Coastguard Worker<script type="text/javascript" charset="utf-8">
17*c8dee2aaSAndroid Build Coastguard Worker  function log(line) {
18*c8dee2aaSAndroid Build Coastguard Worker    console.log(line);
19*c8dee2aaSAndroid Build Coastguard Worker    line += '\n';
20*c8dee2aaSAndroid Build Coastguard Worker    document.getElementById("log").innerText += line;
21*c8dee2aaSAndroid Build Coastguard Worker  }
22*c8dee2aaSAndroid Build Coastguard Worker  Run();
23*c8dee2aaSAndroid Build Coastguard Worker  async function Run() {
24*c8dee2aaSAndroid Build Coastguard Worker    const TestRunner = await InitWasmGMTests({locateFile: (file) => '/build/'+file});
25*c8dee2aaSAndroid Build Coastguard Worker    TestRunner.Init();
26*c8dee2aaSAndroid Build Coastguard Worker    const gmNames = TestRunner.ListGMs();
27*c8dee2aaSAndroid Build Coastguard Worker    const testNames = TestRunner.ListTests();
28*c8dee2aaSAndroid Build Coastguard Worker
29*c8dee2aaSAndroid Build Coastguard Worker    if (gmNames.length) {
30*c8dee2aaSAndroid Build Coastguard Worker      await RunGM(TestRunner, gmNames[0]);
31*c8dee2aaSAndroid Build Coastguard Worker    }
32*c8dee2aaSAndroid Build Coastguard Worker    if (testNames.length) {
33*c8dee2aaSAndroid Build Coastguard Worker      RunTest(TestRunner, testNames[0]);
34*c8dee2aaSAndroid Build Coastguard Worker    }
35*c8dee2aaSAndroid Build Coastguard Worker  }
36*c8dee2aaSAndroid Build Coastguard Worker
37*c8dee2aaSAndroid Build Coastguard Worker  async function RunGM(TestRunner, name) {
38*c8dee2aaSAndroid Build Coastguard Worker    const canvas = document.getElementById('gm_canvas');
39*c8dee2aaSAndroid Build Coastguard Worker    const ctx = TestRunner.GetWebGLContext(canvas, 2);
40*c8dee2aaSAndroid Build Coastguard Worker    const grcontext = TestRunner.MakeGrContext(ctx);
41*c8dee2aaSAndroid Build Coastguard Worker
42*c8dee2aaSAndroid Build Coastguard Worker    log("Running gm " + name);
43*c8dee2aaSAndroid Build Coastguard Worker    const pngAndMetadata = TestRunner.RunGM(grcontext, name);
44*c8dee2aaSAndroid Build Coastguard Worker
45*c8dee2aaSAndroid Build Coastguard Worker    const b = new Blob([pngAndMetadata.png.buffer], {type: "image/png"});
46*c8dee2aaSAndroid Build Coastguard Worker    const bmp = await createImageBitmap(b);
47*c8dee2aaSAndroid Build Coastguard Worker    const canvasCtx = document.getElementById("png_canvas").getContext("2d");
48*c8dee2aaSAndroid Build Coastguard Worker    canvasCtx.drawImage(bmp, 0, 0);
49*c8dee2aaSAndroid Build Coastguard Worker  }
50*c8dee2aaSAndroid Build Coastguard Worker
51*c8dee2aaSAndroid Build Coastguard Worker  function RunTest(TestRunner, name) {
52*c8dee2aaSAndroid Build Coastguard Worker    const canvas = document.getElementById('gm_canvas');
53*c8dee2aaSAndroid Build Coastguard Worker    const ctx = TestRunner.GetWebGLContext(canvas, 2);
54*c8dee2aaSAndroid Build Coastguard Worker    // This sets up the GL context for all tests.  We do not need to pass the grcontext in to the
55*c8dee2aaSAndroid Build Coastguard Worker    // tests. The unit tests have a GrContextFactory which will do so as necessary.
56*c8dee2aaSAndroid Build Coastguard Worker    // It *is* important to make sure we have at least initialized the WebGL context for this
57*c8dee2aaSAndroid Build Coastguard Worker    // so the factory can work.
58*c8dee2aaSAndroid Build Coastguard Worker    const grcontext = TestRunner.MakeGrContext(ctx);
59*c8dee2aaSAndroid Build Coastguard Worker    if (!grcontext) {
60*c8dee2aaSAndroid Build Coastguard Worker      window._error = 'Could not make GrContext for tests';
61*c8dee2aaSAndroid Build Coastguard Worker      return;
62*c8dee2aaSAndroid Build Coastguard Worker    }
63*c8dee2aaSAndroid Build Coastguard Worker    log("Running test " + name);
64*c8dee2aaSAndroid Build Coastguard Worker    const result = TestRunner.RunTest(name);
65*c8dee2aaSAndroid Build Coastguard Worker    log('    ' + result.result, result.msg || '');
66*c8dee2aaSAndroid Build Coastguard Worker  }
67*c8dee2aaSAndroid Build Coastguard Worker</script>