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>