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

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/timeline_model/TimelineJSProfile.js

Issue 2466273008: DevTools: Whitelist Runtime stats counters shown on timeline. (Closed)
Patch Set: addressing comment + rebase Created 4 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 WebInspector.TimelineJSProfileProcessor = {}; 5 WebInspector.TimelineJSProfileProcessor = {};
6 6
7 /** 7 /**
8 * @param {!WebInspector.CPUProfileDataModel} jsProfileModel 8 * @param {!WebInspector.CPUProfileDataModel} jsProfileModel
9 * @param {!WebInspector.TracingModel.Thread} thread 9 * @param {!WebInspector.TracingModel.Thread} thread
10 * @return {!Array<!WebInspector.TracingModel.Event>} 10 * @return {!Array<!WebInspector.TracingModel.Event>}
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 case WebInspector.TimelineModel.RecordType.EvaluateScript: 76 case WebInspector.TimelineModel.RecordType.EvaluateScript:
77 return true; 77 return true;
78 } 78 }
79 return false; 79 return false;
80 } 80 }
81 81
82 var jsFrameEvents = []; 82 var jsFrameEvents = [];
83 var jsFramesStack = []; 83 var jsFramesStack = [];
84 var lockedJsStackDepth = []; 84 var lockedJsStackDepth = [];
85 var ordinal = 0; 85 var ordinal = 0;
86 var filterNativeFunctions = !WebInspector.moduleSetting('showNativeFunctionsIn JSProfile').get(); 86 const showAllEvents = Runtime.experiments.isEnabled('timelineShowAllEvents');
87 const showRuntimeCallStats = Runtime.experiments.isEnabled('timelineV8RuntimeC allStats');
88 const showNativeFunctions = WebInspector.moduleSetting('showNativeFunctionsInJ SProfile').get();
89
90 const visibleV8RuntimeStatsItems = new Set([
91 'Compile',
92 'CompileCode',
93 'CompileCodeLazy',
94 'CompileDeserialize',
95 'CompileEval',
96 'CompileFullCode',
97 'CompileIgnition',
98 'CompilerDispatcher',
99 'CompileSerialize',
100 'DeoptimizeCode',
101 'OptimizeCode',
102 'ParseProgram',
103 'ParseFunction',
104 'RecompileConcurrent',
105 'RecompileSynchronous',
106 'ParseLazy',
107 'FunctionCallback'
108 ]);
87 109
88 /** 110 /**
89 * @param {!WebInspector.TracingModel.Event} e 111 * @param {!WebInspector.TracingModel.Event} e
90 */ 112 */
91 function onStartEvent(e) { 113 function onStartEvent(e) {
92 e.ordinal = ++ordinal; 114 e.ordinal = ++ordinal;
93 extractStackTrace(e); 115 extractStackTrace(e);
94 // For the duration of the event we cannot go beyond the stack associated wi th it. 116 // For the duration of the event we cannot go beyond the stack associated wi th it.
95 lockedJsStackDepth.push(jsFramesStack.length); 117 lockedJsStackDepth.push(jsFramesStack.length);
96 } 118 }
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 } 153 }
132 for (var k = 0; k < jsFramesStack.length; ++k) 154 for (var k = 0; k < jsFramesStack.length; ++k)
133 jsFramesStack[k].setEndTime(time); 155 jsFramesStack[k].setEndTime(time);
134 jsFramesStack.length = depth; 156 jsFramesStack.length = depth;
135 } 157 }
136 158
137 /** 159 /**
138 * @param {!Array<!Protocol.Runtime.CallFrame>} stack 160 * @param {!Array<!Protocol.Runtime.CallFrame>} stack
139 */ 161 */
140 function filterStackFrames(stack) { 162 function filterStackFrames(stack) {
163 if (showAllEvents)
164 return;
141 for (var i = 0, j = 0; i < stack.length; ++i) { 165 for (var i = 0, j = 0; i < stack.length; ++i) {
142 var url = stack[i].url; 166 const frame = stack[i];
143 if (url && url.startsWith('native ')) 167 const url = frame.url;
168 if (!showNativeFunctions && url && url.startsWith('native '))
144 continue; 169 continue;
145 stack[j++] = stack[i]; 170 if (url === 'native V8Runtime' && (!visibleV8RuntimeStatsItems.has(frame.f unctionName) || !showRuntimeCallStats))
171 continue;
172 stack[j++] = frame;
146 } 173 }
147 stack.length = j; 174 stack.length = j;
148 } 175 }
149 176
150 /** 177 /**
151 * @param {!WebInspector.TracingModel.Event} e 178 * @param {!WebInspector.TracingModel.Event} e
152 */ 179 */
153 function extractStackTrace(e) { 180 function extractStackTrace(e) {
154 var recordTypes = WebInspector.TimelineModel.RecordType; 181 var recordTypes = WebInspector.TimelineModel.RecordType;
155 var callFrames; 182 var callFrames;
156 if (e.name === recordTypes.JSSample) { 183 if (e.name === recordTypes.JSSample) {
157 var eventData = e.args['data'] || e.args['beginData']; 184 var eventData = e.args['data'] || e.args['beginData'];
158 callFrames = /** @type {!Array<!Protocol.Runtime.CallFrame>} */ (eventData && eventData['stackTrace']); 185 callFrames = /** @type {!Array<!Protocol.Runtime.CallFrame>} */ (eventData && eventData['stackTrace']);
159 } else { 186 } else {
160 callFrames = /** @type {!Array<!Protocol.Runtime.CallFrame>} */ ( 187 callFrames = /** @type {!Array<!Protocol.Runtime.CallFrame>} */ (
161 jsFramesStack.map(frameEvent => frameEvent.args['data']).reverse()); 188 jsFramesStack.map(frameEvent => frameEvent.args['data']).reverse());
162 } 189 }
163 if (filterNativeFunctions) 190 filterStackFrames(callFrames);
164 filterStackFrames(callFrames);
165 var endTime = eventEndTime(e); 191 var endTime = eventEndTime(e);
166 var numFrames = callFrames.length; 192 var numFrames = callFrames.length;
167 var minFrames = Math.min(numFrames, jsFramesStack.length); 193 var minFrames = Math.min(numFrames, jsFramesStack.length);
168 var i; 194 var i;
169 for (i = lockedJsStackDepth.peekLast() || 0; i < minFrames; ++i) { 195 for (i = lockedJsStackDepth.peekLast() || 0; i < minFrames; ++i) {
170 var newFrame = callFrames[numFrames - 1 - i]; 196 var newFrame = callFrames[numFrames - 1 - i];
171 var oldFrame = jsFramesStack[i].args['data']; 197 var oldFrame = jsFramesStack[i].args['data'];
172 if (!equalFrames(newFrame, oldFrame)) 198 if (!equalFrames(newFrame, oldFrame))
173 break; 199 break;
174 jsFramesStack[i].setEndTime(Math.max(jsFramesStack[i].endTime, endTime)); 200 jsFramesStack[i].setEndTime(Math.max(jsFramesStack[i].endTime, endTime));
175 } 201 }
176 truncateJSStack(i, e.startTime); 202 truncateJSStack(i, e.startTime);
177 for (; i < numFrames; ++i) { 203 for (; i < numFrames; ++i) {
178 var frame = callFrames[numFrames - 1 - i]; 204 var frame = callFrames[numFrames - 1 - i];
179 var jsFrameEvent = new WebInspector.TracingModel.Event( 205 var jsFrameEvent = new WebInspector.TracingModel.Event(
180 WebInspector.TracingModel.DevToolsTimelineEventCategory, recordTypes.J SFrame, 206 WebInspector.TracingModel.DevToolsTimelineEventCategory, recordTypes.J SFrame,
181 WebInspector.TracingModel.Phase.Complete, e.startTime, e.thread); 207 WebInspector.TracingModel.Phase.Complete, e.startTime, e.thread);
182 jsFrameEvent.ordinal = e.ordinal; 208 jsFrameEvent.ordinal = e.ordinal;
183 jsFrameEvent.addArgs({data: frame}); 209 jsFrameEvent.addArgs({data: frame});
184 jsFrameEvent.setEndTime(endTime); 210 jsFrameEvent.setEndTime(endTime);
185 jsFramesStack.push(jsFrameEvent); 211 jsFramesStack.push(jsFrameEvent);
186 jsFrameEvents.push(jsFrameEvent); 212 jsFrameEvents.push(jsFrameEvent);
187 } 213 }
188 } 214 }
189 215
190 /** 216 const firstTopLevelEvent = events.find(WebInspector.TracingModel.isTopLevelEve nt);
191 * @param {!Array<!WebInspector.TracingModel.Event>} events
192 * @return {?WebInspector.TracingModel.Event}
193 */
194 function findFirstTopLevelEvent(events) {
195 for (var i = 0; i < events.length; ++i) {
196 if (WebInspector.TracingModel.isTopLevelEvent(events[i]))
197 return events[i];
198 }
199 return null;
200 }
201
202 var firstTopLevelEvent = findFirstTopLevelEvent(events);
203 if (firstTopLevelEvent) 217 if (firstTopLevelEvent)
204 WebInspector.TimelineModel.forEachEvent( 218 WebInspector.TimelineModel.forEachEvent(
205 events, onStartEvent, onEndEvent, onInstantEvent, firstTopLevelEvent.sta rtTime); 219 events, onStartEvent, onEndEvent, onInstantEvent, firstTopLevelEvent.sta rtTime);
206 return jsFrameEvents; 220 return jsFrameEvents;
207 }; 221 };
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698