3 <script src="../../../http/tests/inspector/inspector-test.js"></script>
4 <script src="../canvas-profiler-test.js"></script>
7 window.internals.settings.setWebGLErrorsToConsoleEnabled(false);
12 function createCanvasContext()
14 ctx = createCanvas2DContext();
15 ctx.canvas.width = 32;
16 ctx.canvas.height = 32;
18 gl = createWebGLContext(document.getElementById("canvas"));
19 console.assert(gl, "Failed to create a WebGL context");
22 function doCanvasCalls()
26 var texture = gl.createTexture();
27 gl.bindTexture(gl.TEXTURE_2D, texture);
28 gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, ctx.canvas);
30 gl.activeTexture(gl.TEXTURE2);
31 gl.bindBuffer(gl.ARRAY_BUFFER, gl.createBuffer());
32 gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([0,0,0, 1,1,1]), gl.STATIC_DRAW);
34 gl.bindFramebuffer(gl.FRAMEBUFFER, gl.createFramebuffer());
36 gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
37 var texture = gl.createTexture();
38 gl.bindTexture(gl.TEXTURE_2D, texture);
39 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
40 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_NEAREST);
41 gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 512, 512, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
43 var renderbuffer = gl.createRenderbuffer();
44 gl.bindRenderbuffer(gl.RENDERBUFFER, renderbuffer);
45 gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_COMPONENT16, 512, 512);
46 gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);
47 gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.RENDERBUFFER, renderbuffer);
49 gl.blendEquation(gl.FUNC_SUBTRACT);
50 gl.blendEquationSeparate(gl.FUNC_ADD, gl.FUNC_REVERSE_SUBTRACT);
51 gl.blendFunc(gl.ONE_MINUS_SRC_COLOR, gl.ONE_MINUS_DST_COLOR);
52 gl.blendFuncSeparate(gl.ZERO, gl.ONE, gl.ONE, gl.ZERO);
54 gl.clear(gl.DEPTH_BUFFER_BIT | gl.COLOR_BUFFER_BIT);
56 gl.cullFace(gl.FRONT_AND_BACK);
57 gl.depthFunc(gl.NOTEQUAL);
59 gl.disable(gl.DITHER);
60 gl.enable(gl.POLYGON_OFFSET_FILL);
62 var vs = gl.createShader(gl.VERTEX_SHADER);
63 gl.shaderSource(vs, "attribute vec4 aVertex; attribute vec4 aColor; varying vec4 vColor; void main() { vColor = aColor; gl_Position = aVertex; }");
66 var fs = gl.createShader(gl.FRAGMENT_SHADER);
67 gl.shaderSource(fs, "precision mediump float; uniform vec4 uColor; void main() { gl_FragColor = uColor; }");
70 var program = gl.createProgram();
71 gl.attachShader(program, vs);
72 gl.attachShader(program, fs);
73 gl.bindAttribLocation(program, 0, "aVertex");
74 gl.bindAttribLocation(program, 1, "aColor");
75 gl.linkProgram(program);
76 gl.useProgram(program);
78 var location = gl.getUniformLocation(program, "uColor");
81 "OES_standard_derivatives",
82 "OES_vertex_array_object",
83 "EXT_texture_filter_anisotropic",
85 for (var i = 0, extension; extension = extensions[i]; ++i) {
86 var result1 = gl.getExtension(extension);
87 var result2 = gl.getExtension("WEBKIT_" + extension);
88 console.assert(result1 || result2, "Expected WebGL extension \"" + extension + "\" to be supported.");
91 var err = gl.getError();
92 console.assert(err === gl.NO_ERROR, "Should be no GL errors, but was: " + err);
99 InspectorTest.enableCanvasAgent(step1);
102 InspectorTest.evaluateInPage("createCanvasContext()", step2);
106 CanvasAgent.startCapturing(didStartCapturing);
108 function didStartCapturing(error, id)
110 InspectorTest.assertTrue(!error && !!id, "Unexpected error: " + error);
111 InspectorTest.addResult("\nStarted capturing.");
113 InspectorTest.evaluateInPage("doCanvasCalls()", didCanvasCalls);
115 function didCanvasCalls()
117 CanvasAgent.stopCapturing(traceLogId, didStopCapturing);
119 function didStopCapturing()
121 InspectorTest.addResult("Stopped capturing.");
122 CanvasAgent.getTraceLog(traceLogId, 0, undefined, didReceiveTraceLog);
124 function didReceiveTraceLog(error, traceLog)
126 InspectorTest.assertTrue(!error && !!traceLog, "Unexpected error: " + error);
127 var traceLogCallsNumber = traceLog.calls.length;
128 InspectorTest.assertTrue(traceLogCallsNumber > 0, "Expected not empty trace log calls array");
129 resourceIds = InspectorTest.collectResourceIdsFromTraceLog(traceLog);
130 CanvasAgent.replayTraceLog(traceLogId, traceLogCallsNumber - 1, didReplayTraceLog);
132 function didReplayTraceLog(error, resourceState)
134 InspectorTest.assertTrue(!error && !!resourceState, "Unexpected error: " + error);
135 InspectorTest.addResult("\n--- WebGLRenderingContext state ---");
136 InspectorTest.dumpResourceState(resourceState);
137 CanvasAgent.getResourceState(traceLogId, resourceIds["WebGLBuffer@1"], didGetWebGLBufferState);
139 function didGetWebGLBufferState(error, resourceState)
141 InspectorTest.assertTrue(!error && !!resourceState, "Unexpected error: " + error);
142 InspectorTest.addResult("\n--- WebGLBuffer state ---");
143 InspectorTest.dumpResourceState(resourceState);
144 CanvasAgent.getResourceState(traceLogId, resourceIds["WebGLTexture@1"], didGetWebGLTextureState);
146 function didGetWebGLTextureState(error, resourceState)
148 InspectorTest.assertTrue(!error && !!resourceState, "Unexpected error: " + error);
149 InspectorTest.addResult("\n--- WebGLTexture state ---");
150 InspectorTest.dumpResourceState(resourceState);
151 CanvasAgent.getResourceState(traceLogId, resourceIds["WebGLProgram@1"], didGetWebGLProgramState);
153 function didGetWebGLProgramState(error, resourceState)
155 InspectorTest.assertTrue(!error && !!resourceState, "Unexpected error: " + error);
156 InspectorTest.addResult("\n--- WebGLProgram state ---");
157 InspectorTest.dumpResourceState(resourceState);
158 CanvasAgent.getResourceState(traceLogId, resourceIds["WebGLShader@1"], didGetWebGLShaderState);
160 function didGetWebGLShaderState(error, resourceState)
162 InspectorTest.assertTrue(!error && !!resourceState, "Unexpected error: " + error);
163 InspectorTest.addResult("\n--- WebGLShader state ---");
164 InspectorTest.dumpResourceState(resourceState);
165 CanvasAgent.getResourceState(traceLogId, resourceIds["WebGLFramebuffer@1"], didGetWebGLFramebufferState);
167 function didGetWebGLFramebufferState(error, resourceState)
169 InspectorTest.assertTrue(!error && !!resourceState, "Unexpected error: " + error);
170 InspectorTest.addResult("\n--- WebGLFramebuffer state ---");
171 InspectorTest.dumpResourceState(resourceState);
172 CanvasAgent.getResourceState(traceLogId, resourceIds["WebGLRenderbuffer@1"], didGetWebGLRenderbufferState);
174 function didGetWebGLRenderbufferState(error, resourceState)
176 InspectorTest.assertTrue(!error && !!resourceState, "Unexpected error: " + error);
177 InspectorTest.addResult("\n--- WebGLRenderbuffer state ---");
178 InspectorTest.dumpResourceState(resourceState);
179 CanvasAgent.getResourceState(traceLogId, resourceIds["WebGLUniformLocation@1"], didGetWebGLUniformLocationState);
181 function didGetWebGLUniformLocationState(error, resourceState)
183 InspectorTest.assertTrue(!error && !!resourceState, "Unexpected error: " + error);
184 InspectorTest.addResult("\n--- WebGLUniformLocation state ---");
185 InspectorTest.dumpResourceState(resourceState);
186 InspectorTest.completeTest();
192 <body onload="runTest()">
194 Tests canvas WebGL ResourceState during the replay.
196 <canvas id="canvas"></canvas>