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

Side by Side Diff: Source/devtools/front_end/TimelinePanel.js

Issue 212683005: Timeline Trace viewer prototype (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: fixed tracing.html Created 6 years, 9 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 /* 1 /*
2 * Copyright (C) 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2012 Google Inc. All rights reserved.
3 * Copyright (C) 2012 Intel Inc. All rights reserved. 3 * Copyright (C) 2012 Intel Inc. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are 6 * modification, are permitted provided that the following conditions are
7 * met: 7 * met:
8 * 8 *
9 * * Redistributions of source code must retain the above copyright 9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 25 matching lines...) Expand all
36 importScript("TimelineOverviewPane.js"); 36 importScript("TimelineOverviewPane.js");
37 importScript("TimelinePresentationModel.js"); 37 importScript("TimelinePresentationModel.js");
38 importScript("TimelineFrameModel.js"); 38 importScript("TimelineFrameModel.js");
39 importScript("TimelineEventOverview.js"); 39 importScript("TimelineEventOverview.js");
40 importScript("TimelineFrameOverview.js"); 40 importScript("TimelineFrameOverview.js");
41 importScript("TimelineMemoryOverview.js"); 41 importScript("TimelineMemoryOverview.js");
42 importScript("TimelinePowerOverview.js"); 42 importScript("TimelinePowerOverview.js");
43 importScript("TimelineFlameChart.js"); 43 importScript("TimelineFlameChart.js");
44 importScript("TimelineUIUtils.js"); 44 importScript("TimelineUIUtils.js");
45 importScript("TimelineView.js"); 45 importScript("TimelineView.js");
46 importScript("TimelineTraceView.js");
46 47
47 /** 48 /**
48 * @constructor 49 * @constructor
49 * @extends {WebInspector.Panel} 50 * @extends {WebInspector.Panel}
50 * @implements {WebInspector.TimelineModeViewDelegate} 51 * @implements {WebInspector.TimelineModeViewDelegate}
51 * @implements {WebInspector.Searchable} 52 * @implements {WebInspector.Searchable}
52 */ 53 */
53 WebInspector.TimelinePanel = function() 54 WebInspector.TimelinePanel = function()
54 { 55 {
55 WebInspector.Panel.call(this, "timeline"); 56 WebInspector.Panel.call(this, "timeline");
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 124
124 this._selectPresentationMode(this._presentationModeSetting.get()); 125 this._selectPresentationMode(this._presentationModeSetting.get());
125 this._detailsSplitView.show(this.element); 126 this._detailsSplitView.show(this.element);
126 } 127 }
127 128
128 WebInspector.TimelinePanel.Mode = { 129 WebInspector.TimelinePanel.Mode = {
129 Events: "Events", 130 Events: "Events",
130 Frames: "Frames", 131 Frames: "Frames",
131 Memory: "Memory", 132 Memory: "Memory",
132 FlameChart: "FlameChart", 133 FlameChart: "FlameChart",
133 Power: "Power" 134 Power: "Power",
135 Tracing: "Tracing"
134 }; 136 };
135 137
136 // Define row and header height, should be in sync with styles for timeline grap hs. 138 // Define row and header height, should be in sync with styles for timeline grap hs.
137 WebInspector.TimelinePanel.rowHeight = 18; 139 WebInspector.TimelinePanel.rowHeight = 18;
138 WebInspector.TimelinePanel.headerHeight = 20; 140 WebInspector.TimelinePanel.headerHeight = 20;
139 141
140 WebInspector.TimelinePanel.durationFilterPresetsMs = [0, 1, 15]; 142 WebInspector.TimelinePanel.durationFilterPresetsMs = [0, 1, 15];
141 143
142 WebInspector.TimelinePanel.prototype = { 144 WebInspector.TimelinePanel.prototype = {
143 wasShown: function() 145 wasShown: function()
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 * @return {!WebInspector.TimelineFrameModel} 226 * @return {!WebInspector.TimelineFrameModel}
225 */ 227 */
226 _frameModel: function() 228 _frameModel: function()
227 { 229 {
228 if (!this._lazyFrameModel) 230 if (!this._lazyFrameModel)
229 this._lazyFrameModel = new WebInspector.TimelineFrameModel(this._mod el); 231 this._lazyFrameModel = new WebInspector.TimelineFrameModel(this._mod el);
230 return this._lazyFrameModel; 232 return this._lazyFrameModel;
231 }, 233 },
232 234
233 /** 235 /**
236 * @return {!WebInspector.TracingModel}
237 */
238 _tracingModel: function()
239 {
240 if (!this._lazyTracingModel)
pfeldman 2014/03/26 18:32:09 We need to figure out the instrumentation vs curre
241 this._lazyTracingModel = new WebInspector.TracingModel();
242 return this._lazyTracingModel;
243 },
244
245 /**
246 * @return {!WebInspector.TimelineTraceView}
247 */
248 _traceView: function()
249 {
250 if (!this._lazyTraceView)
251 this._lazyTraceView = new WebInspector.TimelineTraceView(this, this. _tracingModel());
252 return this._lazyTraceView;
253 },
254
255 /**
234 * @return {!WebInspector.TimelineView} 256 * @return {!WebInspector.TimelineView}
235 */ 257 */
236 _timelineView: function() 258 _timelineView: function()
237 { 259 {
238 if (!this._lazyTimelineView) 260 if (!this._lazyTimelineView)
239 this._lazyTimelineView = new WebInspector.TimelineView(this, this._m odel); 261 this._lazyTimelineView = new WebInspector.TimelineView(this, this._m odel);
240 return this._lazyTimelineView; 262 return this._lazyTimelineView;
241 }, 263 },
242 264
243 /** 265 /**
(...skipping 18 matching lines...) Expand all
262 views.overviewView = new WebInspector.TimelineMemoryOverview(thi s._model); 284 views.overviewView = new WebInspector.TimelineMemoryOverview(thi s._model);
263 views.mainViews = [this._timelineView(), new WebInspector.Memory CountersGraph(this, this._model)]; 285 views.mainViews = [this._timelineView(), new WebInspector.Memory CountersGraph(this, this._model)];
264 break; 286 break;
265 case WebInspector.TimelinePanel.Mode.FlameChart: 287 case WebInspector.TimelinePanel.Mode.FlameChart:
266 views.overviewView = new WebInspector.TimelineFrameOverview(this ._model, this._frameModel()); 288 views.overviewView = new WebInspector.TimelineFrameOverview(this ._model, this._frameModel());
267 views.mainViews = [new WebInspector.TimelineFlameChart(this, thi s._model, this._frameModel())]; 289 views.mainViews = [new WebInspector.TimelineFlameChart(this, thi s._model, this._frameModel())];
268 break; 290 break;
269 case WebInspector.TimelinePanel.Mode.Power: 291 case WebInspector.TimelinePanel.Mode.Power:
270 views.overviewView = new WebInspector.TimelinePowerOverview(this ._model); 292 views.overviewView = new WebInspector.TimelinePowerOverview(this ._model);
271 views.mainViews = [this._timelineView()]; 293 views.mainViews = [this._timelineView()];
294 case WebInspector.TimelinePanel.Mode.Tracing:
295 views.overviewView = new WebInspector.TimelineFrameOverview(this ._model, this._frameModel());
296 views.mainViews = [this._traceView()];
272 break; 297 break;
273 default: 298 default:
274 console.assert(false, "Unknown mode: " + mode); 299 console.assert(false, "Unknown mode: " + mode);
275 } 300 }
276 for (var i = 0; i < views.mainViews.length; ++i) 301 for (var i = 0; i < views.mainViews.length; ++i)
277 views.mainViews[i].addEventListener(WebInspector.SplitView.Event s.SidebarSizeChanged, this._sidebarResized, this); 302 views.mainViews[i].addEventListener(WebInspector.SplitView.Event s.SidebarSizeChanged, this._sidebarResized, this);
278 this._viewsMap[mode] = views; 303 this._viewsMap[mode] = views;
279 } 304 }
280 305
281 this._timelineView().setFrameModel(mode === WebInspector.TimelinePanel.M ode.Frames ? this._frameModel() : null); 306 this._timelineView().setFrameModel(mode === WebInspector.TimelinePanel.M ode.Frames ? this._frameModel() : null);
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after
560 */ 585 */
561 _startRecording: function(userInitiated) 586 _startRecording: function(userInitiated)
562 { 587 {
563 this._userInitiatedRecording = userInitiated; 588 this._userInitiatedRecording = userInitiated;
564 this._model.startRecording(true); 589 this._model.startRecording(true);
565 for (var mode in WebInspector.TimelinePanel.Mode) 590 for (var mode in WebInspector.TimelinePanel.Mode)
566 this._viewsForMode(mode).overviewView.timelineStarted(); 591 this._viewsForMode(mode).overviewView.timelineStarted();
567 592
568 if (userInitiated) 593 if (userInitiated)
569 WebInspector.userMetrics.TimelineStarted.record(); 594 WebInspector.userMetrics.TimelineStarted.record();
595 if (this._presentationModeSetting.get() === WebInspector.TimelinePanel.M ode.Tracing) {
596 if (!this._boundTraceEventListener)
597 this._boundTraceEventListener = this._onTraceEventsCollected.bin d(this);
598 this._recordingTrace = true;
599 WebInspector.tracingAgent.addEventListener(WebInspector.TracingAgent .Events.EventsCollected, this._boundTraceEventListener);
600 WebInspector.tracingAgent.start("", "");
pfeldman 2014/03/26 18:32:09 For better modularity, you should introduce record
caseq 2014/03/28 17:13:41 Done, though I named it timelineStarted/Stopped si
601 }
570 }, 602 },
571 603
572 _stopRecording: function() 604 _stopRecording: function()
573 { 605 {
574 this._userInitiatedRecording = false; 606 this._userInitiatedRecording = false;
575 this._model.stopRecording(); 607 this._model.stopRecording();
576 for (var mode in WebInspector.TimelinePanel.Mode) 608 for (var mode in WebInspector.TimelinePanel.Mode)
577 this._viewsForMode(mode).overviewView.timelineStopped(); 609 this._viewsForMode(mode).overviewView.timelineStopped();
610
611 /**
612 * @this {WebInspector.TimelinePanel}
613 */
614 function onTraceDataComplete()
615 {
616 WebInspector.tracingAgent.removeEventListener(WebInspector.TracingAg ent.Events.EventsCollected, this._boundTraceEventListener);
617 this._traceView().refreshRecords(this._textFilter._regex);
618 }
619 if (this._recordingTrace) {
620 WebInspector.tracingAgent.stop(onTraceDataComplete.bind(this));
621 this._recordingTrace = false;
622 }
578 }, 623 },
579 624
580 /** 625 /**
581 * @return {boolean} 626 * @return {boolean}
582 */ 627 */
583 _toggleTimelineButtonClicked: function() 628 _toggleTimelineButtonClicked: function()
584 { 629 {
585 if (this._operationInProgress) 630 if (this._operationInProgress)
586 return true; 631 return true;
587 if (this._recordingInProgress()) 632 if (this._recordingInProgress())
(...skipping 12 matching lines...) Expand all
600 { 645 {
601 this._model.reset(); 646 this._model.reset();
602 }, 647 },
603 648
604 _onRecordsCleared: function() 649 _onRecordsCleared: function()
605 { 650 {
606 this.requestWindowTimes(0, Infinity); 651 this.requestWindowTimes(0, Infinity);
607 delete this._selectedRecord; 652 delete this._selectedRecord;
608 if (this._lazyFrameModel) 653 if (this._lazyFrameModel)
609 this._lazyFrameModel.reset(); 654 this._lazyFrameModel.reset();
655 if (this._lazyTraceModel)
656 this._lazyTraceModel.reset();
610 for (var i = 0; i < this._currentViews.length; ++i) 657 for (var i = 0; i < this._currentViews.length; ++i)
611 this._currentViews[i].reset(); 658 this._currentViews[i].reset();
612 this._overviewControl.reset(); 659 this._overviewControl.reset();
613 this._updateSelectionDetails(); 660 this._updateSelectionDetails();
614 }, 661 },
615 662
616 _onRecordingStarted: function() 663 _onRecordingStarted: function()
617 { 664 {
618 this.toggleTimelineButton.title = WebInspector.UIString("Stop"); 665 this.toggleTimelineButton.title = WebInspector.UIString("Stop");
619 this.toggleTimelineButton.toggled = true; 666 this.toggleTimelineButton.toggled = true;
(...skipping 22 matching lines...) Expand all
642 { 689 {
643 if (this._lazyFrameModel) 690 if (this._lazyFrameModel)
644 this._lazyFrameModel.addRecord(record); 691 this._lazyFrameModel.addRecord(record);
645 for (var i = 0; i < this._currentViews.length; ++i) 692 for (var i = 0; i < this._currentViews.length; ++i)
646 this._currentViews[i].addRecord(record); 693 this._currentViews[i].addRecord(record);
647 this._overviewPane.addRecord(record); 694 this._overviewPane.addRecord(record);
648 this._updateSearchHighlight(false, true); 695 this._updateSearchHighlight(false, true);
649 }, 696 },
650 697
651 /** 698 /**
699 * @param {!WebInspector.Event} event
700 */
701 _onTraceEventsCollected: function(event)
702 {
703 var events = /** @type {!Array.<!WebInspector.TracingAgent.Event>} */ (e vent.data);
704 if (this._lazyTracingModel)
705 this._lazyTracingModel.addEvents(events);
706 },
707
708 /**
652 * @param {!WebInspector.Event} event 709 * @param {!WebInspector.Event} event
653 */ 710 */
654 _willReloadPage: function(event) 711 _willReloadPage: function(event)
655 { 712 {
656 if (this._operationInProgress || this._userInitiatedRecording || !this.i sShowing()) 713 if (this._operationInProgress || this._userInitiatedRecording || !this.i sShowing())
657 return; 714 return;
658 this._startRecording(false); 715 this._startRecording(false);
659 }, 716 },
660 717
661 /** 718 /**
(...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after
1122 * @param {!WebInspector.TimelineModel.Record} record 1179 * @param {!WebInspector.TimelineModel.Record} record
1123 * @return {boolean} 1180 * @return {boolean}
1124 */ 1181 */
1125 accept: function(record) 1182 accept: function(record)
1126 { 1183 {
1127 return !this._hiddenRecords[record.type]; 1184 return !this._hiddenRecords[record.type];
1128 }, 1185 },
1129 1186
1130 __proto__: WebInspector.TimelineModel.Filter.prototype 1187 __proto__: WebInspector.TimelineModel.Filter.prototype
1131 } 1188 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698