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

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

Issue 391373008: DevTools: Show JS callstacks on tracing-based timeline (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 5 months 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 * @constructor 6 * @constructor
7 * @param {!WebInspector.TracingModel} tracingModel 7 * @param {!WebInspector.TracingModel} tracingModel
8 * @param {!WebInspector.TimelineModel.Filter} recordFilter 8 * @param {!WebInspector.TimelineModel.Filter} recordFilter
9 * @extends {WebInspector.TimelineModel} 9 * @extends {WebInspector.TimelineModel}
10 */ 10 */
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 172
173 var endTime = Infinity; 173 var endTime = Infinity;
174 if (i + 1 < length) 174 if (i + 1 < length)
175 endTime = events[i + 1].startTime; 175 endTime = events[i + 1].startTime;
176 176
177 process.sortedThreads().forEach(this._processThreadEvents.bind(this, startTime, endTime, event.thread)); 177 process.sortedThreads().forEach(this._processThreadEvents.bind(this, startTime, endTime, event.thread));
178 } 178 }
179 this._resetProcessingState(); 179 this._resetProcessingState();
180 180
181 this._inspectedTargetEvents.sort(WebInspector.TracingModel.Event.compare StartTime); 181 this._inspectedTargetEvents.sort(WebInspector.TracingModel.Event.compare StartTime);
182 if (WebInspector.experimentsSettings.timelineJSCPUProfile.isEnabled())
183 this._injectJSFrameEvents();
182 184
183 this._buildTimelineRecords(); 185 this._buildTimelineRecords();
184 this.dispatchEventToListeners(WebInspector.TimelineModel.Events.Recordin gStopped); 186 this.dispatchEventToListeners(WebInspector.TimelineModel.Events.Recordin gStopped);
185 }, 187 },
186 188
187 /** 189 /**
188 * @return {number} 190 * @return {number}
189 */ 191 */
190 minimumRecordTime: function() 192 minimumRecordTime: function()
191 { 193 {
(...skipping 18 matching lines...) Expand all
210 212
211 /** 213 /**
212 * @return {!Array.<!WebInspector.TracingModel.Event>} 214 * @return {!Array.<!WebInspector.TracingModel.Event>}
213 */ 215 */
214 mainThreadEvents: function() 216 mainThreadEvents: function()
215 { 217 {
216 return this._virtualThreads[WebInspector.TimelineModel.MainThreadName] | | []; 218 return this._virtualThreads[WebInspector.TimelineModel.MainThreadName] | | [];
217 }, 219 },
218 220
219 /** 221 /**
222 * @param {!Array.<!WebInspector.TracingModel.Event>} events
223 */
224 _setMainThreadEvents: function(events)
225 {
226 return this._virtualThreads[WebInspector.TimelineModel.MainThreadName] = events;
227 },
228
229 /**
220 * @return {!Object.<string, !Array.<!WebInspector.TracingModel.Event>>} 230 * @return {!Object.<string, !Array.<!WebInspector.TracingModel.Event>>}
221 */ 231 */
222 virtualThreads: function() 232 virtualThreads: function()
223 { 233 {
224 return this._virtualThreads; 234 return this._virtualThreads;
225 }, 235 },
226 236
227 reset: function() 237 reset: function()
228 { 238 {
229 this._virtualThreads = {}; 239 this._virtualThreads = {};
230 this._inspectedTargetEvents = []; 240 this._inspectedTargetEvents = [];
231 WebInspector.TimelineModel.prototype.reset.call(this); 241 WebInspector.TimelineModel.prototype.reset.call(this);
232 }, 242 },
233 243
244 _injectJSFrameEvents: function()
245 {
246 var jsFrameEvents = [];
247 var mainThreadEvents = this.mainThreadEvents();
248 for (var i = 0; i < mainThreadEvents.length; ++i) {
249 var event = mainThreadEvents[i];
250 if (!event.stackTrace)
251 continue;
252 for (var j = event.stackTrace.length - 1; j >= 0; --j) {
253 var payload = /** @type {!WebInspector.TracingModel.EventPayload } */ ({
254 ph: WebInspector.TracingModel.Phase.Complete,
255 cat: WebInspector.TracingModel.DevToolsMetadataEventCategory ,
256 name: WebInspector.TracingTimelineModel.RecordType.JSFrame,
yurys 2014/07/17 14:32:40 I'd rather add this on the flame chart directly wi
alph 2014/07/17 15:48:43 Done.
257 ts: event.startTime * 1000,
258 dur: event.duration * 1000,
259 args: {
260 data: event.stackTrace[j]
261 }
262 });
263 var jsFrameEvent = new WebInspector.TracingModel.Event(payload, 0, event.thread);
264 jsFrameEvents.push(jsFrameEvent);
265 }
266 }
267 this._setMainThreadEvents(jsFrameEvents.mergeOrdered(mainThreadEvents, W ebInspector.TracingModel.Event.orderedCompareStartTime));
268 this._inspectedTargetEvents = jsFrameEvents.mergeOrdered(this._inspected TargetEvents, WebInspector.TracingModel.Event.orderedCompareStartTime);
269 },
270
234 _buildTimelineRecords: function() 271 _buildTimelineRecords: function()
235 { 272 {
236 var recordStack = []; 273 var recordStack = [];
237 var mainThreadEvents = this.mainThreadEvents(); 274 var mainThreadEvents = this.mainThreadEvents();
238 for (var i = 0, size = mainThreadEvents.length; i < size; ++i) { 275 for (var i = 0, size = mainThreadEvents.length; i < size; ++i) {
239 var event = mainThreadEvents[i]; 276 var event = mainThreadEvents[i];
240 while (recordStack.length) { 277 while (recordStack.length) {
241 var top = recordStack.peekLast(); 278 var top = recordStack.peekLast();
242 if (top._event.endTime >= event.startTime) 279 if (top._event.endTime >= event.startTime)
243 break; 280 break;
(...skipping 517 matching lines...) Expand 10 before | Expand all | Expand 10 after
761 }, 798 },
762 799
763 /** 800 /**
764 * @return {!WebInspector.TimelineModel} 801 * @return {!WebInspector.TimelineModel}
765 */ 802 */
766 timelineModel: function() 803 timelineModel: function()
767 { 804 {
768 return this._model; 805 return this._model;
769 } 806 }
770 } 807 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698