3 <script src="../../../http/tests/inspector/inspector-test.js"></script>
4 <script src="../canvas-profiler-test.js"></script>
11 var sampleAttributes1 = {
12 "strokeStyle": "#000001",
13 "fillStyle": "#000002",
22 "shadowColor": "#000003",
23 "globalCompositeOperation": "source-in",
24 "font": "12px sans-serif",
26 "textBaseline": "top",
30 var sampleAttributes2 = {
31 "strokeStyle": "#100001",
32 "fillStyle": "#100002",
41 "shadowColor": "#100003",
42 "globalCompositeOperation": "xor",
43 "font": "13px sans-serif",
45 "textBaseline": "middle",
49 function assignAttributes(attributes)
51 for (var attribute in attributes)
52 ctx[attribute] = attributes[attribute];
55 function assertAttributes(attributes)
57 for (var attribute in attributes)
58 console.assert(ctx[attribute] === attributes[attribute], "Expected value for attribute " + attribute + ": " + attributes[attribute] + ", but was: " + ctx[attribute]);
61 function assertNumberOfCallsInLog(expected)
63 var calls = ctxResource.calls();
64 if (calls.length !== expected) {
66 for (var i = 0; i < 10 && calls[i]; ++i)
67 names.push(calls[i].functionName());
68 console.error("Expected size of the 2D context call log: " + expected + ", but was: " + calls.length + ", names: " + names);
72 function testDrawingAttributes()
74 assertNumberOfCallsInLog(0);
75 assignAttributes(sampleAttributes1);
76 assertAttributes(sampleAttributes1);
77 assertNumberOfCallsInLog(0);
79 // Save previous attribute values and set new values.
81 assignAttributes(sampleAttributes2);
82 assertAttributes(sampleAttributes2);
83 assertNumberOfCallsInLog(1);
85 // Restore previous attribute values.
87 assertAttributes(sampleAttributes1);
88 // Call log should be empty after save() and restore() calls.
89 assertNumberOfCallsInLog(0);
92 function testSaveRestoreSequence()
94 assertNumberOfCallsInLog(0);
97 assertNumberOfCallsInLog(0);
99 assertNumberOfCallsInLog(1);
101 assertNumberOfCallsInLog(2);
103 assertNumberOfCallsInLog(3);
105 assertNumberOfCallsInLog(2);
107 assertNumberOfCallsInLog(1);
109 assertNumberOfCallsInLog(0);
112 assertNumberOfCallsInLog(0);
115 function callPathMethods()
120 ctx.lineTo(111, 112);
124 function clearContextResourceLog()
126 while (ctxResource.calls().length)
127 ctxResource.calls().pop();
128 assertNumberOfCallsInLog(0);
131 function testPathMethodsSequence()
133 assertNumberOfCallsInLog(0);
135 assertNumberOfCallsInLog(3); // [beginPath,moveTo,lineTo]
137 assertNumberOfCallsInLog(3); // old methods should have been cleared
138 clearContextResourceLog();
141 function testClipMethods()
143 assertNumberOfCallsInLog(0);
146 assertNumberOfCallsInLog(4);
148 assertNumberOfCallsInLog(5);
150 assertNumberOfCallsInLog(8);
152 assertNumberOfCallsInLog(8); // the last calls should have been cleared
154 assertNumberOfCallsInLog(5); // [save,beginPath,moveTo,lineTo,restore]
156 assertNumberOfCallsInLog(1); // [beginPath]
157 clearContextResourceLog();
160 function testMatrixMethods()
162 assertNumberOfCallsInLog(0);
164 ctx.translate(100, 200);
167 ctx.translate(-100, -200);
168 assertNumberOfCallsInLog(5);
169 ctx.setTransform(1, 2, 3, 4, 5, 6);
171 assertNumberOfCallsInLog(3); // [save,setTransform,rotate]
173 assertNumberOfCallsInLog(0);
176 function testMatrixMethodsWithPathMethods()
178 assertNumberOfCallsInLog(0);
180 ctx.translate(100, 200);
183 ctx.translate(-100, -200);
184 assertNumberOfCallsInLog(5);
186 ctx.rect(1, 1, 10, 10);
188 assertNumberOfCallsInLog(8);
190 assertNumberOfCallsInLog(8); // [save,translate,scale,rotate,translate,beginPath,rect,restore]
192 assertNumberOfCallsInLog(1); // [beginPath]
193 clearContextResourceLog();
196 function testNestedSaveRestoreCalls()
198 assertNumberOfCallsInLog(0);
200 ctx.translate(100, 200);
202 ctx.rect(1, 1, 10, 10);
207 assertNumberOfCallsInLog(10); // [save,translate,beginPath,rect,clip,save,rotate,beginPath,moveTo,lineTo]
209 assertNumberOfCallsInLog(11);
211 assertNumberOfCallsInLog(9); // [save,translate,save,rotate,beginPath,moveTo,lineTo,restore,restore]
213 assertNumberOfCallsInLog(9); // no effect
214 ctx.setTransform(1, 2, 3, 4, 5, 6);
215 assertNumberOfCallsInLog(10); // nothing to remove from the log
217 assertNumberOfCallsInLog(2); // [setTransform,beginPath]
218 clearContextResourceLog();
221 function testDeepNestedSaveRestoreCalls()
223 assertNumberOfCallsInLog(0);
224 for (var i = 0; i < 10; ++i) {
228 assertNumberOfCallsInLog(20);
230 assertNumberOfCallsInLog(23);
231 for (var i = 0; i < 10; ++i) {
235 ctx.transform(3, 3, 3, 3, 3, 3);
237 assertNumberOfCallsInLog(24 + i);
239 assertNumberOfCallsInLog(33);
241 assertNumberOfCallsInLog(1); // now clear up the log
242 clearContextResourceLog();
245 function createAndRunCanvas2DProgram()
247 ctx = createCanvas2DContext();
248 console.assert(ctx, "Failed to create 2D context");
250 ctxResource = ctx["__resourceObject"];
251 console.assert(ctxResource, "2D context is not wrapped");
253 rawCtx = ctxResource.wrappedObject();
254 console.assert(rawCtx, "No raw 2D context found");
255 console.assert(ctx !== rawCtx, "Proxy and RAW contexts should not be the same");
257 testDrawingAttributes();
258 testSaveRestoreSequence();
259 testPathMethodsSequence();
262 testMatrixMethodsWithPathMethods();
263 testNestedSaveRestoreCalls();
264 testDeepNestedSaveRestoreCalls();
271 InspectorTest.enableCanvasAgent(step1);
274 InspectorTest.evaluateInPage("createAndRunCanvas2DProgram()", step2);
276 function step2(error)
278 InspectorTest.assertEquals("SUCCESS", error.description);
279 InspectorTest.completeTest();
285 <body onload="runTest()">
287 Tests Canvas 2D capturing basics.
289 <a href="https://bugs.webkit.org/show_bug.cgi?id=100752">Bug 100752</a>