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 407 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
724 /** | 724 /** |
725 * @unrestricted | 725 * @unrestricted |
726 */ | 726 */ |
727 Timeline.CallTreeTimelineTreeView = class extends Timeline.AggregatedTimelineTre
eView { | 727 Timeline.CallTreeTimelineTreeView = class extends Timeline.AggregatedTimelineTre
eView { |
728 /** | 728 /** |
729 * @param {!TimelineModel.TimelineModel} model | 729 * @param {!TimelineModel.TimelineModel} model |
730 * @param {!Array<!TimelineModel.TimelineModel.Filter>} filters | 730 * @param {!Array<!TimelineModel.TimelineModel.Filter>} filters |
731 */ | 731 */ |
732 constructor(model, filters) { | 732 constructor(model, filters) { |
733 super(model, filters); | 733 super(model, filters); |
734 this._dataGrid.markColumnAsSortedBy('total', UI.DataGrid.Order.Descending); | 734 this._dataGrid.markColumnAsSortedBy('total', DataGrid.DataGrid.Order.Descend
ing); |
735 } | 735 } |
736 | 736 |
737 /** | 737 /** |
738 * @override | 738 * @override |
739 * @return {!TimelineModel.TimelineProfileTree.Node} | 739 * @return {!TimelineModel.TimelineProfileTree.Node} |
740 */ | 740 */ |
741 _buildTree() { | 741 _buildTree() { |
742 var grouping = this._groupBySetting.get(); | 742 var grouping = this._groupBySetting.get(); |
743 var topDown = this._buildTopDownTree(this._groupingFunction(grouping)); | 743 var topDown = this._buildTopDownTree(this._groupingFunction(grouping)); |
744 if (grouping === Timeline.AggregatedTimelineTreeView.GroupBy.None) | 744 if (grouping === Timeline.AggregatedTimelineTreeView.GroupBy.None) |
745 return topDown; | 745 return topDown; |
746 return new TimelineModel.TimelineAggregator().performGrouping(topDown); | 746 return new TimelineModel.TimelineAggregator().performGrouping(topDown); |
747 } | 747 } |
748 }; | 748 }; |
749 | 749 |
750 /** | 750 /** |
751 * @unrestricted | 751 * @unrestricted |
752 */ | 752 */ |
753 Timeline.BottomUpTimelineTreeView = class extends Timeline.AggregatedTimelineTre
eView { | 753 Timeline.BottomUpTimelineTreeView = class extends Timeline.AggregatedTimelineTre
eView { |
754 /** | 754 /** |
755 * @param {!TimelineModel.TimelineModel} model | 755 * @param {!TimelineModel.TimelineModel} model |
756 * @param {!Array<!TimelineModel.TimelineModel.Filter>} filters | 756 * @param {!Array<!TimelineModel.TimelineModel.Filter>} filters |
757 */ | 757 */ |
758 constructor(model, filters) { | 758 constructor(model, filters) { |
759 super(model, filters); | 759 super(model, filters); |
760 this._dataGrid.markColumnAsSortedBy('self', UI.DataGrid.Order.Descending); | 760 this._dataGrid.markColumnAsSortedBy('self', DataGrid.DataGrid.Order.Descendi
ng); |
761 } | 761 } |
762 | 762 |
763 /** | 763 /** |
764 * @override | 764 * @override |
765 * @return {!TimelineModel.TimelineProfileTree.Node} | 765 * @return {!TimelineModel.TimelineProfileTree.Node} |
766 */ | 766 */ |
767 _buildTree() { | 767 _buildTree() { |
768 var topDown = this._buildTopDownTree(this._groupingFunction(this._groupBySet
ting.get())); | 768 var topDown = this._buildTopDownTree(this._groupingFunction(this._groupBySet
ting.get())); |
769 return TimelineModel.TimelineProfileTree.buildBottomUp(topDown); | 769 return TimelineModel.TimelineProfileTree.buildBottomUp(topDown); |
770 } | 770 } |
771 }; | 771 }; |
772 | 772 |
773 /** | 773 /** |
774 * @unrestricted | 774 * @unrestricted |
775 */ | 775 */ |
776 Timeline.EventsTimelineTreeView = class extends Timeline.TimelineTreeView { | 776 Timeline.EventsTimelineTreeView = class extends Timeline.TimelineTreeView { |
777 /** | 777 /** |
778 * @param {!TimelineModel.TimelineModel} model | 778 * @param {!TimelineModel.TimelineModel} model |
779 * @param {!Array<!TimelineModel.TimelineModel.Filter>} filters | 779 * @param {!Array<!TimelineModel.TimelineModel.Filter>} filters |
780 * @param {!Timeline.TimelineModeViewDelegate} delegate | 780 * @param {!Timeline.TimelineModeViewDelegate} delegate |
781 */ | 781 */ |
782 constructor(model, filters, delegate) { | 782 constructor(model, filters, delegate) { |
783 super(); | 783 super(); |
784 this._filtersControl = new Timeline.TimelineFilters(); | 784 this._filtersControl = new Timeline.TimelineFilters(); |
785 this._filtersControl.addEventListener(Timeline.TimelineFilters.Events.Filter
Changed, this._onFilterChanged, this); | 785 this._filtersControl.addEventListener(Timeline.TimelineFilters.Events.Filter
Changed, this._onFilterChanged, this); |
786 this._init(model, filters); | 786 this._init(model, filters); |
787 this._delegate = delegate; | 787 this._delegate = delegate; |
788 this._filters.push.apply(this._filters, this._filtersControl.filters()); | 788 this._filters.push.apply(this._filters, this._filtersControl.filters()); |
789 this._dataGrid.markColumnAsSortedBy('startTime', UI.DataGrid.Order.Ascending
); | 789 this._dataGrid.markColumnAsSortedBy('startTime', DataGrid.DataGrid.Order.Asc
ending); |
790 } | 790 } |
791 | 791 |
792 /** | 792 /** |
793 * @override | 793 * @override |
794 * @param {!Timeline.TimelineSelection} selection | 794 * @param {!Timeline.TimelineSelection} selection |
795 */ | 795 */ |
796 updateContents(selection) { | 796 updateContents(selection) { |
797 super.updateContents(selection); | 797 super.updateContents(selection); |
798 if (selection.type() === Timeline.TimelineSelection.Type.TraceEvent) { | 798 if (selection.type() === Timeline.TimelineSelection.Type.TraceEvent) { |
799 var event = /** @type {!SDK.TracingModel.Event} */ (selection.object()); | 799 var event = /** @type {!SDK.TracingModel.Event} */ (selection.object()); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
847 var node = this._findNodeWithEvent(event); | 847 var node = this._findNodeWithEvent(event); |
848 if (!node) | 848 if (!node) |
849 return; | 849 return; |
850 this.selectProfileNode(node, false); | 850 this.selectProfileNode(node, false); |
851 if (expand) | 851 if (expand) |
852 this._dataGridNodeForTreeNode(node).expand(); | 852 this._dataGridNodeForTreeNode(node).expand(); |
853 } | 853 } |
854 | 854 |
855 /** | 855 /** |
856 * @override | 856 * @override |
857 * @param {!Array<!UI.DataGrid.ColumnDescriptor>} columns | 857 * @param {!Array<!DataGrid.DataGrid.ColumnDescriptor>} columns |
858 */ | 858 */ |
859 _populateColumns(columns) { | 859 _populateColumns(columns) { |
860 columns.push( | 860 columns.push( |
861 {id: 'startTime', title: Common.UIString('Start Time'), width: '110px',
fixedWidth: true, sortable: true}); | 861 {id: 'startTime', title: Common.UIString('Start Time'), width: '110px',
fixedWidth: true, sortable: true}); |
862 super._populateColumns(columns); | 862 super._populateColumns(columns); |
863 } | 863 } |
864 | 864 |
865 /** | 865 /** |
866 * @override | 866 * @override |
867 * @param {!Element} parent | 867 * @param {!Element} parent |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
905 | 905 |
906 /** | 906 /** |
907 * @unrestricted | 907 * @unrestricted |
908 */ | 908 */ |
909 Timeline.TimelineStackView = class extends UI.VBox { | 909 Timeline.TimelineStackView = class extends UI.VBox { |
910 constructor(treeView) { | 910 constructor(treeView) { |
911 super(); | 911 super(); |
912 var header = this.element.createChild('div', 'timeline-stack-view-header'); | 912 var header = this.element.createChild('div', 'timeline-stack-view-header'); |
913 header.textContent = Common.UIString('Heaviest stack'); | 913 header.textContent = Common.UIString('Heaviest stack'); |
914 this._treeView = treeView; | 914 this._treeView = treeView; |
915 var columns = /** @type {!Array<!UI.DataGrid.ColumnDescriptor>} */ ([ | 915 var columns = /** @type {!Array<!DataGrid.DataGrid.ColumnDescriptor>} */ ([ |
916 {id: 'total', title: Common.UIString('Total Time'), fixedWidth: true, widt
h: '110px'}, | 916 {id: 'total', title: Common.UIString('Total Time'), fixedWidth: true, widt
h: '110px'}, |
917 {id: 'activity', title: Common.UIString('Activity')} | 917 {id: 'activity', title: Common.UIString('Activity')} |
918 ]); | 918 ]); |
919 this._dataGrid = new UI.ViewportDataGrid(columns); | 919 this._dataGrid = new DataGrid.ViewportDataGrid(columns); |
920 this._dataGrid.setResizeMethod(UI.DataGrid.ResizeMethod.Last); | 920 this._dataGrid.setResizeMethod(DataGrid.DataGrid.ResizeMethod.Last); |
921 this._dataGrid.addEventListener(UI.DataGrid.Events.SelectedNode, this._onSel
ectionChanged, this); | 921 this._dataGrid.addEventListener(DataGrid.DataGrid.Events.SelectedNode, this.
_onSelectionChanged, this); |
922 this._dataGrid.asWidget().show(this.element); | 922 this._dataGrid.asWidget().show(this.element); |
923 } | 923 } |
924 | 924 |
925 /** | 925 /** |
926 * @param {!Array<!TimelineModel.TimelineProfileTree.Node>} stack | 926 * @param {!Array<!TimelineModel.TimelineProfileTree.Node>} stack |
927 * @param {!TimelineModel.TimelineProfileTree.Node} selectedNode | 927 * @param {!TimelineModel.TimelineProfileTree.Node} selectedNode |
928 */ | 928 */ |
929 setStack(stack, selectedNode) { | 929 setStack(stack, selectedNode) { |
930 var rootNode = this._dataGrid.rootNode(); | 930 var rootNode = this._dataGrid.rootNode(); |
931 rootNode.removeChildren(); | 931 rootNode.removeChildren(); |
(...skipping 18 matching lines...) Expand all Loading... |
950 | 950 |
951 _onSelectionChanged() { | 951 _onSelectionChanged() { |
952 this.dispatchEventToListeners(Timeline.TimelineStackView.Events.SelectionCha
nged); | 952 this.dispatchEventToListeners(Timeline.TimelineStackView.Events.SelectionCha
nged); |
953 } | 953 } |
954 }; | 954 }; |
955 | 955 |
956 /** @enum {symbol} */ | 956 /** @enum {symbol} */ |
957 Timeline.TimelineStackView.Events = { | 957 Timeline.TimelineStackView.Events = { |
958 SelectionChanged: Symbol('SelectionChanged') | 958 SelectionChanged: Symbol('SelectionChanged') |
959 }; | 959 }; |
OLD | NEW |