tor-browser

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

out-of-resources.html (3637B)


      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 Resources Test</title>
     12 <link rel="stylesheet" href="../resources/js-test-style.css"/>
     13 <script src="../../devtools/src/debug/webgl-debug.js"></script>
     14 <script src="../js/js-test-pre.js"></script>
     15 <script src="../js/webgl-test-utils.js"></script>
     16 </head>
     17 <body>
     18 <div id="description"></div>
     19 <div id="console"></div>
     20 <canvas id="canvas" width="2" height="2"> </canvas>
     21 <canvas id="canvas2" width="2" height="2"> </canvas>
     22 <script>
     23 "use strict";
     24 wtu = WebGLTestUtils;
     25 window.onload = init;
     26 debug("Tests a WebGL program that tries to use all of vram.");
     27 
     28 function init() {
     29  if (confirm(
     30      "After clicking OK your machine may become unresponsive or crash.")) {
     31    main();
     32  } else {
     33    debug("cancelled");
     34  }
     35 }
     36 
     37 function main() {
     38  debug("");
     39  debug("Canvas.getContext");
     40 
     41  var gl = wtu.create3DContext("canvas");
     42  if (!gl) {
     43    testFailed("context does not exist");
     44  } else {
     45    testPassed("context exists");
     46 
     47    var program = wtu.setupColorQuad(gl);
     48    gl.useProgram(program);
     49 
     50    debug("");
     51    debug("Checking for out of memory handling.");
     52 
     53    var size = gl.getParameter(gl.MAX_RENDERBUFFER_SIZE);
     54    debug("max render buffer size: " + size);
     55 
     56    var allocateFramebuffers = true;
     57    var itervalId;
     58    var count = 0;
     59 
     60    gl = WebGLDebugUtils.makeDebugContext(gl, function(err, functionName, args) {
     61          assertMsg(err == gl.OUT_OF_MEMORY,
     62                    "correctly returns gl.OUT_OF_MEMORY when out of memory");
     63          stop("got: " + wtu.glEnumToString(gl, err));
     64        });
     65 
     66    var fbos = [];
     67 
     68    intervalId = window.setInterval(function() {
     69      ++count;
     70      var mem = count * size * size * 4;
     71      debug("#" + count + " : memory allocated so far " + (mem / 1024 / 1024) + "MB");
     72      var tex = gl.createTexture();
     73      gl.bindTexture(gl.TEXTURE_2D, tex);
     74      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
     75      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
     76      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
     77      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
     78      gl.texImage2D(gl.TEXTURE_2D,
     79                    0,                 // level
     80                    gl.RGBA,           // internalFormat
     81                    size,              // width
     82                    size,              // height
     83                    0,                 // border
     84                    gl.RGBA,           // format
     85                    gl.UNSIGNED_BYTE,  // type
     86                    null);             // data
     87      var err = gl.getError();
     88      if (err != gl.NO_ERROR) {
     89        stop("got error: " + wtu.glEnumToString(gl, err));
     90        return;
     91      }
     92      if (allocateFramebuffers) {
     93        var fb = gl.createFramebuffer();
     94        gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
     95        gl.framebufferTexture2D(
     96            gl.FRAMEBUFFER,
     97            gl.COLOR_ATTACHMENT0,
     98            gl.TEXTURE_2D,
     99            tex,
    100            0);
    101        var status = gl.checkFramebufferStatus(gl.FRAMEBUFFER);
    102        if (status != gl.FRAMEBUFFER_COMPLETE) {
    103          stop("got: " + wtu.glEnumToString(gl, status));
    104          return;
    105        }
    106        // use the framebuffer
    107        wtu.drawFloatColorQuad(gl, [1, Math.random(), 1, 1]);
    108      }
    109    }, 200);
    110 
    111    function stop(msg) {
    112      debug(msg);
    113      window.clearInterval(intervalId);
    114      finishTest();
    115    }
    116  }
    117 }
    118 </script>
    119 </body>
    120 </html>