|
1 <!-- |
|
2 Copyright (c) 2009 The Chromium Authors. All rights reserved. |
|
3 Use of this source code is governed by a BSD-style license that can be |
|
4 found in the LICENSE file. |
|
5 --> |
|
6 <!DOCTYPE html> |
|
7 <html> |
|
8 <head> |
|
9 <meta charset="utf-8"> |
|
10 <title>WebGL Out Of VRAM Test</title> |
|
11 <link rel="stylesheet" href="../resources/js-test-style.css"/> |
|
12 <script src="../resources/desktop-gl-constants.js" type="text/javascript"></script> |
|
13 <script src="../resources/js-test-pre.js"></script> |
|
14 <script src="../conformance/resources/webgl-test.js"></script> |
|
15 <script src="../conformance/resources/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 <script> |
|
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 = 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 debug(""); |
|
52 debug("Allocating textures."); |
|
53 |
|
54 var intervalId; |
|
55 var count = 0; |
|
56 var textureMem = 0; |
|
57 var textures = []; |
|
58 var size = 2048; |
|
59 var limit = (args.limit ? args.limit : 8192) * 1024 * 1024; |
|
60 |
|
61 debug("limit: " + InMB(limit)) |
|
62 |
|
63 function InMB(v) { |
|
64 return "" + Math.floor(v / 1024 / 1024) + "MB"; |
|
65 } |
|
66 |
|
67 function makeTexture() { |
|
68 if (gl.isContextLost()) { |
|
69 stop("out of memory"); |
|
70 return; |
|
71 } |
|
72 ++count; |
|
73 textureMem += size * size * 4; |
|
74 if (textureMem > limit) { |
|
75 stop("reached limit"); |
|
76 return; |
|
77 } |
|
78 debug ("creating texture #" + count + " mem = " + InMB(textureMem)); |
|
79 var texture = gl.createTexture(); |
|
80 textures.push(texture); |
|
81 gl.bindTexture(gl.TEXTURE_2D, texture); |
|
82 gl.texImage2D(gl.TEXTURE_2D, |
|
83 0, // level |
|
84 gl.RGBA, // internalFormat |
|
85 size, // width |
|
86 size, // height |
|
87 0, // border |
|
88 gl.RGBA, // format |
|
89 gl.UNSIGNED_BYTE, // type |
|
90 null); // data |
|
91 var err = gl.getError(); |
|
92 if (err != gl.NO_ERROR) { |
|
93 stop("out of memory"); |
|
94 return; |
|
95 } |
|
96 } |
|
97 |
|
98 intervalId = window.setInterval(makeTexture, 1000 / 15); |
|
99 |
|
100 } |
|
101 |
|
102 function stop(msg) { |
|
103 window.clearInterval(intervalId); |
|
104 testPassed(msg); |
|
105 finish(); |
|
106 } |
|
107 |
|
108 function finish() { |
|
109 debug(""); |
|
110 successfullyParsed = true; |
|
111 } |
|
112 |
|
113 </script> |
|
114 </body> |
|
115 </html> |