OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 * @unrestricted | 5 * @unrestricted |
6 */ | 6 */ |
7 Timeline.TimelineTreeView = class extends UI.VBox { | 7 Timeline.TimelineTreeView = class extends UI.VBox { |
8 constructor() { | 8 constructor() { |
9 super(); | 9 super(); |
10 this.element.classList.add('timeline-tree-view'); | 10 this.element.classList.add('timeline-tree-view'); |
(...skipping 14 matching lines...) Expand all Loading... |
25 /** | 25 /** |
26 * @param {!TimelineModel.TimelineModel} model | 26 * @param {!TimelineModel.TimelineModel} model |
27 * @param {!Array<!TimelineModel.TimelineModel.Filter>} filters | 27 * @param {!Array<!TimelineModel.TimelineModel.Filter>} filters |
28 */ | 28 */ |
29 _init(model, filters) { | 29 _init(model, filters) { |
30 this._model = model; | 30 this._model = model; |
31 this._linkifier = new Components.Linkifier(); | 31 this._linkifier = new Components.Linkifier(); |
32 | 32 |
33 this._filters = filters.slice(); | 33 this._filters = filters.slice(); |
34 | 34 |
35 var columns = /** @type {!Array<!UI.DataGrid.ColumnDescriptor>} */ ([]); | 35 var columns = /** @type {!Array<!DataGrid.DataGrid.ColumnDescriptor>} */ ([]
); |
36 this._populateColumns(columns); | 36 this._populateColumns(columns); |
37 | 37 |
38 var mainView = new UI.VBox(); | 38 var mainView = new UI.VBox(); |
39 this._populateToolbar(mainView.element); | 39 this._populateToolbar(mainView.element); |
40 this._dataGrid = new UI.SortableDataGrid(columns); | 40 this._dataGrid = new DataGrid.SortableDataGrid(columns); |
41 this._dataGrid.addEventListener(UI.DataGrid.Events.SortingChanged, this._sor
tingChanged, this); | 41 this._dataGrid.addEventListener(DataGrid.DataGrid.Events.SortingChanged, thi
s._sortingChanged, this); |
42 this._dataGrid.element.addEventListener('mousemove', this._onMouseMove.bind(
this), true); | 42 this._dataGrid.element.addEventListener('mousemove', this._onMouseMove.bind(
this), true); |
43 this._dataGrid.setResizeMethod(UI.DataGrid.ResizeMethod.Last); | 43 this._dataGrid.setResizeMethod(DataGrid.DataGrid.ResizeMethod.Last); |
44 this._dataGrid.setRowContextMenuCallback(this._onContextMenu.bind(this)); | 44 this._dataGrid.setRowContextMenuCallback(this._onContextMenu.bind(this)); |
45 this._dataGrid.asWidget().show(mainView.element); | 45 this._dataGrid.asWidget().show(mainView.element); |
46 | 46 |
47 this._splitWidget = new UI.SplitWidget(true, true, 'timelineTreeViewDetailsS
plitWidget'); | 47 this._splitWidget = new UI.SplitWidget(true, true, 'timelineTreeViewDetailsS
plitWidget'); |
48 this._splitWidget.show(this.element); | 48 this._splitWidget.show(this.element); |
49 this._splitWidget.setMainWidget(mainView); | 49 this._splitWidget.setMainWidget(mainView); |
50 | 50 |
51 this._detailsView = new UI.VBox(); | 51 this._detailsView = new UI.VBox(); |
52 this._detailsView.element.classList.add('timeline-details-view', 'timeline-d
etails-view-body'); | 52 this._detailsView.element.classList.add('timeline-details-view', 'timeline-d
etails-view-body'); |
53 this._splitWidget.setSidebarWidget(this._detailsView); | 53 this._splitWidget.setSidebarWidget(this._detailsView); |
54 this._dataGrid.addEventListener(UI.DataGrid.Events.SelectedNode, this._updat
eDetailsForSelection, this); | 54 this._dataGrid.addEventListener(DataGrid.DataGrid.Events.SelectedNode, this.
_updateDetailsForSelection, this); |
55 | 55 |
56 /** @type {?TimelineModel.TimelineProfileTree.Node|undefined} */ | 56 /** @type {?TimelineModel.TimelineProfileTree.Node|undefined} */ |
57 this._lastSelectedNode; | 57 this._lastSelectedNode; |
58 } | 58 } |
59 | 59 |
60 /** | 60 /** |
61 * @param {!Timeline.TimelineSelection} selection | 61 * @param {!Timeline.TimelineSelection} selection |
62 */ | 62 */ |
63 updateContents(selection) { | 63 updateContents(selection) { |
64 this.setRange(selection.startTime(), selection.endTime()); | 64 this.setRange(selection.startTime(), selection.endTime()); |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
165 /** | 165 /** |
166 * @param {function(!SDK.TracingModel.Event):(string|symbol)=} eventIdCallback | 166 * @param {function(!SDK.TracingModel.Event):(string|symbol)=} eventIdCallback |
167 * @return {!TimelineModel.TimelineProfileTree.Node} | 167 * @return {!TimelineModel.TimelineProfileTree.Node} |
168 */ | 168 */ |
169 _buildTopDownTree(eventIdCallback) { | 169 _buildTopDownTree(eventIdCallback) { |
170 return TimelineModel.TimelineProfileTree.buildTopDown( | 170 return TimelineModel.TimelineProfileTree.buildTopDown( |
171 this._model.mainThreadEvents(), this._filters, this._startTime, this._en
dTime, eventIdCallback); | 171 this._model.mainThreadEvents(), this._filters, this._startTime, this._en
dTime, eventIdCallback); |
172 } | 172 } |
173 | 173 |
174 /** | 174 /** |
175 * @param {!Array<!UI.DataGrid.ColumnDescriptor>} columns | 175 * @param {!Array<!DataGrid.DataGrid.ColumnDescriptor>} columns |
176 */ | 176 */ |
177 _populateColumns(columns) { | 177 _populateColumns(columns) { |
178 columns.push({id: 'self', title: Common.UIString('Self Time'), width: '110px
', fixedWidth: true, sortable: true}); | 178 columns.push({id: 'self', title: Common.UIString('Self Time'), width: '110px
', fixedWidth: true, sortable: true}); |
179 columns.push({id: 'total', title: Common.UIString('Total Time'), width: '110
px', fixedWidth: true, sortable: true}); | 179 columns.push({id: 'total', title: Common.UIString('Total Time'), width: '110
px', fixedWidth: true, sortable: true}); |
180 columns.push({id: 'activity', title: Common.UIString('Activity'), disclosure
: true, sortable: true}); | 180 columns.push({id: 'activity', title: Common.UIString('Activity'), disclosure
: true, sortable: true}); |
181 } | 181 } |
182 | 182 |
183 _sortingChanged() { | 183 _sortingChanged() { |
184 var columnId = this._dataGrid.sortColumnId(); | 184 var columnId = this._dataGrid.sortColumnId(); |
185 if (!columnId) | 185 if (!columnId) |
(...skipping 13 matching lines...) Expand all Loading... |
199 sortFunction = compareName; | 199 sortFunction = compareName; |
200 break; | 200 break; |
201 default: | 201 default: |
202 console.assert(false, 'Unknown sort field: ' + columnId); | 202 console.assert(false, 'Unknown sort field: ' + columnId); |
203 return; | 203 return; |
204 } | 204 } |
205 this._dataGrid.sortNodes(sortFunction, !this._dataGrid.isSortOrderAscending(
)); | 205 this._dataGrid.sortNodes(sortFunction, !this._dataGrid.isSortOrderAscending(
)); |
206 | 206 |
207 /** | 207 /** |
208 * @param {string} field | 208 * @param {string} field |
209 * @param {!UI.DataGridNode} a | 209 * @param {!DataGrid.DataGridNode} a |
210 * @param {!UI.DataGridNode} b | 210 * @param {!DataGrid.DataGridNode} b |
211 * @return {number} | 211 * @return {number} |
212 */ | 212 */ |
213 function compareNumericField(field, a, b) { | 213 function compareNumericField(field, a, b) { |
214 var nodeA = /** @type {!Timeline.TimelineTreeView.TreeGridNode} */ (a); | 214 var nodeA = /** @type {!Timeline.TimelineTreeView.TreeGridNode} */ (a); |
215 var nodeB = /** @type {!Timeline.TimelineTreeView.TreeGridNode} */ (b); | 215 var nodeB = /** @type {!Timeline.TimelineTreeView.TreeGridNode} */ (b); |
216 return nodeA._profileNode[field] - nodeB._profileNode[field]; | 216 return nodeA._profileNode[field] - nodeB._profileNode[field]; |
217 } | 217 } |
218 | 218 |
219 /** | 219 /** |
220 * @param {!UI.DataGridNode} a | 220 * @param {!DataGrid.DataGridNode} a |
221 * @param {!UI.DataGridNode} b | 221 * @param {!DataGrid.DataGridNode} b |
222 * @return {number} | 222 * @return {number} |
223 */ | 223 */ |
224 function compareStartTime(a, b) { | 224 function compareStartTime(a, b) { |
225 var nodeA = /** @type {!Timeline.TimelineTreeView.TreeGridNode} */ (a); | 225 var nodeA = /** @type {!Timeline.TimelineTreeView.TreeGridNode} */ (a); |
226 var nodeB = /** @type {!Timeline.TimelineTreeView.TreeGridNode} */ (b); | 226 var nodeB = /** @type {!Timeline.TimelineTreeView.TreeGridNode} */ (b); |
227 return nodeA._profileNode.event.startTime - nodeB._profileNode.event.start
Time; | 227 return nodeA._profileNode.event.startTime - nodeB._profileNode.event.start
Time; |
228 } | 228 } |
229 | 229 |
230 /** | 230 /** |
231 * @param {!UI.DataGridNode} a | 231 * @param {!DataGrid.DataGridNode} a |
232 * @param {!UI.DataGridNode} b | 232 * @param {!DataGrid.DataGridNode} b |
233 * @return {number} | 233 * @return {number} |
234 */ | 234 */ |
235 function compareName(a, b) { | 235 function compareName(a, b) { |
236 var nodeA = /** @type {!Timeline.TimelineTreeView.TreeGridNode} */ (a); | 236 var nodeA = /** @type {!Timeline.TimelineTreeView.TreeGridNode} */ (a); |
237 var nodeB = /** @type {!Timeline.TimelineTreeView.TreeGridNode} */ (b); | 237 var nodeB = /** @type {!Timeline.TimelineTreeView.TreeGridNode} */ (b); |
238 var nameA = Timeline.TimelineTreeView.eventNameForSorting(nodeA._profileNo
de.event); | 238 var nameA = Timeline.TimelineTreeView.eventNameForSorting(nodeA._profileNo
de.event); |
239 var nameB = Timeline.TimelineTreeView.eventNameForSorting(nodeB._profileNo
de.event); | 239 var nameB = Timeline.TimelineTreeView.eventNameForSorting(nodeB._profileNo
de.event); |
240 return nameA.localeCompare(nameB); | 240 return nameA.localeCompare(nameB); |
241 } | 241 } |
242 } | 242 } |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
274 null; | 274 null; |
275 var profileNode = gridNode && gridNode._profileNode; | 275 var profileNode = gridNode && gridNode._profileNode; |
276 if (profileNode === this._lastHoveredProfileNode) | 276 if (profileNode === this._lastHoveredProfileNode) |
277 return; | 277 return; |
278 this._lastHoveredProfileNode = profileNode; | 278 this._lastHoveredProfileNode = profileNode; |
279 this._onHover(profileNode); | 279 this._onHover(profileNode); |
280 } | 280 } |
281 | 281 |
282 /** | 282 /** |
283 * @param {!UI.ContextMenu} contextMenu | 283 * @param {!UI.ContextMenu} contextMenu |
284 * @param {!UI.DataGridNode} gridNode | 284 * @param {!DataGrid.DataGridNode} gridNode |
285 */ | 285 */ |
286 _onContextMenu(contextMenu, gridNode) { | 286 _onContextMenu(contextMenu, gridNode) { |
287 var profileNode = gridNode._profileNode; | 287 var profileNode = gridNode._profileNode; |
288 if (!profileNode) | 288 if (!profileNode) |
289 return; | 289 return; |
290 this._appendContextMenuItems(contextMenu, profileNode); | 290 this._appendContextMenuItems(contextMenu, profileNode); |
291 } | 291 } |
292 | 292 |
293 /** | 293 /** |
294 * @param {!TimelineModel.TimelineProfileTree.Node} treeNode | 294 * @param {!TimelineModel.TimelineProfileTree.Node} treeNode |
295 * @return {?Timeline.TimelineTreeView.GridNode} | 295 * @return {?Timeline.TimelineTreeView.GridNode} |
296 */ | 296 */ |
297 _dataGridNodeForTreeNode(treeNode) { | 297 _dataGridNodeForTreeNode(treeNode) { |
298 return treeNode[Timeline.TimelineTreeView.TreeGridNode._gridNodeSymbol] || n
ull; | 298 return treeNode[Timeline.TimelineTreeView.TreeGridNode._gridNodeSymbol] || n
ull; |
299 } | 299 } |
300 }; | 300 }; |
301 | 301 |
302 | 302 |
303 /** | 303 /** |
304 * @unrestricted | 304 * @unrestricted |
305 */ | 305 */ |
306 Timeline.TimelineTreeView.GridNode = class extends UI.SortableDataGridNode { | 306 Timeline.TimelineTreeView.GridNode = class extends DataGrid.SortableDataGridNode
{ |
307 /** | 307 /** |
308 * @param {!TimelineModel.TimelineProfileTree.Node} profileNode | 308 * @param {!TimelineModel.TimelineProfileTree.Node} profileNode |
309 * @param {number} grandTotalTime | 309 * @param {number} grandTotalTime |
310 * @param {number} maxSelfTime | 310 * @param {number} maxSelfTime |
311 * @param {number} maxTotalTime | 311 * @param {number} maxTotalTime |
312 * @param {!Timeline.TimelineTreeView} treeView | 312 * @param {!Timeline.TimelineTreeView} treeView |
313 */ | 313 */ |
314 constructor(profileNode, grandTotalTime, maxSelfTime, maxTotalTime, treeView)
{ | 314 constructor(profileNode, grandTotalTime, maxSelfTime, maxTotalTime, treeView)
{ |
315 super(null, false); | 315 super(null, false); |
316 | 316 |
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
711 /** | 711 /** |
712 * @unrestricted | 712 * @unrestricted |
713 */ | 713 */ |
714 Timeline.CallTreeTimelineTreeView = class extends Timeline.AggregatedTimelineTre
eView { | 714 Timeline.CallTreeTimelineTreeView = class extends Timeline.AggregatedTimelineTre
eView { |
715 /** | 715 /** |
716 * @param {!TimelineModel.TimelineModel} model | 716 * @param {!TimelineModel.TimelineModel} model |
717 * @param {!Array<!TimelineModel.TimelineModel.Filter>} filters | 717 * @param {!Array<!TimelineModel.TimelineModel.Filter>} filters |
718 */ | 718 */ |
719 constructor(model, filters) { | 719 constructor(model, filters) { |
720 super(model, filters); | 720 super(model, filters); |
721 this._dataGrid.markColumnAsSortedBy('total', UI.DataGrid.Order.Descending); | 721 this._dataGrid.markColumnAsSortedBy('total', DataGrid.DataGrid.Order.Descend
ing); |
722 } | 722 } |
723 | 723 |
724 /** | 724 /** |
725 * @override | 725 * @override |
726 * @return {!TimelineModel.TimelineProfileTree.Node} | 726 * @return {!TimelineModel.TimelineProfileTree.Node} |
727 */ | 727 */ |
728 _buildTree() { | 728 _buildTree() { |
729 var grouping = this._groupBySetting.get(); | 729 var grouping = this._groupBySetting.get(); |
730 var topDown = this._buildTopDownTree(this._groupingFunction(grouping)); | 730 var topDown = this._buildTopDownTree(this._groupingFunction(grouping)); |
731 if (grouping === Timeline.AggregatedTimelineTreeView.GroupBy.None) | 731 if (grouping === Timeline.AggregatedTimelineTreeView.GroupBy.None) |
732 return topDown; | 732 return topDown; |
733 return new TimelineModel.TimelineAggregator().performGrouping(topDown); | 733 return new TimelineModel.TimelineAggregator().performGrouping(topDown); |
734 } | 734 } |
735 }; | 735 }; |
736 | 736 |
737 /** | 737 /** |
738 * @unrestricted | 738 * @unrestricted |
739 */ | 739 */ |
740 Timeline.BottomUpTimelineTreeView = class extends Timeline.AggregatedTimelineTre
eView { | 740 Timeline.BottomUpTimelineTreeView = class extends Timeline.AggregatedTimelineTre
eView { |
741 /** | 741 /** |
742 * @param {!TimelineModel.TimelineModel} model | 742 * @param {!TimelineModel.TimelineModel} model |
743 * @param {!Array<!TimelineModel.TimelineModel.Filter>} filters | 743 * @param {!Array<!TimelineModel.TimelineModel.Filter>} filters |
744 */ | 744 */ |
745 constructor(model, filters) { | 745 constructor(model, filters) { |
746 super(model, filters); | 746 super(model, filters); |
747 this._dataGrid.markColumnAsSortedBy('self', UI.DataGrid.Order.Descending); | 747 this._dataGrid.markColumnAsSortedBy('self', DataGrid.DataGrid.Order.Descendi
ng); |
748 } | 748 } |
749 | 749 |
750 /** | 750 /** |
751 * @override | 751 * @override |
752 * @return {!TimelineModel.TimelineProfileTree.Node} | 752 * @return {!TimelineModel.TimelineProfileTree.Node} |
753 */ | 753 */ |
754 _buildTree() { | 754 _buildTree() { |
755 var topDown = this._buildTopDownTree(this._groupingFunction(this._groupBySet
ting.get())); | 755 var topDown = this._buildTopDownTree(this._groupingFunction(this._groupBySet
ting.get())); |
756 return TimelineModel.TimelineProfileTree.buildBottomUp(topDown); | 756 return TimelineModel.TimelineProfileTree.buildBottomUp(topDown); |
757 } | 757 } |
758 }; | 758 }; |
759 | 759 |
760 /** | 760 /** |
761 * @unrestricted | 761 * @unrestricted |
762 */ | 762 */ |
763 Timeline.EventsTimelineTreeView = class extends Timeline.TimelineTreeView { | 763 Timeline.EventsTimelineTreeView = class extends Timeline.TimelineTreeView { |
764 /** | 764 /** |
765 * @param {!TimelineModel.TimelineModel} model | 765 * @param {!TimelineModel.TimelineModel} model |
766 * @param {!Array<!TimelineModel.TimelineModel.Filter>} filters | 766 * @param {!Array<!TimelineModel.TimelineModel.Filter>} filters |
767 * @param {!Timeline.TimelineModeViewDelegate} delegate | 767 * @param {!Timeline.TimelineModeViewDelegate} delegate |
768 */ | 768 */ |
769 constructor(model, filters, delegate) { | 769 constructor(model, filters, delegate) { |
770 super(); | 770 super(); |
771 this._filtersControl = new Timeline.TimelineFilters(); | 771 this._filtersControl = new Timeline.TimelineFilters(); |
772 this._filtersControl.addEventListener(Timeline.TimelineFilters.Events.Filter
Changed, this._onFilterChanged, this); | 772 this._filtersControl.addEventListener(Timeline.TimelineFilters.Events.Filter
Changed, this._onFilterChanged, this); |
773 this._init(model, filters); | 773 this._init(model, filters); |
774 this._delegate = delegate; | 774 this._delegate = delegate; |
775 this._filters.push.apply(this._filters, this._filtersControl.filters()); | 775 this._filters.push.apply(this._filters, this._filtersControl.filters()); |
776 this._dataGrid.markColumnAsSortedBy('startTime', UI.DataGrid.Order.Ascending
); | 776 this._dataGrid.markColumnAsSortedBy('startTime', DataGrid.DataGrid.Order.Asc
ending); |
777 } | 777 } |
778 | 778 |
779 /** | 779 /** |
780 * @override | 780 * @override |
781 * @param {!Timeline.TimelineSelection} selection | 781 * @param {!Timeline.TimelineSelection} selection |
782 */ | 782 */ |
783 updateContents(selection) { | 783 updateContents(selection) { |
784 super.updateContents(selection); | 784 super.updateContents(selection); |
785 if (selection.type() === Timeline.TimelineSelection.Type.TraceEvent) { | 785 if (selection.type() === Timeline.TimelineSelection.Type.TraceEvent) { |
786 var event = /** @type {!SDK.TracingModel.Event} */ (selection.object()); | 786 var event = /** @type {!SDK.TracingModel.Event} */ (selection.object()); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
834 var node = this._findNodeWithEvent(event); | 834 var node = this._findNodeWithEvent(event); |
835 if (!node) | 835 if (!node) |
836 return; | 836 return; |
837 this.selectProfileNode(node, false); | 837 this.selectProfileNode(node, false); |
838 if (expand) | 838 if (expand) |
839 this._dataGridNodeForTreeNode(node).expand(); | 839 this._dataGridNodeForTreeNode(node).expand(); |
840 } | 840 } |
841 | 841 |
842 /** | 842 /** |
843 * @override | 843 * @override |
844 * @param {!Array<!UI.DataGrid.ColumnDescriptor>} columns | 844 * @param {!Array<!DataGrid.DataGrid.ColumnDescriptor>} columns |
845 */ | 845 */ |
846 _populateColumns(columns) { | 846 _populateColumns(columns) { |
847 columns.push( | 847 columns.push( |
848 {id: 'startTime', title: Common.UIString('Start Time'), width: '110px',
fixedWidth: true, sortable: true}); | 848 {id: 'startTime', title: Common.UIString('Start Time'), width: '110px',
fixedWidth: true, sortable: true}); |
849 super._populateColumns(columns); | 849 super._populateColumns(columns); |
850 } | 850 } |
851 | 851 |
852 /** | 852 /** |
853 * @override | 853 * @override |
854 * @param {!Element} parent | 854 * @param {!Element} parent |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
892 | 892 |
893 /** | 893 /** |
894 * @unrestricted | 894 * @unrestricted |
895 */ | 895 */ |
896 Timeline.TimelineStackView = class extends UI.VBox { | 896 Timeline.TimelineStackView = class extends UI.VBox { |
897 constructor(treeView) { | 897 constructor(treeView) { |
898 super(); | 898 super(); |
899 var header = this.element.createChild('div', 'timeline-stack-view-header'); | 899 var header = this.element.createChild('div', 'timeline-stack-view-header'); |
900 header.textContent = Common.UIString('Heaviest stack'); | 900 header.textContent = Common.UIString('Heaviest stack'); |
901 this._treeView = treeView; | 901 this._treeView = treeView; |
902 var columns = /** @type {!Array<!UI.DataGrid.ColumnDescriptor>} */ ([ | 902 var columns = /** @type {!Array<!DataGrid.DataGrid.ColumnDescriptor>} */ ([ |
903 {id: 'total', title: Common.UIString('Total Time'), fixedWidth: true, widt
h: '110px'}, | 903 {id: 'total', title: Common.UIString('Total Time'), fixedWidth: true, widt
h: '110px'}, |
904 {id: 'activity', title: Common.UIString('Activity')} | 904 {id: 'activity', title: Common.UIString('Activity')} |
905 ]); | 905 ]); |
906 this._dataGrid = new UI.ViewportDataGrid(columns); | 906 this._dataGrid = new DataGrid.ViewportDataGrid(columns); |
907 this._dataGrid.setResizeMethod(UI.DataGrid.ResizeMethod.Last); | 907 this._dataGrid.setResizeMethod(DataGrid.DataGrid.ResizeMethod.Last); |
908 this._dataGrid.addEventListener(UI.DataGrid.Events.SelectedNode, this._onSel
ectionChanged, this); | 908 this._dataGrid.addEventListener(DataGrid.DataGrid.Events.SelectedNode, this.
_onSelectionChanged, this); |
909 this._dataGrid.asWidget().show(this.element); | 909 this._dataGrid.asWidget().show(this.element); |
910 } | 910 } |
911 | 911 |
912 /** | 912 /** |
913 * @param {!Array<!TimelineModel.TimelineProfileTree.Node>} stack | 913 * @param {!Array<!TimelineModel.TimelineProfileTree.Node>} stack |
914 * @param {!TimelineModel.TimelineProfileTree.Node} selectedNode | 914 * @param {!TimelineModel.TimelineProfileTree.Node} selectedNode |
915 */ | 915 */ |
916 setStack(stack, selectedNode) { | 916 setStack(stack, selectedNode) { |
917 var rootNode = this._dataGrid.rootNode(); | 917 var rootNode = this._dataGrid.rootNode(); |
918 rootNode.removeChildren(); | 918 rootNode.removeChildren(); |
(...skipping 18 matching lines...) Expand all Loading... |
937 | 937 |
938 _onSelectionChanged() { | 938 _onSelectionChanged() { |
939 this.dispatchEventToListeners(Timeline.TimelineStackView.Events.SelectionCha
nged); | 939 this.dispatchEventToListeners(Timeline.TimelineStackView.Events.SelectionCha
nged); |
940 } | 940 } |
941 }; | 941 }; |
942 | 942 |
943 /** @enum {symbol} */ | 943 /** @enum {symbol} */ |
944 Timeline.TimelineStackView.Events = { | 944 Timeline.TimelineStackView.Events = { |
945 SelectionChanged: Symbol('SelectionChanged') | 945 SelectionChanged: Symbol('SelectionChanged') |
946 }; | 946 }; |
OLD | NEW |