tor-browser

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

out-of-vram.html (2737B)


      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 
      7 <!DOCTYPE html>
      8 <html>
      9 <head>
     10 <meta charset="utf-8">
     11 <title>WebGL Out Of VRAM Test</title>
     12 <link rel="stylesheet" href="../resources/js-test-style.css"/>
     13 <script src="../js/js-test-pre.js"></script>
     14 <script src="../js/webgl-test-utils.js"></script>
     15 </head>
     16 <body>
     17 <div id="description"></div>
     18 <div id="console"></div>
     19 <canvas id="canvas" width="2" height="2"> </canvas>
     20 <script>
     21 "use strict";
     22 debug("This tests WebGL running out of vram.");
     23 
     24 debug("");
     25 debug("Canvas.getContext");
     26 
     27 var wtu = WebGLTestUtils;
     28 var canvas = document.getElementById("canvas");
     29 try {
     30  var gl = wtu.create3DContext(canvas);
     31 } catch(e) {
     32 }
     33 if (!gl) {
     34  testFailed("could not create context");
     35 } else {
     36  testPassed("context exists");
     37 
     38  var args = wtu.getUrlArguments();
     39 
     40  canvas.addEventListener('webglcontextlost', contextLost, false);
     41 
     42  function contextLost(e) {
     43    e.preventDefault();
     44    debug("***context lost***");
     45  }
     46 
     47  function contextRestored(e) {
     48    debug("***context restored***");
     49  }
     50 
     51  var program = wtu.setupTexturedQuad(gl);
     52  gl.useProgram(program);
     53 
     54  debug("");
     55  debug("Allocating textures.");
     56 
     57  var intervalId;
     58  var count = 0;
     59  var textureMem = 0;
     60  var textures = [];
     61  var size = 2048;
     62  var limit = (args.limit ? args.limit : 8192) * 1024 * 1024;
     63 
     64  debug("limit: " + InMB(limit))
     65 
     66  function InMB(v) {
     67    return "" + Math.floor(v / 1024 / 1024) + "MB";
     68  }
     69 
     70  function makeTexture() {
     71    if (gl.isContextLost()) {
     72      stop("out of memory");
     73      return;
     74    }
     75    ++count;
     76    textureMem += size * size * 4;
     77    if (textureMem > limit) {
     78      stop("reached limit");
     79      return;
     80    }
     81    debug ("creating texture #" + count + " mem = " + InMB(textureMem));
     82    var texture = gl.createTexture();
     83    textures.push(texture);
     84    gl.bindTexture(gl.TEXTURE_2D, texture);
     85    gl.texImage2D(gl.TEXTURE_2D,
     86                  0,                 // level
     87                  gl.RGBA,           // internalFormat
     88                  size,              // width
     89                  size,              // height
     90                  0,                 // border
     91                  gl.RGBA,           // format
     92                  gl.UNSIGNED_BYTE,  // type
     93                  null);             // data
     94    var err = gl.getError();
     95    if (err != gl.NO_ERROR) {
     96      stop("got error: " + wtu.glEnumToString(gl, err));
     97      return;
     98    }
     99        // use the texture
    100    wtu.clearAndDrawUnitQuad(gl);
    101  }
    102 
    103  intervalId = window.setInterval(makeTexture, 1000 / 15);
    104 
    105 }
    106 
    107 function stop(msg) {
    108  window.clearInterval(intervalId);
    109  testPassed(msg);
    110  finishTest();
    111 }
    112 </script>
    113 </body>
    114 </html>