3 <script src="../../../http/tests/inspector/inspector-test.js"></script>
4 <script src="../canvas-profiler-test.js"></script>
7 window.internals.settings.setWebGLErrorsToConsoleEnabled(false);
11 function createCanvasContext()
13 gl = createWebGLContext(document.getElementById("canvas"));
14 console.assert(gl, "Failed to create a WebGL context");
17 function doCanvasCalls()
19 gl.bindBuffer(gl.ARRAY_BUFFER, gl.createBuffer());
20 gl.bufferData(gl.ARRAY_BUFFER, 5, gl.STATIC_DRAW); // 5 zeros
22 var bufferView = new Uint16Array([0x0000, 0x1122, 0x3344, 0x5566, 0x7788, 0x99aa, 0xbbcc, 0xddee, 0xffff]);
23 gl.bufferData(gl.ARRAY_BUFFER, bufferView, gl.DYNAMIC_DRAW);
25 var bufferView2 = new Int8Array([1, 1, 2, 2, 3, 3]);
26 gl.bufferSubData(gl.ARRAY_BUFFER, 2, bufferView2);
28 gl.bufferSubData(gl.ARRAY_BUFFER, 8, new ArrayBuffer(4)); // zero out [0x7788, 0x99aa]
30 var subBufferView = new Uint8Array(bufferView.buffer, 14, 4); // refers to [0xddee, 0xffff]
31 gl.bufferSubData(gl.ARRAY_BUFFER, 0, subBufferView);
33 gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([-1, 0, 1]), gl.DYNAMIC_DRAW);
34 gl.bufferSubData(gl.ARRAY_BUFFER, 0, new Uint32Array([1, 2, 3])); // full replacement
35 gl.bufferSubData(gl.ARRAY_BUFFER, 0, new Int16Array([-1, -2, -3, -4, -5, -6])); // full replacement
36 gl.bufferSubData(gl.ARRAY_BUFFER, 0, new Int8Array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])); // full replacement
37 gl.bufferSubData(gl.ARRAY_BUFFER, 1, new Uint32Array([0xffffffff, 0xffffffff])); // -1 x8
39 var err = gl.getError();
40 console.assert(err === gl.NO_ERROR, "Should be no GL errors, but was: " + err);
49 InspectorTest.enableCanvasAgent(step1);
52 InspectorTest.evaluateInPage("createCanvasContext()", step2);
56 CanvasAgent.startCapturing(didStartCapturing);
58 function didStartCapturing(error, id)
60 InspectorTest.assertTrue(!error && !!id, "Unexpected error: " + error);
61 InspectorTest.addResult("\nStarted capturing.");
63 InspectorTest.evaluateInPage("doCanvasCalls()", didCanvasCalls);
65 function didCanvasCalls()
67 CanvasAgent.stopCapturing(traceLogId, didStopCapturing);
69 function didStopCapturing()
71 InspectorTest.addResult("Stopped capturing.");
72 CanvasAgent.getTraceLog(traceLogId, 0, undefined, didReceiveTraceLog);
74 function didReceiveTraceLog(error, traceLogValue)
76 traceLog = traceLogValue;
77 InspectorTest.assertTrue(!error && !!traceLog, "Unexpected error: " + error);
78 InspectorTest.assertTrue(traceLog.calls.length > 0, "Expected not empty trace log calls array");
79 resourceIds = InspectorTest.collectResourceIdsFromTraceLog(traceLog);
80 replayUntilNextBufferDataCall(0);
82 function replayUntilNextBufferDataCall(offset)
84 var bufferDataCalls = ["bindBuffer", "bufferData", "bufferSubData"];
85 var calls = traceLog.calls;
86 for (var i = offset, n = calls.length; i < n; ++i) {
88 if (bufferDataCalls.indexOf(call.functionName) !== -1) {
89 CanvasAgent.replayTraceLog(traceLogId, i, didReplayTraceLog.bind(null, i));
93 InspectorTest.completeTest();
95 function didReplayTraceLog(stepNo)
97 InspectorTest.addResult("\nReplayed call #" + stepNo);
98 CanvasAgent.getResourceState(traceLogId, resourceIds["WebGLBuffer@1"], didGetResourceState);
100 function didGetResourceState(error, resourceState)
102 InspectorTest.assertTrue(!error && !!resourceState, "Unexpected error: " + error);
103 var descriptor = InspectorTest.findResourceStateDescriptor(resourceState, "bufferData");
105 InspectorTest.addResult("No bufferData available");
107 var remoteObject = descriptor.value && descriptor.value.remoteObject;
109 InspectorTest.addResult("FAIL: Internal error in the protocol: no \"remoteObject\" property in a CallArgument");
111 var obj = WebInspector.runtimeModel.createRemoteObject(remoteObject);
112 obj.getOwnProperties(didGetOwnProperties.bind(null, descriptor.value.description));
116 replayUntilNextBufferDataCall(stepNo + 1);
119 function didGetOwnProperties(description, properties)
121 function formatNumber(value)
123 if (/^Uint16Array/.test(description)) {
124 var str = "0000" + Number(value || 0).toString(16);
125 str = str.replace(/^0+(.{4,})$/, "$1");
132 for (var i = 0; i < properties.length; ++i) {
133 var index = properties[i].name;
134 var value = properties[i].value;
136 result[+index] = formatNumber(value && value.value);
138 InspectorTest.addResult("bufferData: " + description + ": [" + result.join(", ") + "]");
139 replayUntilNextBufferDataCall(stepNo + 1);
146 <body onload="runTest()">
148 Tests WebGLBuffer data state during the replay.
150 <canvas id="canvas"></canvas>