Changeset 143206 in webkit
- Timestamp:
- Feb 18, 2013 5:45:36 AM (11 years ago)
- Location:
- trunk
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r143205 r143206 1 2013-02-18 Andrey Adaikin <aandrey@chromium.org> 2 3 Web Inspector: [Canvas] group replay log calls by frames 4 https://bugs.webkit.org/show_bug.cgi?id=110101 5 6 Reviewed by Pavel Feldman. 7 8 * inspector/profiler/canvas-profiler-test.js: 9 * inspector/profiler/canvas2d/canvas-replay-log-grid-expected.txt: 10 * inspector/profiler/canvas2d/canvas-replay-log-grid.html: 11 * inspector/profiler/canvas2d/canvas-stack-trace-expected.txt: 12 1 13 2013-02-18 Ádám Kallai <kadam@inf.u-szeged.hu> 2 14 -
trunk/LayoutTests/inspector/profiler/canvas-profiler-test.js
r141403 r143206 65 65 call.value ? "value:" + call.value.description : "", 66 66 call.isDrawingCall ? "isDrawingCall:true" : "", 67 call.isFrameEndCall ? "isFrameEndCall:true" : "", 67 68 "sourceURL:" + formatSourceURL(call.sourceURL), 68 69 "lineNumber:" + call.lineNumber, -
trunk/LayoutTests/inspector/profiler/canvas2d/canvas-replay-log-grid-expected.txt
r143000 r143206 3 3 Bug 109592 4 4 5 | Draw call group #1 | | 6 1 | beginPath() | canvas-replay-log-grid.html:26 | 7 2 | rect(0, 0, 100, 100) | canvas-replay-log-grid.html:27 | 8 3 | context.fillStyle = red | canvas-replay-log-grid.html:28 | 9 4 | fill() | canvas-replay-log-grid.html:29 | 10 | Draw call group #2 | | 11 5 | beginPath() | canvas-replay-log-grid.html:26 | 12 6 | rect(5, 5, 95, 95) | canvas-replay-log-grid.html:27 | 13 7 | context.fillStyle = green | canvas-replay-log-grid.html:28 | 14 8 | fill() | canvas-replay-log-grid.html:29 | 15 | Draw call group #3 | | 16 9 | beginPath() | canvas-replay-log-grid.html:26 | 17 10 | rect(10, 10, 90, 90) | canvas-replay-log-grid.html:27 | 18 11 | context.fillStyle = blue | canvas-replay-log-grid.html:28 | 19 12 | fill() | canvas-replay-log-grid.html:29 | 20 | Draw call group #4 | | 21 13 | beginPath() | canvas-replay-log-grid.html:26 | 22 14 | rect(15, 15, 85, 85) | canvas-replay-log-grid.html:27 | 23 15 | context.fillStyle = yellow | canvas-replay-log-grid.html:28 | 24 16 | fill() | canvas-replay-log-grid.html:29 | 5 | Frame #1 | | | 6 | Draw call group #1 | | | 7 1 | beginPath() | canvas-replay-log-grid.html:26 | | 8 2 | rect(0, 0, 100, 100) | canvas-replay-log-grid.html:27 | | 9 3 | context.fillStyle = red | canvas-replay-log-grid.html:28 | | 10 4 | fill() | canvas-replay-log-grid.html:29 | | 11 | Draw call group #2 | | | 12 5 | beginPath() | canvas-replay-log-grid.html:26 | | 13 6 | rect(5, 5, 95, 95) | canvas-replay-log-grid.html:27 | | 14 7 | context.fillStyle = green | canvas-replay-log-grid.html:28 | | 15 8 | fill() | canvas-replay-log-grid.html:29 | | 16 | Frame #2 | | | 17 | Draw call group #3 | | | 18 9 | beginPath() | canvas-replay-log-grid.html:26 | | 19 10 | rect(10, 10, 90, 90) | canvas-replay-log-grid.html:27 | | 20 11 | context.fillStyle = blue | canvas-replay-log-grid.html:28 | | 21 12 | fill() | canvas-replay-log-grid.html:29 | | 22 | Draw call group #4 | | | 23 13 | beginPath() | canvas-replay-log-grid.html:26 | | 24 14 | rect(15, 15, 85, 85) | canvas-replay-log-grid.html:27 | | 25 15 | context.fillStyle = yellow | canvas-replay-log-grid.html:28 | | 26 16 | fill() | canvas-replay-log-grid.html:29 | | 27 | Draw call group #5 | | | 28 17 | beginPath() | canvas-replay-log-grid.html:26 | | 29 18 | rect(20, 20, 80, 80) | canvas-replay-log-grid.html:27 | | 30 19 | context.fillStyle = black | canvas-replay-log-grid.html:28 | | 31 20 | fill() | canvas-replay-log-grid.html:29 | | 25 32 -
trunk/LayoutTests/inspector/profiler/canvas2d/canvas-replay-log-grid.html
r143000 r143206 43 43 profilesPanel._onProfileTypeSelected({data: profileType}); 44 44 45 InspectorTest.override(profileType, "_isSingleFrameMode", function() { return false; }, true /*sticky*/); 45 46 InspectorTest.addSniffer(profileType, "_didStartCapturingFrame", didStartCapturingFrame); 46 47 profilesPanel.toggleRecordButton(); … … 53 54 traceLogId = profileHeader.traceLogId(); 54 55 profilesPanel.showProfile(profileHeader); 55 InspectorTest.evaluateInConsole("doSomeCanvasCalls(4)", didSomeCanvasCalls); 56 InspectorTest.addSniffer(profileHeader, "_updateCapturingStatus", didReceiveFirstFrame); 57 InspectorTest.evaluateInConsole("doSomeCanvasCalls(2)"); 56 58 } 57 function did SomeCanvasCalls()59 function didReceiveFirstFrame(traceLog) 58 60 { 59 InspectorTest.addSniffer(profileHeader, "_updateCapturingStatus", onUpdateCapturingStatus); 61 if (!traceLog || traceLog.calls.length < 2) { 62 InspectorTest.addSniffer(profileHeader, "_updateCapturingStatus", didReceiveFirstFrame); 63 return; 64 } 65 InspectorTest.evaluateInConsole("doSomeCanvasCalls(3)", didSecondFrameCalls); 66 } 67 function didSecondFrameCalls() 68 { 69 InspectorTest.addSniffer(profileHeader, "_updateCapturingStatus", didReceiveSecondFrame); 60 70 profilesPanel.toggleRecordButton(); 61 71 } 62 function onUpdateCapturingStatus()72 function didReceiveSecondFrame() 63 73 { 64 74 if (profileHeader._alive) { 65 InspectorTest.addSniffer(profileHeader, "_updateCapturingStatus", onUpdateCapturingStatus);75 InspectorTest.addSniffer(profileHeader, "_updateCapturingStatus", didReceiveSecondFrame); 66 76 return; 67 77 } … … 112 122 line += alignText(textRows[i][j], textWidths[j]); 113 123 } 124 if (line) 125 line += "|"; 114 126 InspectorTest.addResult(line); 115 127 } -
trunk/LayoutTests/inspector/profiler/canvas2d/canvas-stack-trace-expected.txt
r140679 r143206 7 7 {Call} functionName:"rect" arguments:[0,0,100,100] sourceURL:"canvas-stack-trace.html" lineNumber:20 columnNumber:13 8 8 {Call} property:"fillStyle" value:red sourceURL:"canvas-stack-trace.html" lineNumber:21 columnNumber:23 9 {Call} functionName:"fill" arguments:[] isDrawingCall:true sourceURL:"canvas-stack-trace.html" lineNumber:22 columnNumber:139 {Call} functionName:"fill" arguments:[] isDrawingCall:true isFrameEndCall:true sourceURL:"canvas-stack-trace.html" lineNumber:22 columnNumber:13 10 10 -
trunk/Source/WebCore/ChangeLog
r143204 r143206 1 2013-02-18 Andrey Adaikin <aandrey@chromium.org> 2 3 Web Inspector: [Canvas] group replay log calls by frames 4 https://bugs.webkit.org/show_bug.cgi?id=110101 5 6 Reviewed by Pavel Feldman. 7 8 Group canvas replay log by frames, then by draw calls. 9 10 * inspector/InjectedScriptCanvasModuleSource.js: 11 (.): 12 * inspector/Inspector.json: 13 * inspector/front-end/CanvasProfileView.js: 14 (WebInspector.CanvasProfileView): 15 (WebInspector.CanvasProfileView.prototype.dispose): 16 (WebInspector.CanvasProfileView.prototype._appendCallNode): 17 (WebInspector.CanvasProfileView.prototype._appendDrawCallGroup): 18 1 19 2013-02-18 Christophe Dumez <ch.dumez@sisa.samsung.com> 2 20 -
trunk/Source/WebCore/inspector/InjectedScriptCanvasModuleSource.js
r141884 r143206 2721 2721 /** @type {!Cache} */ 2722 2722 this._replayablesCache = new Cache(); 2723 /** @type {!Object.<number, boolean>} */ 2724 this._frameEndCallIndexes = {}; 2723 2725 } 2724 2726 … … 2763 2765 { 2764 2766 this._replayableCalls.push(call.toReplayable(this._replayablesCache)); 2767 }, 2768 2769 addFrameEndMark: function() 2770 { 2771 var index = this._replayableCalls.length - 1; 2772 if (index >= 0) 2773 this._frameEndCallIndexes[index] = true; 2774 }, 2775 2776 /** 2777 * @param {number} index 2778 * @return {boolean} 2779 */ 2780 isFrameEndCallAt: function(index) 2781 { 2782 return !!this._frameEndCallIndexes[index]; 2765 2783 } 2766 2784 } … … 2849 2867 /** 2850 2868 * @constructor 2869 * @param {function()} callback 2870 */ 2871 function ZeroTimeoutCallback(callback) 2872 { 2873 this._callback = callback; 2874 this._scheduled = false; 2875 } 2876 2877 ZeroTimeoutCallback.prototype = { 2878 schedule: function() 2879 { 2880 if (this._scheduled) 2881 return; 2882 this._scheduled = true; 2883 var callback = this._onCallback.bind(this); 2884 // We need a fastest async callback, whatever fires first. 2885 // Usually a postMessage should be faster than a setTimeout(0). 2886 var channel = new MessageChannel(); 2887 channel.port1.onmessage = callback; 2888 channel.port2.postMessage(""); 2889 inspectedWindow.setTimeout(callback, 0); 2890 }, 2891 2892 cancel: function() 2893 { 2894 this._scheduled = false; 2895 }, 2896 2897 _onCallback: function() 2898 { 2899 if (!this._scheduled) 2900 return; 2901 this._scheduled = false; 2902 this._callback(); 2903 } 2904 } 2905 2906 /** 2907 * @constructor 2851 2908 */ 2852 2909 function ResourceTrackingManager() … … 2855 2912 this._stopCapturingOnFrameEnd = false; 2856 2913 this._lastTraceLog = null; 2914 this._frameEndScheduler = new ZeroTimeoutCallback(this.markFrameEnd.bind(this)); 2857 2915 } 2858 2916 … … 2899 2957 this._capturing = false; 2900 2958 this._stopCapturingOnFrameEnd = false; 2959 this._frameEndScheduler.cancel(); 2960 if (this._lastTraceLog) 2961 this._lastTraceLog.addFrameEndMark(); 2901 2962 }, 2902 2963 … … 2942 3003 return; 2943 3004 this._lastTraceLog.addCall(call); 2944 if (this._stopCapturingOnFrameEnd && this._lastTraceLog.size() === 1) { 2945 this._stopCapturingOnFrameEnd = false; 2946 this._setZeroTimeouts(this.stopCapturing.bind(this, this._lastTraceLog)); 2947 } 2948 }, 2949 2950 /** 2951 * @param {function()} callback 2952 */ 2953 _setZeroTimeouts: function(callback) 2954 { 2955 // We need a fastest async callback, whatever fires first. 2956 // Usually a postMessage should be faster than a setTimeout(0). 2957 var channel = new MessageChannel(); 2958 channel.port1.onmessage = callback; 2959 channel.port2.postMessage(""); 2960 inspectedWindow.setTimeout(callback, 0); 3005 this._frameEndScheduler.schedule(); 3006 }, 3007 3008 markFrameEnd: function() 3009 { 3010 if (!this._lastTraceLog) 3011 return; 3012 this._lastTraceLog.addFrameEndMark(); 3013 if (this._stopCapturingOnFrameEnd) 3014 this.stopCapturing(this._lastTraceLog); 2961 3015 } 2962 3016 } … … 3069 3123 if (!traceLog) 3070 3124 return "Error: Trace log with the given ID not found."; 3125 3126 // Ensure last call ends a frame. 3127 traceLog.addFrameEndMark(); 3071 3128 3072 3129 var replayableCalls = traceLog.replayableCalls(); … … 3098 3155 item.lineNumber = callFrame.lineNumber; 3099 3156 item.columnNumber = callFrame.columnNumber; 3157 item.isFrameEndCall = traceLog.isFrameEndCallAt(i); 3100 3158 result.calls.push(item); 3101 3159 } -
trunk/Source/WebCore/inspector/Inspector.json
r143186 r143206 3494 3494 { "name": "result", "$ref": "CallArgument", "optional": true }, 3495 3495 { "name": "isDrawingCall", "type": "boolean", "optional": true }, 3496 { "name": "isFrameEndCall", "type": "boolean", "optional": true }, 3496 3497 { "name": "property", "type": "string", "optional": true }, 3497 3498 { "name": "value", "$ref": "CallArgument", "optional": true }, -
trunk/Source/WebCore/inspector/front-end/CanvasProfileView.js
r143000 r143206 91 91 /** @type {!Array.<WebInspector.DataGridNode>} */ 92 92 this._drawCallGroups = []; 93 /** @type {!Array.<WebInspector.DataGridNode>} */ 94 this._frameGroups = []; 93 95 94 96 this._splitView.show(this.element); … … 107 109 this._logGridNodes = []; 108 110 this._drawCallGroupNodes = []; 111 this._frameGroups = []; 109 112 this._linkifier.reset(); 110 113 }, … … 370 373 drawCallGroup.drawCallGroupIndex = index; 371 374 this._drawCallGroups.push(drawCallGroup); 372 this._ logGrid.rootNode().appendChild(drawCallGroup);375 this._appendDrawCallGroup(drawCallGroup); 373 376 } 374 377 drawCallGroup.appendChild(gridNode); 378 }, 379 380 /** 381 * @param {!WebInspector.DataGridNode} drawCallGroup 382 */ 383 _appendDrawCallGroup: function(drawCallGroup) 384 { 385 var frameGroup = this._frameGroups.peekLast(); 386 if (frameGroup) { 387 var lastDrawCallGroup = frameGroup.children.peekLast(); 388 var lastNode = lastDrawCallGroup && lastDrawCallGroup.children.peekLast(); 389 if (lastNode && lastNode.call.isFrameEndCall) 390 frameGroup = null; 391 } 392 if (!frameGroup) { 393 var index = this._frameGroups.length; 394 var data = {}; 395 data[0] = ""; 396 data[1] = "Frame #" + (index + 1); 397 data[2] = ""; 398 frameGroup = new WebInspector.DataGridNode(data); 399 frameGroup.selectable = true; 400 frameGroup.frameGroupIndex = index; 401 this._frameGroups.push(frameGroup); 402 this._logGrid.rootNode().appendChild(frameGroup); 403 } 404 frameGroup.appendChild(drawCallGroup); 375 405 }, 376 406
Note: See TracChangeset
for help on using the changeset viewer.