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

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 {!WebInspector.TracingTimelineModel} timelineModel 9 * @param {!WebInspector.TimelineModel} timelineModel
10 * @param {!ProfilerAgent.CPUProfile} jsProfile 10 * @param {!ProfilerAgent.CPUProfile} jsProfile
11 * @return {!Array.<!WebInspector.TracingModel.Event>} 11 * @return {!Array.<!WebInspector.TracingModel.Event>}
12 */ 12 */
13 WebInspector.TimelineJSProfileProcessor.generateTracingEventsFromCpuProfile = fu nction(timelineModel, jsProfile) 13 WebInspector.TimelineJSProfileProcessor.generateTracingEventsFromCpuProfile = fu nction(timelineModel, jsProfile)
14 { 14 {
15 if (!jsProfile.samples) 15 if (!jsProfile.samples)
16 return []; 16 return [];
17 var jsProfileModel = new WebInspector.CPUProfileDataModel(jsProfile); 17 var jsProfileModel = new WebInspector.CPUProfileDataModel(jsProfile);
18 var idleNode = jsProfileModel.idleNode; 18 var idleNode = jsProfileModel.idleNode;
19 var programNode = jsProfileModel.programNode; 19 var programNode = jsProfileModel.programNode;
20 var gcNode = jsProfileModel.gcNode; 20 var gcNode = jsProfileModel.gcNode;
21 var samples = jsProfileModel.samples; 21 var samples = jsProfileModel.samples;
22 var timestamps = jsProfileModel.timestamps; 22 var timestamps = jsProfileModel.timestamps;
23 var jsEvents = []; 23 var jsEvents = [];
24 var mainThread = timelineModel.mainThreadEvents()[0].thread; 24 var mainThread = timelineModel.mainThreadEvents()[0].thread;
25 for (var i = 0; i < samples.length; ++i) { 25 for (var i = 0; i < samples.length; ++i) {
26 var node = jsProfileModel.nodeByIndex(i); 26 var node = jsProfileModel.nodeByIndex(i);
27 if (node === programNode || node === gcNode || node === idleNode) 27 if (node === programNode || node === gcNode || node === idleNode)
28 continue; 28 continue;
29 var stackTrace = node._stackTraceArray; 29 var stackTrace = node._stackTraceArray;
30 if (!stackTrace) { 30 if (!stackTrace) {
31 stackTrace = /** @type {!ConsoleAgent.StackTrace} */ (new Array(node .depth + 1)); 31 stackTrace = /** @type {!ConsoleAgent.StackTrace} */ (new Array(node .depth + 1));
32 node._stackTraceArray = stackTrace; 32 node._stackTraceArray = stackTrace;
33 for (var j = 0; node.parent; node = node.parent) 33 for (var j = 0; node.parent; node = node.parent)
34 stackTrace[j++] = /** @type {!ConsoleAgent.CallFrame} */ (node); 34 stackTrace[j++] = /** @type {!ConsoleAgent.CallFrame} */ (node);
35 } 35 }
36 var jsEvent = new WebInspector.TracingModel.Event(WebInspector.TracingMo del.DevToolsMetadataEventCategory, WebInspector.TracingTimelineModel.RecordType. JSSample, 36 var jsEvent = new WebInspector.TracingModel.Event(WebInspector.TracingMo del.DevToolsMetadataEventCategory, WebInspector.TimelineModel.RecordType.JSSampl e,
37 WebInspector.TracingModel.Phase.Instant, timestamps[i], mainThread); 37 WebInspector.TracingModel.Phase.Instant, timestamps[i], mainThread);
38 jsEvent.stackTrace = stackTrace; 38 jsEvent.stackTrace = stackTrace;
39 jsEvents.push(jsEvent); 39 jsEvents.push(jsEvent);
40 } 40 }
41 return jsEvents; 41 return jsEvents;
42 } 42 }
43 43
44 /** 44 /**
45 * @param {!Array.<!WebInspector.TracingModel.Event>} events 45 * @param {!Array.<!WebInspector.TracingModel.Event>} events
46 * @return {!Array.<!WebInspector.TracingModel.Event>} 46 * @return {!Array.<!WebInspector.TracingModel.Event>}
47 */ 47 */
48 WebInspector.TimelineJSProfileProcessor.generateJSFrameEvents = function(events) 48 WebInspector.TimelineJSProfileProcessor.generateJSFrameEvents = function(events)
49 { 49 {
50 function equalFrames(frame1, frame2) 50 function equalFrames(frame1, frame2)
51 { 51 {
52 return frame1.scriptId === frame2.scriptId && frame1.functionName === fr ame2.functionName; 52 return frame1.scriptId === frame2.scriptId && frame1.functionName === fr ame2.functionName;
53 } 53 }
54 54
55 function eventEndTime(e) 55 function eventEndTime(e)
56 { 56 {
57 return e.endTime || e.startTime; 57 return e.endTime || e.startTime;
58 } 58 }
59 59
60 function isJSInvocationEvent(e) 60 function isJSInvocationEvent(e)
61 { 61 {
62 switch (e.name) { 62 switch (e.name) {
63 case WebInspector.TracingTimelineModel.RecordType.FunctionCall: 63 case WebInspector.TimelineModel.RecordType.FunctionCall:
64 case WebInspector.TracingTimelineModel.RecordType.EvaluateScript: 64 case WebInspector.TimelineModel.RecordType.EvaluateScript:
65 return true; 65 return true;
66 } 66 }
67 return false; 67 return false;
68 } 68 }
69 69
70 var jsFrameEvents = []; 70 var jsFrameEvents = [];
71 var jsFramesStack = []; 71 var jsFramesStack = [];
72 var coalesceThresholdMs = WebInspector.TimelineFlameChartDataProvider.JSFram eCoalesceThresholdMs; 72 var coalesceThresholdMs = WebInspector.TimelineFlameChartDataProvider.JSFram eCoalesceThresholdMs;
73 73
74 function onStartEvent(e) 74 function onStartEvent(e)
75 { 75 {
76 extractStackTrace(e); 76 extractStackTrace(e);
77 } 77 }
78 78
79 function onInstantEvent(e, top) 79 function onInstantEvent(e, top)
80 { 80 {
81 if (e.name === WebInspector.TracingTimelineModel.RecordType.JSSample && top && !isJSInvocationEvent(top)) 81 if (e.name === WebInspector.TimelineModel.RecordType.JSSample && top && !isJSInvocationEvent(top))
82 return; 82 return;
83 extractStackTrace(e); 83 extractStackTrace(e);
84 } 84 }
85 85
86 function onEndEvent(e) 86 function onEndEvent(e)
87 { 87 {
88 if (isJSInvocationEvent(e)) 88 if (isJSInvocationEvent(e))
89 jsFramesStack.length = 0; 89 jsFramesStack.length = 0;
90 } 90 }
91 91
(...skipping 10 matching lines...) Expand all
102 for (j = 0; j < minFrames; ++j) { 102 for (j = 0; j < minFrames; ++j) {
103 var newFrame = e.stackTrace[numFrames - 1 - j]; 103 var newFrame = e.stackTrace[numFrames - 1 - j];
104 var oldFrame = jsFramesStack[j].args["data"]; 104 var oldFrame = jsFramesStack[j].args["data"];
105 if (!equalFrames(newFrame, oldFrame)) 105 if (!equalFrames(newFrame, oldFrame))
106 break; 106 break;
107 jsFramesStack[j].setEndTime(Math.max(jsFramesStack[j].endTime, endTi me)); 107 jsFramesStack[j].setEndTime(Math.max(jsFramesStack[j].endTime, endTi me));
108 } 108 }
109 jsFramesStack.length = j; 109 jsFramesStack.length = j;
110 for (; j < numFrames; ++j) { 110 for (; j < numFrames; ++j) {
111 var frame = e.stackTrace[numFrames - 1 - j]; 111 var frame = e.stackTrace[numFrames - 1 - j];
112 var jsFrameEvent = new WebInspector.TracingModel.Event(WebInspector. TracingModel.DevToolsMetadataEventCategory, WebInspector.TracingTimelineModel.Re cordType.JSFrame, 112 var jsFrameEvent = new WebInspector.TracingModel.Event(WebInspector. TracingModel.DevToolsMetadataEventCategory, WebInspector.TimelineModel.RecordTyp e.JSFrame,
113 WebInspector.TracingModel.Phase.Complete, e.startTime, e.thread) ; 113 WebInspector.TracingModel.Phase.Complete, e.startTime, e.thread) ;
114 jsFrameEvent.addArgs({ data: frame }); 114 jsFrameEvent.addArgs({ data: frame });
115 jsFrameEvent.setEndTime(endTime); 115 jsFrameEvent.setEndTime(endTime);
116 jsFramesStack.push(jsFrameEvent); 116 jsFramesStack.push(jsFrameEvent);
117 jsFrameEvents.push(jsFrameEvent); 117 jsFrameEvents.push(jsFrameEvent);
118 } 118 }
119 } 119 }
120 120
121 var stack = []; 121 var stack = [];
122 for (var i = 0; i < events.length; ++i) { 122 for (var i = 0; i < events.length; ++i) {
123 var e = events[i]; 123 var e = events[i];
124 var top = stack.peekLast(); 124 var top = stack.peekLast();
125 if (top && top.endTime <= e.startTime) 125 if (top && top.endTime <= e.startTime)
126 onEndEvent(stack.pop()); 126 onEndEvent(stack.pop());
127 if (e.duration) { 127 if (e.duration) {
128 onStartEvent(e); 128 onStartEvent(e);
129 stack.push(e); 129 stack.push(e);
130 } else { 130 } else {
131 onInstantEvent(e, stack.peekLast()); 131 onInstantEvent(e, stack.peekLast());
132 } 132 }
133 } 133 }
134 while (stack.length) 134 while (stack.length)
135 onEndEvent(stack.pop()); 135 onEndEvent(stack.pop());
136 136
137 return jsFrameEvents; 137 return jsFrameEvents;
138 } 138 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698