/content/canvas/test/webgl/extra/out-of-vram.html
http://github.com/zpao/v8monkey · HTML · 115 lines · 94 code · 16 blank · 5 comment · 0 complexity · 08d9deef636fd9a574009cef3649f95d MD5 · raw file
- <!--
- Copyright (c) 2009 The Chromium Authors. All rights reserved.
- Use of this source code is governed by a BSD-style license that can be
- found in the LICENSE file.
- -->
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title>WebGL Out Of VRAM Test</title>
- <link rel="stylesheet" href="../resources/js-test-style.css"/>
- <script src="../resources/desktop-gl-constants.js" type="text/javascript"></script>
- <script src="../resources/js-test-pre.js"></script>
- <script src="../conformance/resources/webgl-test.js"></script>
- <script src="../conformance/resources/webgl-test-utils.js"></script>
- </head>
- <body>
- <div id="description"></div>
- <div id="console"></div>
- <canvas id="canvas" width="2" height="2"> </canvas>
- <script>
- debug("This tests WebGL running out of vram.");
- debug("");
- debug("Canvas.getContext");
- var wtu = WebGLTestUtils;
- var canvas = document.getElementById("canvas");
- try {
- var gl = create3DContext(canvas);
- } catch(e) {
- }
- if (!gl) {
- testFailed("could not create context");
- } else {
- testPassed("context exists");
- var args = wtu.getUrlArguments();
- canvas.addEventListener('webglcontextlost', contextLost, false);
- function contextLost(e) {
- e.preventDefault();
- debug("***context lost***");
- }
- function contextRestored(e) {
- debug("***context restored***");
- }
- debug("");
- debug("Allocating textures.");
- var intervalId;
- var count = 0;
- var textureMem = 0;
- var textures = [];
- var size = 2048;
- var limit = (args.limit ? args.limit : 8192) * 1024 * 1024;
- debug("limit: " + InMB(limit))
- function InMB(v) {
- return "" + Math.floor(v / 1024 / 1024) + "MB";
- }
- function makeTexture() {
- if (gl.isContextLost()) {
- stop("out of memory");
- return;
- }
- ++count;
- textureMem += size * size * 4;
- if (textureMem > limit) {
- stop("reached limit");
- return;
- }
- debug ("creating texture #" + count + " mem = " + InMB(textureMem));
- var texture = gl.createTexture();
- textures.push(texture);
- gl.bindTexture(gl.TEXTURE_2D, texture);
- gl.texImage2D(gl.TEXTURE_2D,
- 0, // level
- gl.RGBA, // internalFormat
- size, // width
- size, // height
- 0, // border
- gl.RGBA, // format
- gl.UNSIGNED_BYTE, // type
- null); // data
- var err = gl.getError();
- if (err != gl.NO_ERROR) {
- stop("out of memory");
- return;
- }
- }
- intervalId = window.setInterval(makeTexture, 1000 / 15);
- }
- function stop(msg) {
- window.clearInterval(intervalId);
- testPassed(msg);
- finish();
- }
- function finish() {
- debug("");
- successfullyParsed = true;
- }
- </script>
- </body>
- </html>