tor-browser

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

offscreencanvas-timer-query.html (2664B)


      1 <!--
      2 Copyright (c) 2019 The Khronos Group Inc.
      3 Use of this source code is governed by an MIT-style license that can be
      4 found in the LICENSE.txt file.
      5 -->
      6 <!DOCTYPE html>
      7 <html>
      8 <head>
      9 <meta charset="utf-8">
     10 <title>Test for Timer Query objects with OffscreenCanvas</title>
     11 <link rel="stylesheet" href="../../resources/js-test-style.css"/>
     12 <script src="../../js/js-test-pre.js"></script>
     13 <script src="../../js/webgl-test-utils.js"></script>
     14 </head>
     15 <body>
     16  <div id="description"></div>
     17  <div id="console"></div>
     18  <script id='myWorker' type='text/worker'>
     19  function tick(callback) {
     20      function tickImpl() {
     21          const res = callback();
     22          if (res) {
     23              if (requestAnimationFrame) {
     24                  requestAnimationFrame(tickImpl);
     25              } else {
     26                  setTimeout(tickImpl, 10);
     27              }
     28          }
     29      }
     30 
     31      tickImpl();
     32  }
     33 
     34  self.onmessage = function(e) {
     35      let canvas = new OffscreenCanvas(128, 128);
     36      let gl = canvas.getContext("webgl2");
     37      let ext = gl.getExtension("EXT_disjoint_timer_query_webgl2");
     38      if (!ext) {
     39          self.postMessage("PASSED - no EXT_disjoint_timer_query_webgl2 extension - this is legal");
     40          return false;
     41      }
     42      let query = gl.createQuery();
     43      gl.beginQuery(ext.TIME_ELAPSED_EXT, query);
     44      gl.endQuery(ext.TIME_ELAPSED_EXT);
     45      gl.clearColor(0.0, 1.0, 0.0, 1.0);
     46      gl.clear(gl.COLOR_BUFFER_BIT);
     47      tick(function() {
     48          const status = gl.getQueryParameter(query, gl.QUERY_RESULT_AVAILABLE);
     49          if (status) {
     50              self.postMessage("PASSED - timer query object completed successfully on worker");
     51              return false;
     52          } else {
     53              const err = gl.getError();
     54              if (err != 0) {
     55                  self.postMessage("FAILED - GL error " + err);
     56                  return false;
     57              }
     58          }
     59          return true;
     60      });
     61  };
     62  </script>
     63  <script>
     64    "use strict";
     65    description("This test ensures that timer query objects work with the WebGL 2.0 context created via OffscreenCanvas.");
     66    if (!window.OffscreenCanvas) {
     67        testPassed("No OffscreenCanvas support");
     68        finishTest();
     69    } else {
     70      var blob = new Blob([document.getElementById('myWorker').textContent]);
     71      var worker = new Worker(URL.createObjectURL(blob));
     72      worker.onmessage = function(msg) {
     73          if (msg.data.startsWith("PASSED")) {
     74              testPassed(msg.data);
     75          } else {
     76              testFailed(msg.data);
     77          }
     78          finishTest();
     79      }
     80      worker.postMessage("Start Worker");
     81    }
     82  </script>
     83 </body>
     84 </html>