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

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/timeline/TimelineTreeView.js

Issue 2493373002: DevTools: rename WebInspector into modules. (Closed)
Patch Set: for bots 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
OLDNEW
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 WebInspector.TimelineTreeView = class extends WebInspector.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');
11 } 11 }
12 12
13 /** 13 /**
14 * @param {!WebInspector.TracingModel.Event} event 14 * @param {!SDK.TracingModel.Event} event
15 * @return {string} 15 * @return {string}
16 */ 16 */
17 static eventNameForSorting(event) { 17 static eventNameForSorting(event) {
18 if (event.name === WebInspector.TimelineModel.RecordType.JSFrame) { 18 if (event.name === TimelineModel.TimelineModel.RecordType.JSFrame) {
19 var data = event.args['data']; 19 var data = event.args['data'];
20 return data['functionName'] + '@' + (data['scriptId'] || data['url'] || '' ); 20 return data['functionName'] + '@' + (data['scriptId'] || data['url'] || '' );
21 } 21 }
22 return event.name + ':@' + WebInspector.TimelineProfileTree.eventURL(event); 22 return event.name + ':@' + TimelineModel.TimelineProfileTree.eventURL(event) ;
23 } 23 }
24 24
25 /** 25 /**
26 * @param {!WebInspector.TimelineModel} model 26 * @param {!TimelineModel.TimelineModel} model
27 * @param {!Array<!WebInspector.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 WebInspector.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<!WebInspector.DataGrid.ColumnDescriptor>} */ ([]); 35 var columns = /** @type {!Array<!UI.DataGrid.ColumnDescriptor>} */ ([]);
36 this._populateColumns(columns); 36 this._populateColumns(columns);
37 37
38 var mainView = new WebInspector.VBox(); 38 var mainView = new UI.VBox();
39 this._populateToolbar(mainView.element); 39 this._populateToolbar(mainView.element);
40 this._dataGrid = new WebInspector.SortableDataGrid(columns); 40 this._dataGrid = new UI.SortableDataGrid(columns);
41 this._dataGrid.addEventListener(WebInspector.DataGrid.Events.SortingChanged, this._sortingChanged, this); 41 this._dataGrid.addEventListener(UI.DataGrid.Events.SortingChanged, this._sor tingChanged, 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(WebInspector.DataGrid.ResizeMethod.Last); 43 this._dataGrid.setResizeMethod(UI.DataGrid.ResizeMethod.Last);
44 this._dataGrid.asWidget().show(mainView.element); 44 this._dataGrid.asWidget().show(mainView.element);
45 45
46 this._splitWidget = new WebInspector.SplitWidget(true, true, 'timelineTreeVi ewDetailsSplitWidget'); 46 this._splitWidget = new UI.SplitWidget(true, true, 'timelineTreeViewDetailsS plitWidget');
47 this._splitWidget.show(this.element); 47 this._splitWidget.show(this.element);
48 this._splitWidget.setMainWidget(mainView); 48 this._splitWidget.setMainWidget(mainView);
49 49
50 this._detailsView = new WebInspector.VBox(); 50 this._detailsView = new UI.VBox();
51 this._detailsView.element.classList.add('timeline-details-view', 'timeline-d etails-view-body'); 51 this._detailsView.element.classList.add('timeline-details-view', 'timeline-d etails-view-body');
52 this._splitWidget.setSidebarWidget(this._detailsView); 52 this._splitWidget.setSidebarWidget(this._detailsView);
53 this._dataGrid.addEventListener(WebInspector.DataGrid.Events.SelectedNode, t his._updateDetailsForSelection, this); 53 this._dataGrid.addEventListener(UI.DataGrid.Events.SelectedNode, this._updat eDetailsForSelection, this);
54 54
55 /** @type {?WebInspector.TimelineProfileTree.Node|undefined} */ 55 /** @type {?TimelineModel.TimelineProfileTree.Node|undefined} */
56 this._lastSelectedNode; 56 this._lastSelectedNode;
57 } 57 }
58 58
59 /** 59 /**
60 * @param {!WebInspector.TimelineSelection} selection 60 * @param {!Timeline.TimelineSelection} selection
61 */ 61 */
62 updateContents(selection) { 62 updateContents(selection) {
63 this.setRange(selection.startTime(), selection.endTime()); 63 this.setRange(selection.startTime(), selection.endTime());
64 } 64 }
65 65
66 /** 66 /**
67 * @param {number} startTime 67 * @param {number} startTime
68 * @param {number} endTime 68 * @param {number} endTime
69 */ 69 */
70 setRange(startTime, endTime) { 70 setRange(startTime, endTime) {
71 this._startTime = startTime; 71 this._startTime = startTime;
72 this._endTime = endTime; 72 this._endTime = endTime;
73 this._refreshTree(); 73 this._refreshTree();
74 } 74 }
75 75
76 /** 76 /**
77 * @return {boolean} 77 * @return {boolean}
78 */ 78 */
79 _exposePercentages() { 79 _exposePercentages() {
80 return false; 80 return false;
81 } 81 }
82 82
83 /** 83 /**
84 * @param {!Element} parent 84 * @param {!Element} parent
85 */ 85 */
86 _populateToolbar(parent) { 86 _populateToolbar(parent) {
87 } 87 }
88 88
89 /** 89 /**
90 * @param {?WebInspector.TimelineProfileTree.Node} node 90 * @param {?TimelineModel.TimelineProfileTree.Node} node
91 */ 91 */
92 _onHover(node) { 92 _onHover(node) {
93 } 93 }
94 94
95 /** 95 /**
96 * @param {!WebInspector.TracingModel.Event} event 96 * @param {!SDK.TracingModel.Event} event
97 * @return {?Element} 97 * @return {?Element}
98 */ 98 */
99 _linkifyLocation(event) { 99 _linkifyLocation(event) {
100 var target = this._model.targetByEvent(event); 100 var target = this._model.targetByEvent(event);
101 if (!target) 101 if (!target)
102 return null; 102 return null;
103 var frame = WebInspector.TimelineProfileTree.eventStackFrame(event); 103 var frame = TimelineModel.TimelineProfileTree.eventStackFrame(event);
104 if (!frame) 104 if (!frame)
105 return null; 105 return null;
106 return this._linkifier.maybeLinkifyConsoleCallFrame(target, frame); 106 return this._linkifier.maybeLinkifyConsoleCallFrame(target, frame);
107 } 107 }
108 108
109 /** 109 /**
110 * @param {!WebInspector.TimelineProfileTree.Node} treeNode 110 * @param {!TimelineModel.TimelineProfileTree.Node} treeNode
111 * @param {boolean} suppressSelectedEvent 111 * @param {boolean} suppressSelectedEvent
112 */ 112 */
113 selectProfileNode(treeNode, suppressSelectedEvent) { 113 selectProfileNode(treeNode, suppressSelectedEvent) {
114 var pathToRoot = []; 114 var pathToRoot = [];
115 for (var node = treeNode; node; node = node.parent) 115 for (var node = treeNode; node; node = node.parent)
116 pathToRoot.push(node); 116 pathToRoot.push(node);
117 for (var i = pathToRoot.length - 1; i > 0; --i) { 117 for (var i = pathToRoot.length - 1; i > 0; --i) {
118 var gridNode = this._dataGridNodeForTreeNode(pathToRoot[i]); 118 var gridNode = this._dataGridNodeForTreeNode(pathToRoot[i]);
119 if (gridNode && gridNode.dataGrid) 119 if (gridNode && gridNode.dataGrid)
120 gridNode.expand(); 120 gridNode.expand();
(...skipping 13 matching lines...) Expand all
134 return; 134 return;
135 var maxSelfTime = 0; 135 var maxSelfTime = 0;
136 var maxTotalTime = 0; 136 var maxTotalTime = 0;
137 for (var child of tree.children.values()) { 137 for (var child of tree.children.values()) {
138 maxSelfTime = Math.max(maxSelfTime, child.selfTime); 138 maxSelfTime = Math.max(maxSelfTime, child.selfTime);
139 maxTotalTime = Math.max(maxTotalTime, child.totalTime); 139 maxTotalTime = Math.max(maxTotalTime, child.totalTime);
140 } 140 }
141 for (var child of tree.children.values()) { 141 for (var child of tree.children.values()) {
142 // Exclude the idle time off the total calculation. 142 // Exclude the idle time off the total calculation.
143 var gridNode = 143 var gridNode =
144 new WebInspector.TimelineTreeView.TreeGridNode(child, tree.totalTime, maxSelfTime, maxTotalTime, this); 144 new Timeline.TimelineTreeView.TreeGridNode(child, tree.totalTime, maxS elfTime, maxTotalTime, this);
145 this._dataGrid.insertChild(gridNode); 145 this._dataGrid.insertChild(gridNode);
146 } 146 }
147 this._sortingChanged(); 147 this._sortingChanged();
148 this._updateDetailsForSelection(); 148 this._updateDetailsForSelection();
149 } 149 }
150 150
151 /** 151 /**
152 * @return {!WebInspector.TimelineProfileTree.Node} 152 * @return {!TimelineModel.TimelineProfileTree.Node}
153 */ 153 */
154 _buildTree() { 154 _buildTree() {
155 throw new Error('Not Implemented'); 155 throw new Error('Not Implemented');
156 } 156 }
157 157
158 /** 158 /**
159 * @param {function(!WebInspector.TracingModel.Event):(string|symbol)=} eventI dCallback 159 * @param {function(!SDK.TracingModel.Event):(string|symbol)=} eventIdCallback
160 * @return {!WebInspector.TimelineProfileTree.Node} 160 * @return {!TimelineModel.TimelineProfileTree.Node}
161 */ 161 */
162 _buildTopDownTree(eventIdCallback) { 162 _buildTopDownTree(eventIdCallback) {
163 return WebInspector.TimelineProfileTree.buildTopDown( 163 return TimelineModel.TimelineProfileTree.buildTopDown(
164 this._model.mainThreadEvents(), this._filters, this._startTime, this._en dTime, eventIdCallback); 164 this._model.mainThreadEvents(), this._filters, this._startTime, this._en dTime, eventIdCallback);
165 } 165 }
166 166
167 /** 167 /**
168 * @param {!Array<!WebInspector.DataGrid.ColumnDescriptor>} columns 168 * @param {!Array<!UI.DataGrid.ColumnDescriptor>} columns
169 */ 169 */
170 _populateColumns(columns) { 170 _populateColumns(columns) {
171 columns.push( 171 columns.push(
172 {id: 'self', title: WebInspector.UIString('Self Time'), width: '110px', fixedWidth: true, sortable: true}); 172 {id: 'self', title: Common.UIString('Self Time'), width: '110px', fixedW idth: true, sortable: true});
173 columns.push( 173 columns.push(
174 {id: 'total', title: WebInspector.UIString('Total Time'), width: '110px' , fixedWidth: true, sortable: true}); 174 {id: 'total', title: Common.UIString('Total Time'), width: '110px', fixe dWidth: true, sortable: true});
175 columns.push({id: 'activity', title: WebInspector.UIString('Activity'), disc losure: true, sortable: true}); 175 columns.push({id: 'activity', title: Common.UIString('Activity'), disclosure : true, sortable: true});
176 } 176 }
177 177
178 _sortingChanged() { 178 _sortingChanged() {
179 var columnId = this._dataGrid.sortColumnId(); 179 var columnId = this._dataGrid.sortColumnId();
180 if (!columnId) 180 if (!columnId)
181 return; 181 return;
182 var sortFunction; 182 var sortFunction;
183 switch (columnId) { 183 switch (columnId) {
184 case 'startTime': 184 case 'startTime':
185 sortFunction = compareStartTime; 185 sortFunction = compareStartTime;
186 break; 186 break;
187 case 'self': 187 case 'self':
188 sortFunction = compareNumericField.bind(null, 'selfTime'); 188 sortFunction = compareNumericField.bind(null, 'selfTime');
189 break; 189 break;
190 case 'total': 190 case 'total':
191 sortFunction = compareNumericField.bind(null, 'totalTime'); 191 sortFunction = compareNumericField.bind(null, 'totalTime');
192 break; 192 break;
193 case 'activity': 193 case 'activity':
194 sortFunction = compareName; 194 sortFunction = compareName;
195 break; 195 break;
196 default: 196 default:
197 console.assert(false, 'Unknown sort field: ' + columnId); 197 console.assert(false, 'Unknown sort field: ' + columnId);
198 return; 198 return;
199 } 199 }
200 this._dataGrid.sortNodes(sortFunction, !this._dataGrid.isSortOrderAscending( )); 200 this._dataGrid.sortNodes(sortFunction, !this._dataGrid.isSortOrderAscending( ));
201 201
202 /** 202 /**
203 * @param {string} field 203 * @param {string} field
204 * @param {!WebInspector.DataGridNode} a 204 * @param {!UI.DataGridNode} a
205 * @param {!WebInspector.DataGridNode} b 205 * @param {!UI.DataGridNode} b
206 * @return {number} 206 * @return {number}
207 */ 207 */
208 function compareNumericField(field, a, b) { 208 function compareNumericField(field, a, b) {
209 var nodeA = /** @type {!WebInspector.TimelineTreeView.TreeGridNode} */ (a) ; 209 var nodeA = /** @type {!Timeline.TimelineTreeView.TreeGridNode} */ (a);
210 var nodeB = /** @type {!WebInspector.TimelineTreeView.TreeGridNode} */ (b) ; 210 var nodeB = /** @type {!Timeline.TimelineTreeView.TreeGridNode} */ (b);
211 return nodeA._profileNode[field] - nodeB._profileNode[field]; 211 return nodeA._profileNode[field] - nodeB._profileNode[field];
212 } 212 }
213 213
214 /** 214 /**
215 * @param {!WebInspector.DataGridNode} a 215 * @param {!UI.DataGridNode} a
216 * @param {!WebInspector.DataGridNode} b 216 * @param {!UI.DataGridNode} b
217 * @return {number} 217 * @return {number}
218 */ 218 */
219 function compareStartTime(a, b) { 219 function compareStartTime(a, b) {
220 var nodeA = /** @type {!WebInspector.TimelineTreeView.TreeGridNode} */ (a) ; 220 var nodeA = /** @type {!Timeline.TimelineTreeView.TreeGridNode} */ (a);
221 var nodeB = /** @type {!WebInspector.TimelineTreeView.TreeGridNode} */ (b) ; 221 var nodeB = /** @type {!Timeline.TimelineTreeView.TreeGridNode} */ (b);
222 return nodeA._profileNode.event.startTime - nodeB._profileNode.event.start Time; 222 return nodeA._profileNode.event.startTime - nodeB._profileNode.event.start Time;
223 } 223 }
224 224
225 /** 225 /**
226 * @param {!WebInspector.DataGridNode} a 226 * @param {!UI.DataGridNode} a
227 * @param {!WebInspector.DataGridNode} b 227 * @param {!UI.DataGridNode} b
228 * @return {number} 228 * @return {number}
229 */ 229 */
230 function compareName(a, b) { 230 function compareName(a, b) {
231 var nodeA = /** @type {!WebInspector.TimelineTreeView.TreeGridNode} */ (a) ; 231 var nodeA = /** @type {!Timeline.TimelineTreeView.TreeGridNode} */ (a);
232 var nodeB = /** @type {!WebInspector.TimelineTreeView.TreeGridNode} */ (b) ; 232 var nodeB = /** @type {!Timeline.TimelineTreeView.TreeGridNode} */ (b);
233 var nameA = WebInspector.TimelineTreeView.eventNameForSorting(nodeA._profi leNode.event); 233 var nameA = Timeline.TimelineTreeView.eventNameForSorting(nodeA._profileNo de.event);
234 var nameB = WebInspector.TimelineTreeView.eventNameForSorting(nodeB._profi leNode.event); 234 var nameB = Timeline.TimelineTreeView.eventNameForSorting(nodeB._profileNo de.event);
235 return nameA.localeCompare(nameB); 235 return nameA.localeCompare(nameB);
236 } 236 }
237 } 237 }
238 238
239 _updateDetailsForSelection() { 239 _updateDetailsForSelection() {
240 var selectedNode = this._dataGrid.selectedNode ? 240 var selectedNode = this._dataGrid.selectedNode ?
241 /** @type {!WebInspector.TimelineTreeView.TreeGridNode} */ (this._dataGr id.selectedNode)._profileNode : 241 /** @type {!Timeline.TimelineTreeView.TreeGridNode} */ (this._dataGrid.s electedNode)._profileNode :
242 null; 242 null;
243 if (selectedNode === this._lastSelectedNode) 243 if (selectedNode === this._lastSelectedNode)
244 return; 244 return;
245 this._lastSelectedNode = selectedNode; 245 this._lastSelectedNode = selectedNode;
246 this._detailsView.detachChildWidgets(); 246 this._detailsView.detachChildWidgets();
247 this._detailsView.element.removeChildren(); 247 this._detailsView.element.removeChildren();
248 if (!selectedNode || !this._showDetailsForNode(selectedNode)) { 248 if (!selectedNode || !this._showDetailsForNode(selectedNode)) {
249 var banner = this._detailsView.element.createChild('div', 'full-widget-dim med-banner'); 249 var banner = this._detailsView.element.createChild('div', 'full-widget-dim med-banner');
250 banner.createTextChild(WebInspector.UIString('Select item for details.')); 250 banner.createTextChild(Common.UIString('Select item for details.'));
251 } 251 }
252 } 252 }
253 253
254 /** 254 /**
255 * @param {!WebInspector.TimelineProfileTree.Node} node 255 * @param {!TimelineModel.TimelineProfileTree.Node} node
256 * @return {boolean} 256 * @return {boolean}
257 */ 257 */
258 _showDetailsForNode(node) { 258 _showDetailsForNode(node) {
259 return false; 259 return false;
260 } 260 }
261 261
262 /** 262 /**
263 * @param {!Event} event 263 * @param {!Event} event
264 */ 264 */
265 _onMouseMove(event) { 265 _onMouseMove(event) {
266 var gridNode = event.target && (event.target instanceof Node) ? 266 var gridNode = event.target && (event.target instanceof Node) ?
267 /** @type {?WebInspector.TimelineTreeView.TreeGridNode} */ ( 267 /** @type {?Timeline.TimelineTreeView.TreeGridNode} */ (
268 this._dataGrid.dataGridNodeFromNode(/** @type {!Node} */ (event.targ et))) : 268 this._dataGrid.dataGridNodeFromNode(/** @type {!Node} */ (event.targ et))) :
269 null; 269 null;
270 var profileNode = gridNode && gridNode._profileNode; 270 var profileNode = gridNode && gridNode._profileNode;
271 if (profileNode === this._lastHoveredProfileNode) 271 if (profileNode === this._lastHoveredProfileNode)
272 return; 272 return;
273 this._lastHoveredProfileNode = profileNode; 273 this._lastHoveredProfileNode = profileNode;
274 this._onHover(profileNode); 274 this._onHover(profileNode);
275 } 275 }
276 276
277 /** 277 /**
278 * @param {!WebInspector.TimelineProfileTree.Node} treeNode 278 * @param {!TimelineModel.TimelineProfileTree.Node} treeNode
279 * @return {?WebInspector.TimelineTreeView.GridNode} 279 * @return {?Timeline.TimelineTreeView.GridNode}
280 */ 280 */
281 _dataGridNodeForTreeNode(treeNode) { 281 _dataGridNodeForTreeNode(treeNode) {
282 return treeNode[WebInspector.TimelineTreeView.TreeGridNode._gridNodeSymbol] || null; 282 return treeNode[Timeline.TimelineTreeView.TreeGridNode._gridNodeSymbol] || n ull;
283 } 283 }
284 }; 284 };
285 285
286 286
287 /** 287 /**
288 * @unrestricted 288 * @unrestricted
289 */ 289 */
290 WebInspector.TimelineTreeView.GridNode = class extends WebInspector.SortableData GridNode { 290 Timeline.TimelineTreeView.GridNode = class extends UI.SortableDataGridNode {
291 /** 291 /**
292 * @param {!WebInspector.TimelineProfileTree.Node} profileNode 292 * @param {!TimelineModel.TimelineProfileTree.Node} profileNode
293 * @param {number} grandTotalTime 293 * @param {number} grandTotalTime
294 * @param {number} maxSelfTime 294 * @param {number} maxSelfTime
295 * @param {number} maxTotalTime 295 * @param {number} maxTotalTime
296 * @param {!WebInspector.TimelineTreeView} treeView 296 * @param {!Timeline.TimelineTreeView} treeView
297 */ 297 */
298 constructor(profileNode, grandTotalTime, maxSelfTime, maxTotalTime, treeView) { 298 constructor(profileNode, grandTotalTime, maxSelfTime, maxTotalTime, treeView) {
299 super(null, false); 299 super(null, false);
300 300
301 this._populated = false; 301 this._populated = false;
302 this._profileNode = profileNode; 302 this._profileNode = profileNode;
303 this._treeView = treeView; 303 this._treeView = treeView;
304 this._grandTotalTime = grandTotalTime; 304 this._grandTotalTime = grandTotalTime;
305 this._maxSelfTime = maxSelfTime; 305 this._maxSelfTime = maxSelfTime;
306 this._maxTotalTime = maxTotalTime; 306 this._maxTotalTime = maxTotalTime;
(...skipping 14 matching lines...) Expand all
321 * @param {string} columnId 321 * @param {string} columnId
322 * @return {!Element} 322 * @return {!Element}
323 */ 323 */
324 _createNameCell(columnId) { 324 _createNameCell(columnId) {
325 const cell = this.createTD(columnId); 325 const cell = this.createTD(columnId);
326 const container = cell.createChild('div', 'name-container'); 326 const container = cell.createChild('div', 'name-container');
327 const icon = container.createChild('div', 'activity-icon'); 327 const icon = container.createChild('div', 'activity-icon');
328 const name = container.createChild('div', 'activity-name'); 328 const name = container.createChild('div', 'activity-name');
329 const event = this._profileNode.event; 329 const event = this._profileNode.event;
330 if (this._profileNode.isGroupNode()) { 330 if (this._profileNode.isGroupNode()) {
331 const treeView = /** @type {!WebInspector.AggregatedTimelineTreeView} */ ( this._treeView); 331 const treeView = /** @type {!Timeline.AggregatedTimelineTreeView} */ (this ._treeView);
332 const info = treeView._displayInfoForGroupNode(this._profileNode); 332 const info = treeView._displayInfoForGroupNode(this._profileNode);
333 name.textContent = info.name; 333 name.textContent = info.name;
334 icon.style.backgroundColor = info.color; 334 icon.style.backgroundColor = info.color;
335 } else if (event) { 335 } else if (event) {
336 const data = event.args['data']; 336 const data = event.args['data'];
337 const deoptReason = data && data['deoptReason']; 337 const deoptReason = data && data['deoptReason'];
338 if (deoptReason) { 338 if (deoptReason) {
339 container.createChild('div', 'activity-warning').title = 339 container.createChild('div', 'activity-warning').title =
340 WebInspector.UIString('Not optimized: %s', deoptReason); 340 Common.UIString('Not optimized: %s', deoptReason);
341 } 341 }
342 name.textContent = WebInspector.TimelineUIUtils.eventTitle(event); 342 name.textContent = Timeline.TimelineUIUtils.eventTitle(event);
343 const link = this._treeView._linkifyLocation(event); 343 const link = this._treeView._linkifyLocation(event);
344 if (link) 344 if (link)
345 container.createChild('div', 'activity-link').appendChild(link); 345 container.createChild('div', 'activity-link').appendChild(link);
346 icon.style.backgroundColor = WebInspector.TimelineUIUtils.eventColor(event ); 346 icon.style.backgroundColor = Timeline.TimelineUIUtils.eventColor(event);
347 } 347 }
348 return cell; 348 return cell;
349 } 349 }
350 350
351 /** 351 /**
352 * @param {string} columnId 352 * @param {string} columnId
353 * @return {?Element} 353 * @return {?Element}
354 */ 354 */
355 _createValueCell(columnId) { 355 _createValueCell(columnId) {
356 if (columnId !== 'self' && columnId !== 'total' && columnId !== 'startTime') 356 if (columnId !== 'self' && columnId !== 'total' && columnId !== 'startTime')
(...skipping 15 matching lines...) Expand all
372 value = this._profileNode.totalTime; 372 value = this._profileNode.totalTime;
373 maxTime = this._maxTotalTime; 373 maxTime = this._maxTotalTime;
374 showPercents = true; 374 showPercents = true;
375 break; 375 break;
376 default: 376 default:
377 return null; 377 return null;
378 } 378 }
379 var cell = this.createTD(columnId); 379 var cell = this.createTD(columnId);
380 cell.className = 'numeric-column'; 380 cell.className = 'numeric-column';
381 var textDiv = cell.createChild('div'); 381 var textDiv = cell.createChild('div');
382 textDiv.createChild('span').textContent = WebInspector.UIString('%.1f\u2009m s', value); 382 textDiv.createChild('span').textContent = Common.UIString('%.1f\u2009ms', va lue);
383 383
384 if (showPercents && this._treeView._exposePercentages()) 384 if (showPercents && this._treeView._exposePercentages())
385 textDiv.createChild('span', 'percent-column').textContent = 385 textDiv.createChild('span', 'percent-column').textContent =
386 WebInspector.UIString('%.1f\u2009%%', value / this._grandTotalTime * 1 00); 386 Common.UIString('%.1f\u2009%%', value / this._grandTotalTime * 100);
387 if (maxTime) { 387 if (maxTime) {
388 textDiv.classList.add('background-percent-bar'); 388 textDiv.classList.add('background-percent-bar');
389 cell.createChild('div', 'background-bar-container').createChild('div', 'ba ckground-bar').style.width = 389 cell.createChild('div', 'background-bar-container').createChild('div', 'ba ckground-bar').style.width =
390 (value * 100 / maxTime).toFixed(1) + '%'; 390 (value * 100 / maxTime).toFixed(1) + '%';
391 } 391 }
392 return cell; 392 return cell;
393 } 393 }
394 }; 394 };
395 395
396 /** 396 /**
397 * @unrestricted 397 * @unrestricted
398 */ 398 */
399 WebInspector.TimelineTreeView.TreeGridNode = class extends WebInspector.Timeline TreeView.GridNode { 399 Timeline.TimelineTreeView.TreeGridNode = class extends Timeline.TimelineTreeView .GridNode {
400 /** 400 /**
401 * @param {!WebInspector.TimelineProfileTree.Node} profileNode 401 * @param {!TimelineModel.TimelineProfileTree.Node} profileNode
402 * @param {number} grandTotalTime 402 * @param {number} grandTotalTime
403 * @param {number} maxSelfTime 403 * @param {number} maxSelfTime
404 * @param {number} maxTotalTime 404 * @param {number} maxTotalTime
405 * @param {!WebInspector.TimelineTreeView} treeView 405 * @param {!Timeline.TimelineTreeView} treeView
406 */ 406 */
407 constructor(profileNode, grandTotalTime, maxSelfTime, maxTotalTime, treeView) { 407 constructor(profileNode, grandTotalTime, maxSelfTime, maxTotalTime, treeView) {
408 super(profileNode, grandTotalTime, maxSelfTime, maxTotalTime, treeView); 408 super(profileNode, grandTotalTime, maxSelfTime, maxTotalTime, treeView);
409 this.hasChildren = this._profileNode.children ? this._profileNode.children.s ize > 0 : false; 409 this.hasChildren = this._profileNode.children ? this._profileNode.children.s ize > 0 : false;
410 profileNode[WebInspector.TimelineTreeView.TreeGridNode._gridNodeSymbol] = th is; 410 profileNode[Timeline.TimelineTreeView.TreeGridNode._gridNodeSymbol] = this;
411 } 411 }
412 412
413 /** 413 /**
414 * @override 414 * @override
415 */ 415 */
416 populate() { 416 populate() {
417 if (this._populated) 417 if (this._populated)
418 return; 418 return;
419 this._populated = true; 419 this._populated = true;
420 if (!this._profileNode.children) 420 if (!this._profileNode.children)
421 return; 421 return;
422 for (var node of this._profileNode.children.values()) { 422 for (var node of this._profileNode.children.values()) {
423 var gridNode = new WebInspector.TimelineTreeView.TreeGridNode( 423 var gridNode = new Timeline.TimelineTreeView.TreeGridNode(
424 node, this._grandTotalTime, this._maxSelfTime, this._maxTotalTime, thi s._treeView); 424 node, this._grandTotalTime, this._maxSelfTime, this._maxTotalTime, thi s._treeView);
425 this.insertChildOrdered(gridNode); 425 this.insertChildOrdered(gridNode);
426 } 426 }
427 } 427 }
428 }; 428 };
429 429
430 WebInspector.TimelineTreeView.TreeGridNode._gridNodeSymbol = Symbol('treeGridNod e'); 430 Timeline.TimelineTreeView.TreeGridNode._gridNodeSymbol = Symbol('treeGridNode');
431 431
432 /** 432 /**
433 * @unrestricted 433 * @unrestricted
434 */ 434 */
435 WebInspector.AggregatedTimelineTreeView = class extends WebInspector.TimelineTre eView { 435 Timeline.AggregatedTimelineTreeView = class extends Timeline.TimelineTreeView {
436 /** 436 /**
437 * @param {!WebInspector.TimelineModel} model 437 * @param {!TimelineModel.TimelineModel} model
438 * @param {!Array<!WebInspector.TimelineModel.Filter>} filters 438 * @param {!Array<!TimelineModel.TimelineModel.Filter>} filters
439 */ 439 */
440 constructor(model, filters) { 440 constructor(model, filters) {
441 super(); 441 super();
442 this._groupBySetting = 442 this._groupBySetting =
443 WebInspector.settings.createSetting('timelineTreeGroupBy', WebInspector. AggregatedTimelineTreeView.GroupBy.Category); 443 Common.settings.createSetting('timelineTreeGroupBy', Timeline.Aggregated TimelineTreeView.GroupBy.Category);
444 this._init(model, filters); 444 this._init(model, filters);
445 var nonessentialEvents = [ 445 var nonessentialEvents = [
446 WebInspector.TimelineModel.RecordType.EventDispatch, WebInspector.Timeline Model.RecordType.FunctionCall, 446 TimelineModel.TimelineModel.RecordType.EventDispatch, TimelineModel.Timeli neModel.RecordType.FunctionCall,
447 WebInspector.TimelineModel.RecordType.TimerFire 447 TimelineModel.TimelineModel.RecordType.TimerFire
448 ]; 448 ];
449 this._filters.push(new WebInspector.ExclusiveNameFilter(nonessentialEvents)) ; 449 this._filters.push(new TimelineModel.ExclusiveNameFilter(nonessentialEvents) );
450 this._stackView = new WebInspector.TimelineStackView(this); 450 this._stackView = new Timeline.TimelineStackView(this);
451 this._stackView.addEventListener( 451 this._stackView.addEventListener(
452 WebInspector.TimelineStackView.Events.SelectionChanged, this._onStackVie wSelectionChanged, this); 452 Timeline.TimelineStackView.Events.SelectionChanged, this._onStackViewSel ectionChanged, this);
453 } 453 }
454 454
455 /** 455 /**
456 * @override 456 * @override
457 * @param {!WebInspector.TimelineSelection} selection 457 * @param {!Timeline.TimelineSelection} selection
458 */ 458 */
459 updateContents(selection) { 459 updateContents(selection) {
460 this._updateExtensionResolver(); 460 this._updateExtensionResolver();
461 super.updateContents(selection); 461 super.updateContents(selection);
462 var rootNode = this._dataGrid.rootNode(); 462 var rootNode = this._dataGrid.rootNode();
463 if (rootNode.children.length) 463 if (rootNode.children.length)
464 rootNode.children[0].revealAndSelect(); 464 rootNode.children[0].revealAndSelect();
465 } 465 }
466 466
467 _updateExtensionResolver() { 467 _updateExtensionResolver() {
468 this._executionContextNamesByOrigin = new Map(); 468 this._executionContextNamesByOrigin = new Map();
469 for (var target of WebInspector.targetManager.targets()) { 469 for (var target of SDK.targetManager.targets()) {
470 for (var context of target.runtimeModel.executionContexts()) 470 for (var context of target.runtimeModel.executionContexts())
471 this._executionContextNamesByOrigin.set(context.origin, context.name); 471 this._executionContextNamesByOrigin.set(context.origin, context.name);
472 } 472 }
473 } 473 }
474 474
475 /** 475 /**
476 * @param {!WebInspector.TimelineProfileTree.Node} node 476 * @param {!TimelineModel.TimelineProfileTree.Node} node
477 * @return {!{name: string, color: string}} 477 * @return {!{name: string, color: string}}
478 */ 478 */
479 _displayInfoForGroupNode(node) { 479 _displayInfoForGroupNode(node) {
480 var categories = WebInspector.TimelineUIUtils.categories(); 480 var categories = Timeline.TimelineUIUtils.categories();
481 var color = node.id ? WebInspector.TimelineUIUtils.eventColor(node.event) : categories['other'].color; 481 var color = node.id ? Timeline.TimelineUIUtils.eventColor(node.event) : cate gories['other'].color;
482 482
483 switch (this._groupBySetting.get()) { 483 switch (this._groupBySetting.get()) {
484 case WebInspector.AggregatedTimelineTreeView.GroupBy.Category: 484 case Timeline.AggregatedTimelineTreeView.GroupBy.Category:
485 var category = categories[node.id] || categories['other']; 485 var category = categories[node.id] || categories['other'];
486 return {name: category.title, color: category.color}; 486 return {name: category.title, color: category.color};
487 487
488 case WebInspector.AggregatedTimelineTreeView.GroupBy.Domain: 488 case Timeline.AggregatedTimelineTreeView.GroupBy.Domain:
489 case WebInspector.AggregatedTimelineTreeView.GroupBy.Subdomain: 489 case Timeline.AggregatedTimelineTreeView.GroupBy.Subdomain:
490 var name = node.id; 490 var name = node.id;
491 if (WebInspector.AggregatedTimelineTreeView._isExtensionInternalURL(name )) 491 if (Timeline.AggregatedTimelineTreeView._isExtensionInternalURL(name))
492 name = WebInspector.UIString('[Chrome extensions overhead]'); 492 name = Common.UIString('[Chrome extensions overhead]');
493 else if (name.startsWith('chrome-extension')) 493 else if (name.startsWith('chrome-extension'))
494 name = this._executionContextNamesByOrigin.get(name) || name; 494 name = this._executionContextNamesByOrigin.get(name) || name;
495 return {name: name || WebInspector.UIString('unattributed'), color: colo r}; 495 return {name: name || Common.UIString('unattributed'), color: color};
496 496
497 case WebInspector.AggregatedTimelineTreeView.GroupBy.EventName: 497 case Timeline.AggregatedTimelineTreeView.GroupBy.EventName:
498 var name = node.event.name === WebInspector.TimelineModel.RecordType.JSF rame ? 498 var name = node.event.name === TimelineModel.TimelineModel.RecordType.JS Frame ?
499 WebInspector.UIString('JavaScript') : 499 Common.UIString('JavaScript') :
500 WebInspector.TimelineUIUtils.eventTitle(node.event); 500 Timeline.TimelineUIUtils.eventTitle(node.event);
501 return { 501 return {
502 name: name, 502 name: name,
503 color: node.event.name === WebInspector.TimelineModel.RecordType.JSFra me ? 503 color: node.event.name === TimelineModel.TimelineModel.RecordType.JSFr ame ?
504 WebInspector.TimelineUIUtils.eventStyle(node.event).category.color : 504 Timeline.TimelineUIUtils.eventStyle(node.event).category.color :
505 color 505 color
506 }; 506 };
507 507
508 case WebInspector.AggregatedTimelineTreeView.GroupBy.URL: 508 case Timeline.AggregatedTimelineTreeView.GroupBy.URL:
509 break; 509 break;
510 case WebInspector.AggregatedTimelineTreeView.GroupBy.Frame: 510 case Timeline.AggregatedTimelineTreeView.GroupBy.Frame:
511 var frame = this._model.pageFrameById(node.id); 511 var frame = this._model.pageFrameById(node.id);
512 var frameName = frame ? WebInspector.TimelineUIUtils.displayNameForFrame (frame, 80) : WebInspector.UIString('Page'); 512 var frameName = frame ? Timeline.TimelineUIUtils.displayNameForFrame(fra me, 80) : Common.UIString('Page');
513 return { 513 return {
514 name: frameName, 514 name: frameName,
515 color: color 515 color: color
516 }; 516 };
517 break; 517 break;
518 518
519 default: 519 default:
520 console.assert(false, 'Unexpected aggregation type'); 520 console.assert(false, 'Unexpected aggregation type');
521 } 521 }
522 return {name: node.id || WebInspector.UIString('unattributed'), color: color }; 522 return {name: node.id || Common.UIString('unattributed'), color: color};
523 } 523 }
524 524
525 /** 525 /**
526 * @override 526 * @override
527 * @param {!Element} parent 527 * @param {!Element} parent
528 */ 528 */
529 _populateToolbar(parent) { 529 _populateToolbar(parent) {
530 var panelToolbar = new WebInspector.Toolbar('', parent); 530 var panelToolbar = new UI.Toolbar('', parent);
531 this._groupByCombobox = new WebInspector.ToolbarComboBox(this._onGroupByChan ged.bind(this)); 531 this._groupByCombobox = new UI.ToolbarComboBox(this._onGroupByChanged.bind(t his));
532 /** 532 /**
533 * @param {string} name 533 * @param {string} name
534 * @param {string} id 534 * @param {string} id
535 * @this {WebInspector.TimelineTreeView} 535 * @this {Timeline.TimelineTreeView}
536 */ 536 */
537 function addGroupingOption(name, id) { 537 function addGroupingOption(name, id) {
538 var option = this._groupByCombobox.createOption(name, '', id); 538 var option = this._groupByCombobox.createOption(name, '', id);
539 this._groupByCombobox.addOption(option); 539 this._groupByCombobox.addOption(option);
540 if (id === this._groupBySetting.get()) 540 if (id === this._groupBySetting.get())
541 this._groupByCombobox.select(option); 541 this._groupByCombobox.select(option);
542 } 542 }
543 const groupBy = WebInspector.AggregatedTimelineTreeView.GroupBy; 543 const groupBy = Timeline.AggregatedTimelineTreeView.GroupBy;
544 addGroupingOption.call(this, WebInspector.UIString('No Grouping'), groupBy.N one); 544 addGroupingOption.call(this, Common.UIString('No Grouping'), groupBy.None);
545 addGroupingOption.call(this, WebInspector.UIString('Group by Activity'), gro upBy.EventName); 545 addGroupingOption.call(this, Common.UIString('Group by Activity'), groupBy.E ventName);
546 addGroupingOption.call(this, WebInspector.UIString('Group by Category'), gro upBy.Category); 546 addGroupingOption.call(this, Common.UIString('Group by Category'), groupBy.C ategory);
547 addGroupingOption.call(this, WebInspector.UIString('Group by Domain'), group By.Domain); 547 addGroupingOption.call(this, Common.UIString('Group by Domain'), groupBy.Dom ain);
548 addGroupingOption.call(this, WebInspector.UIString('Group by Subdomain'), gr oupBy.Subdomain); 548 addGroupingOption.call(this, Common.UIString('Group by Subdomain'), groupBy. Subdomain);
549 addGroupingOption.call(this, WebInspector.UIString('Group by URL'), groupBy. URL); 549 addGroupingOption.call(this, Common.UIString('Group by URL'), groupBy.URL);
550 addGroupingOption.call(this, WebInspector.UIString('Group by Frame'), groupB y.Frame); 550 addGroupingOption.call(this, Common.UIString('Group by Frame'), groupBy.Fram e);
551 panelToolbar.appendToolbarItem(this._groupByCombobox); 551 panelToolbar.appendToolbarItem(this._groupByCombobox);
552 } 552 }
553 553
554 /** 554 /**
555 * @param {!WebInspector.TimelineProfileTree.Node} treeNode 555 * @param {!TimelineModel.TimelineProfileTree.Node} treeNode
556 * @return {!Array<!WebInspector.TimelineProfileTree.Node>} 556 * @return {!Array<!TimelineModel.TimelineProfileTree.Node>}
557 */ 557 */
558 _buildHeaviestStack(treeNode) { 558 _buildHeaviestStack(treeNode) {
559 console.assert(!!treeNode.parent, 'Attempt to build stack for tree root'); 559 console.assert(!!treeNode.parent, 'Attempt to build stack for tree root');
560 var result = []; 560 var result = [];
561 // Do not add root to the stack, as it's the tree itself. 561 // Do not add root to the stack, as it's the tree itself.
562 for (var node = treeNode; node && node.parent; node = node.parent) 562 for (var node = treeNode; node && node.parent; node = node.parent)
563 result.push(node); 563 result.push(node);
564 result = result.reverse(); 564 result = result.reverse();
565 for (node = treeNode; node && node.children && node.children.size;) { 565 for (node = treeNode; node && node.children && node.children.size;) {
566 var children = Array.from(node.children.values()); 566 var children = Array.from(node.children.values());
(...skipping 17 matching lines...) Expand all
584 } 584 }
585 585
586 _onStackViewSelectionChanged() { 586 _onStackViewSelectionChanged() {
587 var treeNode = this._stackView.selectedTreeNode(); 587 var treeNode = this._stackView.selectedTreeNode();
588 if (treeNode) 588 if (treeNode)
589 this.selectProfileNode(treeNode, true); 589 this.selectProfileNode(treeNode, true);
590 } 590 }
591 591
592 /** 592 /**
593 * @override 593 * @override
594 * @param {!WebInspector.TimelineProfileTree.Node} node 594 * @param {!TimelineModel.TimelineProfileTree.Node} node
595 * @return {boolean} 595 * @return {boolean}
596 */ 596 */
597 _showDetailsForNode(node) { 597 _showDetailsForNode(node) {
598 var stack = this._buildHeaviestStack(node); 598 var stack = this._buildHeaviestStack(node);
599 this._stackView.setStack(stack, node); 599 this._stackView.setStack(stack, node);
600 this._stackView.show(this._detailsView.element); 600 this._stackView.show(this._detailsView.element);
601 return true; 601 return true;
602 } 602 }
603 603
604 /** 604 /**
605 * @param {!WebInspector.AggregatedTimelineTreeView.GroupBy} groupBy 605 * @param {!Timeline.AggregatedTimelineTreeView.GroupBy} groupBy
606 * @return {function(!WebInspector.TracingModel.Event):string} 606 * @return {function(!SDK.TracingModel.Event):string}
607 */ 607 */
608 _groupingFunction(groupBy) { 608 _groupingFunction(groupBy) {
609 /** 609 /**
610 * @param {!WebInspector.TracingModel.Event} event 610 * @param {!SDK.TracingModel.Event} event
611 * @return {string} 611 * @return {string}
612 */ 612 */
613 function groupByURL(event) { 613 function groupByURL(event) {
614 return WebInspector.TimelineProfileTree.eventURL(event) || ''; 614 return TimelineModel.TimelineProfileTree.eventURL(event) || '';
615 } 615 }
616 616
617 /** 617 /**
618 * @param {boolean} groupSubdomains 618 * @param {boolean} groupSubdomains
619 * @param {!WebInspector.TracingModel.Event} event 619 * @param {!SDK.TracingModel.Event} event
620 * @return {string} 620 * @return {string}
621 */ 621 */
622 function groupByDomain(groupSubdomains, event) { 622 function groupByDomain(groupSubdomains, event) {
623 var url = WebInspector.TimelineProfileTree.eventURL(event) || ''; 623 var url = TimelineModel.TimelineProfileTree.eventURL(event) || '';
624 if (WebInspector.AggregatedTimelineTreeView._isExtensionInternalURL(url)) 624 if (Timeline.AggregatedTimelineTreeView._isExtensionInternalURL(url))
625 return WebInspector.AggregatedTimelineTreeView._extensionInternalPrefix; 625 return Timeline.AggregatedTimelineTreeView._extensionInternalPrefix;
626 var parsedURL = url.asParsedURL(); 626 var parsedURL = url.asParsedURL();
627 if (!parsedURL) 627 if (!parsedURL)
628 return ''; 628 return '';
629 if (parsedURL.scheme === 'chrome-extension') 629 if (parsedURL.scheme === 'chrome-extension')
630 return parsedURL.scheme + '://' + parsedURL.host; 630 return parsedURL.scheme + '://' + parsedURL.host;
631 if (!groupSubdomains) 631 if (!groupSubdomains)
632 return parsedURL.host; 632 return parsedURL.host;
633 if (/^[.0-9]+$/.test(parsedURL.host)) 633 if (/^[.0-9]+$/.test(parsedURL.host))
634 return parsedURL.host; 634 return parsedURL.host;
635 var domainMatch = /([^.]*\.)?[^.]*$/.exec(parsedURL.host); 635 var domainMatch = /([^.]*\.)?[^.]*$/.exec(parsedURL.host);
636 return domainMatch && domainMatch[0] || ''; 636 return domainMatch && domainMatch[0] || '';
637 } 637 }
638 638
639 switch (groupBy) { 639 switch (groupBy) {
640 case WebInspector.AggregatedTimelineTreeView.GroupBy.None: 640 case Timeline.AggregatedTimelineTreeView.GroupBy.None:
641 return () => Symbol('uniqueGroupId'); 641 return () => Symbol('uniqueGroupId');
642 case WebInspector.AggregatedTimelineTreeView.GroupBy.EventName: 642 case Timeline.AggregatedTimelineTreeView.GroupBy.EventName:
643 return event => WebInspector.TimelineUIUtils.eventStyle(event).title; 643 return event => Timeline.TimelineUIUtils.eventStyle(event).title;
644 case WebInspector.AggregatedTimelineTreeView.GroupBy.Category: 644 case Timeline.AggregatedTimelineTreeView.GroupBy.Category:
645 return event => WebInspector.TimelineUIUtils.eventStyle(event).category. name; 645 return event => Timeline.TimelineUIUtils.eventStyle(event).category.name ;
646 case WebInspector.AggregatedTimelineTreeView.GroupBy.Subdomain: 646 case Timeline.AggregatedTimelineTreeView.GroupBy.Subdomain:
647 return groupByDomain.bind(null, false); 647 return groupByDomain.bind(null, false);
648 case WebInspector.AggregatedTimelineTreeView.GroupBy.Domain: 648 case Timeline.AggregatedTimelineTreeView.GroupBy.Domain:
649 return groupByDomain.bind(null, true); 649 return groupByDomain.bind(null, true);
650 case WebInspector.AggregatedTimelineTreeView.GroupBy.URL: 650 case Timeline.AggregatedTimelineTreeView.GroupBy.URL:
651 return groupByURL; 651 return groupByURL;
652 case WebInspector.AggregatedTimelineTreeView.GroupBy.Frame: 652 case Timeline.AggregatedTimelineTreeView.GroupBy.Frame:
653 return event => WebInspector.TimelineData.forEvent(event).frameId; 653 return event => TimelineModel.TimelineData.forEvent(event).frameId;
654 default: 654 default:
655 console.assert(false, `Unexpected aggregation setting: ${groupBy}`); 655 console.assert(false, `Unexpected aggregation setting: ${groupBy}`);
656 return () => Symbol('uniqueGroupId'); 656 return () => Symbol('uniqueGroupId');
657 } 657 }
658 } 658 }
659 659
660 /** 660 /**
661 * @param {string} url 661 * @param {string} url
662 * @return {boolean} 662 * @return {boolean}
663 */ 663 */
664 static _isExtensionInternalURL(url) { 664 static _isExtensionInternalURL(url) {
665 return url.startsWith(WebInspector.AggregatedTimelineTreeView._extensionInte rnalPrefix); 665 return url.startsWith(Timeline.AggregatedTimelineTreeView._extensionInternal Prefix);
666 } 666 }
667 }; 667 };
668 668
669 WebInspector.AggregatedTimelineTreeView._extensionInternalPrefix = 'extensions:: '; 669 Timeline.AggregatedTimelineTreeView._extensionInternalPrefix = 'extensions::';
670 670
671 /** 671 /**
672 * @enum {string} 672 * @enum {string}
673 */ 673 */
674 WebInspector.AggregatedTimelineTreeView.GroupBy = { 674 Timeline.AggregatedTimelineTreeView.GroupBy = {
675 None: 'None', 675 None: 'None',
676 EventName: 'EventName', 676 EventName: 'EventName',
677 Category: 'Category', 677 Category: 'Category',
678 Domain: 'Domain', 678 Domain: 'Domain',
679 Subdomain: 'Subdomain', 679 Subdomain: 'Subdomain',
680 URL: 'URL', 680 URL: 'URL',
681 Frame: 'Frame' 681 Frame: 'Frame'
682 }; 682 };
683 683
684 /** 684 /**
685 * @unrestricted 685 * @unrestricted
686 */ 686 */
687 WebInspector.CallTreeTimelineTreeView = class extends WebInspector.AggregatedTim elineTreeView { 687 Timeline.CallTreeTimelineTreeView = class extends Timeline.AggregatedTimelineTre eView {
688 /** 688 /**
689 * @param {!WebInspector.TimelineModel} model 689 * @param {!TimelineModel.TimelineModel} model
690 * @param {!Array<!WebInspector.TimelineModel.Filter>} filters 690 * @param {!Array<!TimelineModel.TimelineModel.Filter>} filters
691 */ 691 */
692 constructor(model, filters) { 692 constructor(model, filters) {
693 super(model, filters); 693 super(model, filters);
694 this._dataGrid.markColumnAsSortedBy('total', WebInspector.DataGrid.Order.Des cending); 694 this._dataGrid.markColumnAsSortedBy('total', UI.DataGrid.Order.Descending);
695 } 695 }
696 696
697 /** 697 /**
698 * @override 698 * @override
699 * @return {!WebInspector.TimelineProfileTree.Node} 699 * @return {!TimelineModel.TimelineProfileTree.Node}
700 */ 700 */
701 _buildTree() { 701 _buildTree() {
702 var grouping = this._groupBySetting.get(); 702 var grouping = this._groupBySetting.get();
703 var topDown = this._buildTopDownTree(this._groupingFunction(grouping)); 703 var topDown = this._buildTopDownTree(this._groupingFunction(grouping));
704 if (grouping === WebInspector.AggregatedTimelineTreeView.GroupBy.None) 704 if (grouping === Timeline.AggregatedTimelineTreeView.GroupBy.None)
705 return topDown; 705 return topDown;
706 return new WebInspector.TimelineAggregator().performGrouping(topDown); 706 return new TimelineModel.TimelineAggregator().performGrouping(topDown);
707 } 707 }
708 }; 708 };
709 709
710 /** 710 /**
711 * @unrestricted 711 * @unrestricted
712 */ 712 */
713 WebInspector.BottomUpTimelineTreeView = class extends WebInspector.AggregatedTim elineTreeView { 713 Timeline.BottomUpTimelineTreeView = class extends Timeline.AggregatedTimelineTre eView {
714 /** 714 /**
715 * @param {!WebInspector.TimelineModel} model 715 * @param {!TimelineModel.TimelineModel} model
716 * @param {!Array<!WebInspector.TimelineModel.Filter>} filters 716 * @param {!Array<!TimelineModel.TimelineModel.Filter>} filters
717 */ 717 */
718 constructor(model, filters) { 718 constructor(model, filters) {
719 super(model, filters); 719 super(model, filters);
720 this._dataGrid.markColumnAsSortedBy('self', WebInspector.DataGrid.Order.Desc ending); 720 this._dataGrid.markColumnAsSortedBy('self', UI.DataGrid.Order.Descending);
721 } 721 }
722 722
723 /** 723 /**
724 * @override 724 * @override
725 * @return {!WebInspector.TimelineProfileTree.Node} 725 * @return {!TimelineModel.TimelineProfileTree.Node}
726 */ 726 */
727 _buildTree() { 727 _buildTree() {
728 var topDown = this._buildTopDownTree(this._groupingFunction(this._groupBySet ting.get())); 728 var topDown = this._buildTopDownTree(this._groupingFunction(this._groupBySet ting.get()));
729 return WebInspector.TimelineProfileTree.buildBottomUp(topDown); 729 return TimelineModel.TimelineProfileTree.buildBottomUp(topDown);
730 } 730 }
731 }; 731 };
732 732
733 /** 733 /**
734 * @unrestricted 734 * @unrestricted
735 */ 735 */
736 WebInspector.EventsTimelineTreeView = class extends WebInspector.TimelineTreeVie w { 736 Timeline.EventsTimelineTreeView = class extends Timeline.TimelineTreeView {
737 /** 737 /**
738 * @param {!WebInspector.TimelineModel} model 738 * @param {!TimelineModel.TimelineModel} model
739 * @param {!Array<!WebInspector.TimelineModel.Filter>} filters 739 * @param {!Array<!TimelineModel.TimelineModel.Filter>} filters
740 * @param {!WebInspector.TimelineModeViewDelegate} delegate 740 * @param {!Timeline.TimelineModeViewDelegate} delegate
741 */ 741 */
742 constructor(model, filters, delegate) { 742 constructor(model, filters, delegate) {
743 super(); 743 super();
744 this._filtersControl = new WebInspector.TimelineFilters(); 744 this._filtersControl = new Timeline.TimelineFilters();
745 this._filtersControl.addEventListener( 745 this._filtersControl.addEventListener(
746 WebInspector.TimelineFilters.Events.FilterChanged, this._onFilterChanged , this); 746 Timeline.TimelineFilters.Events.FilterChanged, this._onFilterChanged, th is);
747 this._init(model, filters); 747 this._init(model, filters);
748 this._delegate = delegate; 748 this._delegate = delegate;
749 this._filters.push.apply(this._filters, this._filtersControl.filters()); 749 this._filters.push.apply(this._filters, this._filtersControl.filters());
750 this._dataGrid.markColumnAsSortedBy('startTime', WebInspector.DataGrid.Order .Ascending); 750 this._dataGrid.markColumnAsSortedBy('startTime', UI.DataGrid.Order.Ascending );
751 } 751 }
752 752
753 /** 753 /**
754 * @override 754 * @override
755 * @param {!WebInspector.TimelineSelection} selection 755 * @param {!Timeline.TimelineSelection} selection
756 */ 756 */
757 updateContents(selection) { 757 updateContents(selection) {
758 super.updateContents(selection); 758 super.updateContents(selection);
759 if (selection.type() === WebInspector.TimelineSelection.Type.TraceEvent) { 759 if (selection.type() === Timeline.TimelineSelection.Type.TraceEvent) {
760 var event = /** @type {!WebInspector.TracingModel.Event} */ (selection.obj ect()); 760 var event = /** @type {!SDK.TracingModel.Event} */ (selection.object());
761 this._selectEvent(event, true); 761 this._selectEvent(event, true);
762 } 762 }
763 } 763 }
764 764
765 /** 765 /**
766 * @override 766 * @override
767 * @return {!WebInspector.TimelineProfileTree.Node} 767 * @return {!TimelineModel.TimelineProfileTree.Node}
768 */ 768 */
769 _buildTree() { 769 _buildTree() {
770 this._currentTree = this._buildTopDownTree(); 770 this._currentTree = this._buildTopDownTree();
771 return this._currentTree; 771 return this._currentTree;
772 } 772 }
773 773
774 _onFilterChanged() { 774 _onFilterChanged() {
775 var selectedEvent = this._lastSelectedNode && this._lastSelectedNode.event; 775 var selectedEvent = this._lastSelectedNode && this._lastSelectedNode.event;
776 this._refreshTree(); 776 this._refreshTree();
777 if (selectedEvent) 777 if (selectedEvent)
778 this._selectEvent(selectedEvent, false); 778 this._selectEvent(selectedEvent, false);
779 } 779 }
780 780
781 /** 781 /**
782 * @param {!WebInspector.TracingModel.Event} event 782 * @param {!SDK.TracingModel.Event} event
783 * @return {?WebInspector.TimelineProfileTree.Node} 783 * @return {?TimelineModel.TimelineProfileTree.Node}
784 */ 784 */
785 _findNodeWithEvent(event) { 785 _findNodeWithEvent(event) {
786 var iterators = [this._currentTree.children.values()]; 786 var iterators = [this._currentTree.children.values()];
787 787
788 while (iterators.length) { 788 while (iterators.length) {
789 var iterator = iterators.peekLast().next(); 789 var iterator = iterators.peekLast().next();
790 if (iterator.done) { 790 if (iterator.done) {
791 iterators.pop(); 791 iterators.pop();
792 continue; 792 continue;
793 } 793 }
794 var child = /** @type {!WebInspector.TimelineProfileTree.Node} */ (iterato r.value); 794 var child = /** @type {!TimelineModel.TimelineProfileTree.Node} */ (iterat or.value);
795 if (child.event === event) 795 if (child.event === event)
796 return child; 796 return child;
797 if (child.children) 797 if (child.children)
798 iterators.push(child.children.values()); 798 iterators.push(child.children.values());
799 } 799 }
800 return null; 800 return null;
801 } 801 }
802 802
803 /** 803 /**
804 * @param {!WebInspector.TracingModel.Event} event 804 * @param {!SDK.TracingModel.Event} event
805 * @param {boolean=} expand 805 * @param {boolean=} expand
806 */ 806 */
807 _selectEvent(event, expand) { 807 _selectEvent(event, expand) {
808 var node = this._findNodeWithEvent(event); 808 var node = this._findNodeWithEvent(event);
809 if (!node) 809 if (!node)
810 return; 810 return;
811 this.selectProfileNode(node, false); 811 this.selectProfileNode(node, false);
812 if (expand) 812 if (expand)
813 this._dataGridNodeForTreeNode(node).expand(); 813 this._dataGridNodeForTreeNode(node).expand();
814 } 814 }
815 815
816 /** 816 /**
817 * @override 817 * @override
818 * @param {!Array<!WebInspector.DataGrid.ColumnDescriptor>} columns 818 * @param {!Array<!UI.DataGrid.ColumnDescriptor>} columns
819 */ 819 */
820 _populateColumns(columns) { 820 _populateColumns(columns) {
821 columns.push({ 821 columns.push({
822 id: 'startTime', 822 id: 'startTime',
823 title: WebInspector.UIString('Start Time'), 823 title: Common.UIString('Start Time'),
824 width: '110px', 824 width: '110px',
825 fixedWidth: true, 825 fixedWidth: true,
826 sortable: true 826 sortable: true
827 }); 827 });
828 super._populateColumns(columns); 828 super._populateColumns(columns);
829 } 829 }
830 830
831 /** 831 /**
832 * @override 832 * @override
833 * @param {!Element} parent 833 * @param {!Element} parent
834 */ 834 */
835 _populateToolbar(parent) { 835 _populateToolbar(parent) {
836 var filtersWidget = this._filtersControl.filtersWidget(); 836 var filtersWidget = this._filtersControl.filtersWidget();
837 filtersWidget.forceShowFilterBar(); 837 filtersWidget.forceShowFilterBar();
838 filtersWidget.show(parent); 838 filtersWidget.show(parent);
839 } 839 }
840 840
841 /** 841 /**
842 * @override 842 * @override
843 * @param {!WebInspector.TimelineProfileTree.Node} node 843 * @param {!TimelineModel.TimelineProfileTree.Node} node
844 * @return {boolean} 844 * @return {boolean}
845 */ 845 */
846 _showDetailsForNode(node) { 846 _showDetailsForNode(node) {
847 var traceEvent = node.event; 847 var traceEvent = node.event;
848 if (!traceEvent) 848 if (!traceEvent)
849 return false; 849 return false;
850 WebInspector.TimelineUIUtils.buildTraceEventDetails( 850 Timeline.TimelineUIUtils.buildTraceEventDetails(
851 traceEvent, this._model, this._linkifier, false, showDetails.bind(this)) ; 851 traceEvent, this._model, this._linkifier, false, showDetails.bind(this)) ;
852 return true; 852 return true;
853 853
854 /** 854 /**
855 * @param {!DocumentFragment} fragment 855 * @param {!DocumentFragment} fragment
856 * @this {WebInspector.EventsTimelineTreeView} 856 * @this {Timeline.EventsTimelineTreeView}
857 */ 857 */
858 function showDetails(fragment) { 858 function showDetails(fragment) {
859 this._detailsView.element.appendChild(fragment); 859 this._detailsView.element.appendChild(fragment);
860 } 860 }
861 } 861 }
862 862
863 /** 863 /**
864 * @override 864 * @override
865 * @param {?WebInspector.TimelineProfileTree.Node} node 865 * @param {?TimelineModel.TimelineProfileTree.Node} node
866 */ 866 */
867 _onHover(node) { 867 _onHover(node) {
868 this._delegate.highlightEvent(node && node.event); 868 this._delegate.highlightEvent(node && node.event);
869 } 869 }
870 }; 870 };
871 871
872 /** 872 /**
873 * @unrestricted 873 * @unrestricted
874 */ 874 */
875 WebInspector.TimelineStackView = class extends WebInspector.VBox { 875 Timeline.TimelineStackView = class extends UI.VBox {
876 constructor(treeView) { 876 constructor(treeView) {
877 super(); 877 super();
878 var header = this.element.createChild('div', 'timeline-stack-view-header'); 878 var header = this.element.createChild('div', 'timeline-stack-view-header');
879 header.textContent = WebInspector.UIString('Heaviest stack'); 879 header.textContent = Common.UIString('Heaviest stack');
880 this._treeView = treeView; 880 this._treeView = treeView;
881 var columns = /** @type {!Array<!WebInspector.DataGrid.ColumnDescriptor>} */ ([ 881 var columns = /** @type {!Array<!UI.DataGrid.ColumnDescriptor>} */ ([
882 {id: 'total', title: WebInspector.UIString('Total Time'), fixedWidth: true , width: '110px'}, 882 {id: 'total', title: Common.UIString('Total Time'), fixedWidth: true, widt h: '110px'},
883 {id: 'activity', title: WebInspector.UIString('Activity')} 883 {id: 'activity', title: Common.UIString('Activity')}
884 ]); 884 ]);
885 this._dataGrid = new WebInspector.ViewportDataGrid(columns); 885 this._dataGrid = new UI.ViewportDataGrid(columns);
886 this._dataGrid.setResizeMethod(WebInspector.DataGrid.ResizeMethod.Last); 886 this._dataGrid.setResizeMethod(UI.DataGrid.ResizeMethod.Last);
887 this._dataGrid.addEventListener(WebInspector.DataGrid.Events.SelectedNode, t his._onSelectionChanged, this); 887 this._dataGrid.addEventListener(UI.DataGrid.Events.SelectedNode, this._onSel ectionChanged, this);
888 this._dataGrid.asWidget().show(this.element); 888 this._dataGrid.asWidget().show(this.element);
889 } 889 }
890 890
891 /** 891 /**
892 * @param {!Array<!WebInspector.TimelineProfileTree.Node>} stack 892 * @param {!Array<!TimelineModel.TimelineProfileTree.Node>} stack
893 * @param {!WebInspector.TimelineProfileTree.Node} selectedNode 893 * @param {!TimelineModel.TimelineProfileTree.Node} selectedNode
894 */ 894 */
895 setStack(stack, selectedNode) { 895 setStack(stack, selectedNode) {
896 var rootNode = this._dataGrid.rootNode(); 896 var rootNode = this._dataGrid.rootNode();
897 rootNode.removeChildren(); 897 rootNode.removeChildren();
898 var nodeToReveal = null; 898 var nodeToReveal = null;
899 var totalTime = Math.max.apply(Math, stack.map(node => node.totalTime)); 899 var totalTime = Math.max.apply(Math, stack.map(node => node.totalTime));
900 for (var node of stack) { 900 for (var node of stack) {
901 var gridNode = new WebInspector.TimelineTreeView.GridNode(node, totalTime, totalTime, totalTime, this._treeView); 901 var gridNode = new Timeline.TimelineTreeView.GridNode(node, totalTime, tot alTime, totalTime, this._treeView);
902 rootNode.appendChild(gridNode); 902 rootNode.appendChild(gridNode);
903 if (node === selectedNode) 903 if (node === selectedNode)
904 nodeToReveal = gridNode; 904 nodeToReveal = gridNode;
905 } 905 }
906 nodeToReveal.revealAndSelect(); 906 nodeToReveal.revealAndSelect();
907 } 907 }
908 908
909 /** 909 /**
910 * @return {?WebInspector.TimelineProfileTree.Node} 910 * @return {?TimelineModel.TimelineProfileTree.Node}
911 */ 911 */
912 selectedTreeNode() { 912 selectedTreeNode() {
913 var selectedNode = this._dataGrid.selectedNode; 913 var selectedNode = this._dataGrid.selectedNode;
914 return selectedNode && /** @type {!WebInspector.TimelineTreeView.GridNode} * / (selectedNode)._profileNode; 914 return selectedNode && /** @type {!Timeline.TimelineTreeView.GridNode} */ (s electedNode)._profileNode;
915 } 915 }
916 916
917 _onSelectionChanged() { 917 _onSelectionChanged() {
918 this.dispatchEventToListeners(WebInspector.TimelineStackView.Events.Selectio nChanged); 918 this.dispatchEventToListeners(Timeline.TimelineStackView.Events.SelectionCha nged);
919 } 919 }
920 }; 920 };
921 921
922 /** @enum {symbol} */ 922 /** @enum {symbol} */
923 WebInspector.TimelineStackView.Events = { 923 Timeline.TimelineStackView.Events = {
924 SelectionChanged: Symbol('SelectionChanged') 924 SelectionChanged: Symbol('SelectionChanged')
925 }; 925 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698