Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(913)

Side by Side Diff: Source/devtools/front_end/timeline/TimelineJSProfile.js

Issue 715803002: DevTools: merge TracingTimelineModel into TimelineModel (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 5
6 WebInspector.TimelineJSProfileProcessor = { }; 6 WebInspector.TimelineJSProfileProcessor = { };
7 7
8 /** 8 /**
9 * @param {!ProfilerAgent.CPUProfile} jsProfile 9 * @param {!ProfilerAgent.CPUProfile} jsProfile
10 * @param {!WebInspector.TracingModel.Thread} thread 10 * @param {!WebInspector.TracingModel.Thread} thread
(...skipping 14 matching lines...) Expand all
25 var node = jsProfileModel.nodeByIndex(i); 25 var node = jsProfileModel.nodeByIndex(i);
26 if (node === programNode || node === gcNode || node === idleNode) 26 if (node === programNode || node === gcNode || node === idleNode)
27 continue; 27 continue;
28 var stackTrace = node._stackTraceArray; 28 var stackTrace = node._stackTraceArray;
29 if (!stackTrace) { 29 if (!stackTrace) {
30 stackTrace = /** @type {!ConsoleAgent.StackTrace} */ (new Array(node .depth + 1)); 30 stackTrace = /** @type {!ConsoleAgent.StackTrace} */ (new Array(node .depth + 1));
31 node._stackTraceArray = stackTrace; 31 node._stackTraceArray = stackTrace;
32 for (var j = 0; node.parent; node = node.parent) 32 for (var j = 0; node.parent; node = node.parent)
33 stackTrace[j++] = /** @type {!ConsoleAgent.CallFrame} */ (node); 33 stackTrace[j++] = /** @type {!ConsoleAgent.CallFrame} */ (node);
34 } 34 }
35 var jsEvent = new WebInspector.TracingModel.Event(WebInspector.TracingMo del.DevToolsMetadataEventCategory, WebInspector.TracingTimelineModel.RecordType. JSSample, 35 var jsEvent = new WebInspector.TracingModel.Event(WebInspector.TracingMo del.DevToolsMetadataEventCategory, WebInspector.TimelineModel.RecordType.JSSampl e,
36 WebInspector.TracingModel.Phase.Instant, timestamps[i], thread); 36 WebInspector.TracingModel.Phase.Instant, timestamps[i], thread);
37 jsEvent.stackTrace = stackTrace; 37 jsEvent.stackTrace = stackTrace;
38 jsEvents.push(jsEvent); 38 jsEvents.push(jsEvent);
39 } 39 }
40 return jsEvents; 40 return jsEvents;
41 } 41 }
42 42
43 /** 43 /**
44 * @param {!Array.<!WebInspector.TracingModel.Event>} events 44 * @param {!Array.<!WebInspector.TracingModel.Event>} events
45 * @return {!Array.<!WebInspector.TracingModel.Event>} 45 * @return {!Array.<!WebInspector.TracingModel.Event>}
46 */ 46 */
47 WebInspector.TimelineJSProfileProcessor.generateJSFrameEvents = function(events) 47 WebInspector.TimelineJSProfileProcessor.generateJSFrameEvents = function(events)
48 { 48 {
49 function equalFrames(frame1, frame2) 49 function equalFrames(frame1, frame2)
50 { 50 {
51 return frame1.scriptId === frame2.scriptId && frame1.functionName === fr ame2.functionName; 51 return frame1.scriptId === frame2.scriptId && frame1.functionName === fr ame2.functionName;
52 } 52 }
53 53
54 function eventEndTime(e) 54 function eventEndTime(e)
55 { 55 {
56 return e.endTime || e.startTime; 56 return e.endTime || e.startTime;
57 } 57 }
58 58
59 function isJSInvocationEvent(e) 59 function isJSInvocationEvent(e)
60 { 60 {
61 switch (e.name) { 61 switch (e.name) {
62 case WebInspector.TracingTimelineModel.RecordType.FunctionCall: 62 case WebInspector.TimelineModel.RecordType.FunctionCall:
63 case WebInspector.TracingTimelineModel.RecordType.EvaluateScript: 63 case WebInspector.TimelineModel.RecordType.EvaluateScript:
64 return true; 64 return true;
65 } 65 }
66 return false; 66 return false;
67 } 67 }
68 68
69 var jsFrameEvents = []; 69 var jsFrameEvents = [];
70 var jsFramesStack = []; 70 var jsFramesStack = [];
71 var coalesceThresholdMs = WebInspector.TimelineFlameChartDataProvider.JSFram eCoalesceThresholdMs; 71 var coalesceThresholdMs = WebInspector.TimelineFlameChartDataProvider.JSFram eCoalesceThresholdMs;
72 72
73 function onStartEvent(e) 73 function onStartEvent(e)
74 { 74 {
75 extractStackTrace(e); 75 extractStackTrace(e);
76 } 76 }
77 77
78 function onInstantEvent(e, top) 78 function onInstantEvent(e, top)
79 { 79 {
80 if (e.name === WebInspector.TracingTimelineModel.RecordType.JSSample && top && !isJSInvocationEvent(top)) 80 if (e.name === WebInspector.TimelineModel.RecordType.JSSample && top && !isJSInvocationEvent(top))
81 return; 81 return;
82 extractStackTrace(e); 82 extractStackTrace(e);
83 } 83 }
84 84
85 function onEndEvent(e) 85 function onEndEvent(e)
86 { 86 {
87 if (isJSInvocationEvent(e)) 87 if (isJSInvocationEvent(e))
88 jsFramesStack.length = 0; 88 jsFramesStack.length = 0;
89 } 89 }
90 90
(...skipping 10 matching lines...) Expand all
101 for (j = 0; j < minFrames; ++j) { 101 for (j = 0; j < minFrames; ++j) {
102 var newFrame = e.stackTrace[numFrames - 1 - j]; 102 var newFrame = e.stackTrace[numFrames - 1 - j];
103 var oldFrame = jsFramesStack[j].args["data"]; 103 var oldFrame = jsFramesStack[j].args["data"];
104 if (!equalFrames(newFrame, oldFrame)) 104 if (!equalFrames(newFrame, oldFrame))
105 break; 105 break;
106 jsFramesStack[j].setEndTime(Math.max(jsFramesStack[j].endTime, endTi me)); 106 jsFramesStack[j].setEndTime(Math.max(jsFramesStack[j].endTime, endTi me));
107 } 107 }
108 jsFramesStack.length = j; 108 jsFramesStack.length = j;
109 for (; j < numFrames; ++j) { 109 for (; j < numFrames; ++j) {
110 var frame = e.stackTrace[numFrames - 1 - j]; 110 var frame = e.stackTrace[numFrames - 1 - j];
111 var jsFrameEvent = new WebInspector.TracingModel.Event(WebInspector. TracingModel.DevToolsMetadataEventCategory, WebInspector.TracingTimelineModel.Re cordType.JSFrame, 111 var jsFrameEvent = new WebInspector.TracingModel.Event(WebInspector. TracingModel.DevToolsMetadataEventCategory, WebInspector.TimelineModel.RecordTyp e.JSFrame,
112 WebInspector.TracingModel.Phase.Complete, e.startTime, e.thread) ; 112 WebInspector.TracingModel.Phase.Complete, e.startTime, e.thread) ;
113 jsFrameEvent.addArgs({ data: frame }); 113 jsFrameEvent.addArgs({ data: frame });
114 jsFrameEvent.setEndTime(endTime); 114 jsFrameEvent.setEndTime(endTime);
115 jsFramesStack.push(jsFrameEvent); 115 jsFramesStack.push(jsFrameEvent);
116 jsFrameEvents.push(jsFrameEvent); 116 jsFrameEvents.push(jsFrameEvent);
117 } 117 }
118 } 118 }
119 119
120 var stack = []; 120 var stack = [];
121 for (var i = 0; i < events.length; ++i) { 121 for (var i = 0; i < events.length; ++i) {
122 var e = events[i]; 122 var e = events[i];
123 var top = stack.peekLast(); 123 var top = stack.peekLast();
124 if (top && top.endTime <= e.startTime) 124 if (top && top.endTime <= e.startTime)
125 onEndEvent(stack.pop()); 125 onEndEvent(stack.pop());
126 if (e.duration) { 126 if (e.duration) {
127 onStartEvent(e); 127 onStartEvent(e);
128 stack.push(e); 128 stack.push(e);
129 } else { 129 } else {
130 onInstantEvent(e, stack.peekLast()); 130 onInstantEvent(e, stack.peekLast());
131 } 131 }
132 } 132 }
133 while (stack.length) 133 while (stack.length)
134 onEndEvent(stack.pop()); 134 onEndEvent(stack.pop());
135 135
136 return jsFrameEvents; 136 return jsFrameEvents;
137 } 137 }
OLDNEW
« no previous file with comments | « Source/devtools/front_end/timeline/TimelineFrameModel.js ('k') | Source/devtools/front_end/timeline/TimelineModel.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698