| 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 /** | 
|    5  * @unrestricted |    6  * @unrestricted | 
|    6  */ |    7  */ | 
|    7 Timeline.TimelineTreeView = class extends UI.VBox { |    8 Timeline.TimelineTreeView = class extends UI.VBox { | 
|    8   constructor() { |    9   constructor() { | 
|    9     super(); |   10     super(); | 
|   10     this.element.classList.add('timeline-tree-view'); |   11     this.element.classList.add('timeline-tree-view'); | 
|   11   } |   12   } | 
|   12  |   13  | 
|   13   /** |   14   /** | 
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  144     } |  145     } | 
|  145   } |  146   } | 
|  146  |  147  | 
|  147   /** |  148   /** | 
|  148    * @protected |  149    * @protected | 
|  149    */ |  150    */ | 
|  150   refreshTree() { |  151   refreshTree() { | 
|  151     this._linkifier.reset(); |  152     this._linkifier.reset(); | 
|  152     this._dataGrid.rootNode().removeChildren(); |  153     this._dataGrid.rootNode().removeChildren(); | 
|  153     var tree = this._buildTree(); |  154     var tree = this._buildTree(); | 
|  154     if (!tree.children) |  155     var children = tree.children(); | 
|  155       return; |  | 
|  156     var maxSelfTime = 0; |  156     var maxSelfTime = 0; | 
|  157     var maxTotalTime = 0; |  157     var maxTotalTime = 0; | 
|  158     for (var child of tree.children.values()) { |  158     for (var child of children.values()) { | 
|  159       maxSelfTime = Math.max(maxSelfTime, child.selfTime); |  159       maxSelfTime = Math.max(maxSelfTime, child.selfTime); | 
|  160       maxTotalTime = Math.max(maxTotalTime, child.totalTime); |  160       maxTotalTime = Math.max(maxTotalTime, child.totalTime); | 
|  161     } |  161     } | 
|  162     for (var child of tree.children.values()) { |  162     for (var child of children.values()) { | 
|  163       // Exclude the idle time off the total calculation. |  163       // Exclude the idle time off the total calculation. | 
|  164       var gridNode = new Timeline.TimelineTreeView.TreeGridNode(child, tree.tota
     lTime, maxSelfTime, maxTotalTime, this); |  164       var gridNode = new Timeline.TimelineTreeView.TreeGridNode(child, tree.tota
     lTime, maxSelfTime, maxTotalTime, this); | 
|  165       this._dataGrid.insertChild(gridNode); |  165       this._dataGrid.insertChild(gridNode); | 
|  166     } |  166     } | 
|  167     this._sortingChanged(); |  167     this._sortingChanged(); | 
|  168     this._updateDetailsForSelection(); |  168     this._updateDetailsForSelection(); | 
|  169   } |  169   } | 
|  170  |  170  | 
|  171   /** |  171   /** | 
|  172    * @return {!TimelineModel.TimelineProfileTree.Node} |  172    * @return {!TimelineModel.TimelineProfileTree.Node} | 
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  308   /** |  308   /** | 
|  309    * @param {!TimelineModel.TimelineProfileTree.Node} treeNode |  309    * @param {!TimelineModel.TimelineProfileTree.Node} treeNode | 
|  310    * @protected |  310    * @protected | 
|  311    * @return {?Timeline.TimelineTreeView.GridNode} |  311    * @return {?Timeline.TimelineTreeView.GridNode} | 
|  312    */ |  312    */ | 
|  313   dataGridNodeForTreeNode(treeNode) { |  313   dataGridNodeForTreeNode(treeNode) { | 
|  314     return treeNode[Timeline.TimelineTreeView.TreeGridNode._gridNodeSymbol] || n
     ull; |  314     return treeNode[Timeline.TimelineTreeView.TreeGridNode._gridNodeSymbol] || n
     ull; | 
|  315   } |  315   } | 
|  316 }; |  316 }; | 
|  317  |  317  | 
|  318  |  | 
|  319 /** |  318 /** | 
|  320  * @unrestricted |  319  * @unrestricted | 
|  321  */ |  320  */ | 
|  322 Timeline.TimelineTreeView.GridNode = class extends DataGrid.SortableDataGridNode
      { |  321 Timeline.TimelineTreeView.GridNode = class extends DataGrid.SortableDataGridNode
      { | 
|  323   /** |  322   /** | 
|  324    * @param {!TimelineModel.TimelineProfileTree.Node} profileNode |  323    * @param {!TimelineModel.TimelineProfileTree.Node} profileNode | 
|  325    * @param {number} grandTotalTime |  324    * @param {number} grandTotalTime | 
|  326    * @param {number} maxSelfTime |  325    * @param {number} maxSelfTime | 
|  327    * @param {number} maxTotalTime |  326    * @param {number} maxTotalTime | 
|  328    * @param {!Timeline.TimelineTreeView} treeView |  327    * @param {!Timeline.TimelineTreeView} treeView | 
|  329    */ |  328    */ | 
|  330   constructor(profileNode, grandTotalTime, maxSelfTime, maxTotalTime, treeView) 
     { |  329   constructor(profileNode, grandTotalTime, maxSelfTime, maxTotalTime, treeView) 
     { | 
|  331     super(null, false); |  330     super(null, false); | 
|  332  |  | 
|  333     this._populated = false; |  331     this._populated = false; | 
|  334     this._profileNode = profileNode; |  332     this._profileNode = profileNode; | 
|  335     this._treeView = treeView; |  333     this._treeView = treeView; | 
|  336     this._grandTotalTime = grandTotalTime; |  334     this._grandTotalTime = grandTotalTime; | 
|  337     this._maxSelfTime = maxSelfTime; |  335     this._maxSelfTime = maxSelfTime; | 
|  338     this._maxTotalTime = maxTotalTime; |  336     this._maxTotalTime = maxTotalTime; | 
|  339   } |  337   } | 
|  340  |  338  | 
|  341   /** |  339   /** | 
|  342    * @override |  340    * @override | 
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  431 Timeline.TimelineTreeView.TreeGridNode = class extends Timeline.TimelineTreeView
     .GridNode { |  429 Timeline.TimelineTreeView.TreeGridNode = class extends Timeline.TimelineTreeView
     .GridNode { | 
|  432   /** |  430   /** | 
|  433    * @param {!TimelineModel.TimelineProfileTree.Node} profileNode |  431    * @param {!TimelineModel.TimelineProfileTree.Node} profileNode | 
|  434    * @param {number} grandTotalTime |  432    * @param {number} grandTotalTime | 
|  435    * @param {number} maxSelfTime |  433    * @param {number} maxSelfTime | 
|  436    * @param {number} maxTotalTime |  434    * @param {number} maxTotalTime | 
|  437    * @param {!Timeline.TimelineTreeView} treeView |  435    * @param {!Timeline.TimelineTreeView} treeView | 
|  438    */ |  436    */ | 
|  439   constructor(profileNode, grandTotalTime, maxSelfTime, maxTotalTime, treeView) 
     { |  437   constructor(profileNode, grandTotalTime, maxSelfTime, maxTotalTime, treeView) 
     { | 
|  440     super(profileNode, grandTotalTime, maxSelfTime, maxTotalTime, treeView); |  438     super(profileNode, grandTotalTime, maxSelfTime, maxTotalTime, treeView); | 
|  441     this.setHasChildren(this._profileNode.children ? this._profileNode.children.
     size > 0 : false); |  439     this.setHasChildren(this._profileNode.hasChildren()); | 
|  442     profileNode[Timeline.TimelineTreeView.TreeGridNode._gridNodeSymbol] = this; |  440     profileNode[Timeline.TimelineTreeView.TreeGridNode._gridNodeSymbol] = this; | 
|  443   } |  441   } | 
|  444  |  442  | 
|  445   /** |  443   /** | 
|  446    * @override |  444    * @override | 
|  447    */ |  445    */ | 
|  448   populate() { |  446   populate() { | 
|  449     if (this._populated) |  447     if (this._populated) | 
|  450       return; |  448       return; | 
|  451     this._populated = true; |  449     this._populated = true; | 
|  452     if (!this._profileNode.children) |  450     if (!this._profileNode.children) | 
|  453       return; |  451       return; | 
|  454     for (var node of this._profileNode.children.values()) { |  452     for (var node of this._profileNode.children().values()) { | 
|  455       var gridNode = new Timeline.TimelineTreeView.TreeGridNode( |  453       var gridNode = new Timeline.TimelineTreeView.TreeGridNode( | 
|  456           node, this._grandTotalTime, this._maxSelfTime, this._maxTotalTime, thi
     s._treeView); |  454           node, this._grandTotalTime, this._maxSelfTime, this._maxTotalTime, thi
     s._treeView); | 
|  457       this.insertChildOrdered(gridNode); |  455       this.insertChildOrdered(gridNode); | 
|  458     } |  456     } | 
|  459   } |  457   } | 
|  460 }; |  458 }; | 
|  461  |  459  | 
|  462 Timeline.TimelineTreeView.TreeGridNode._gridNodeSymbol = Symbol('treeGridNode'); |  460 Timeline.TimelineTreeView.TreeGridNode._gridNodeSymbol = Symbol('treeGridNode'); | 
|  463  |  461  | 
|  464 /** |  462 /** | 
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  503         this._executionContextNamesByOrigin.set(context.origin, context.name); |  501         this._executionContextNamesByOrigin.set(context.origin, context.name); | 
|  504     } |  502     } | 
|  505   } |  503   } | 
|  506  |  504  | 
|  507   /** |  505   /** | 
|  508    * @param {!TimelineModel.TimelineProfileTree.Node} node |  506    * @param {!TimelineModel.TimelineProfileTree.Node} node | 
|  509    * @return {!{name: string, color: string}} |  507    * @return {!{name: string, color: string}} | 
|  510    */ |  508    */ | 
|  511   _displayInfoForGroupNode(node) { |  509   _displayInfoForGroupNode(node) { | 
|  512     var categories = Timeline.TimelineUIUtils.categories(); |  510     var categories = Timeline.TimelineUIUtils.categories(); | 
|  513     var color = node.id ? Timeline.TimelineUIUtils.eventColor(node.event) : cate
     gories['other'].color; |  511     var color = node.id ? Timeline.TimelineUIUtils.eventColor(/** @type {!SDK.Tr
     acingModel.Event} */ (node.event)) : | 
 |  512         categories['other'].color; | 
|  514  |  513  | 
|  515     switch (this._groupBySetting.get()) { |  514     switch (this._groupBySetting.get()) { | 
|  516       case Timeline.AggregatedTimelineTreeView.GroupBy.Category: |  515       case Timeline.AggregatedTimelineTreeView.GroupBy.Category: | 
|  517         var category = categories[node.id] || categories['other']; |  516         var category = categories[node.id] || categories['other']; | 
|  518         return {name: category.title, color: category.color}; |  517         return {name: category.title, color: category.color}; | 
|  519  |  518  | 
|  520       case Timeline.AggregatedTimelineTreeView.GroupBy.Domain: |  519       case Timeline.AggregatedTimelineTreeView.GroupBy.Domain: | 
|  521       case Timeline.AggregatedTimelineTreeView.GroupBy.Subdomain: |  520       case Timeline.AggregatedTimelineTreeView.GroupBy.Subdomain: | 
|  522         var name = node.id; |  521         var name = node.id; | 
|  523         if (Timeline.AggregatedTimelineTreeView._isExtensionInternalURL(name)) |  522         if (Timeline.AggregatedTimelineTreeView._isExtensionInternalURL(name)) | 
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  587    * @param {!TimelineModel.TimelineProfileTree.Node} treeNode |  586    * @param {!TimelineModel.TimelineProfileTree.Node} treeNode | 
|  588    * @return {!Array<!TimelineModel.TimelineProfileTree.Node>} |  587    * @return {!Array<!TimelineModel.TimelineProfileTree.Node>} | 
|  589    */ |  588    */ | 
|  590   _buildHeaviestStack(treeNode) { |  589   _buildHeaviestStack(treeNode) { | 
|  591     console.assert(!!treeNode.parent, 'Attempt to build stack for tree root'); |  590     console.assert(!!treeNode.parent, 'Attempt to build stack for tree root'); | 
|  592     var result = []; |  591     var result = []; | 
|  593     // Do not add root to the stack, as it's the tree itself. |  592     // Do not add root to the stack, as it's the tree itself. | 
|  594     for (var node = treeNode; node && node.parent; node = node.parent) |  593     for (var node = treeNode; node && node.parent; node = node.parent) | 
|  595       result.push(node); |  594       result.push(node); | 
|  596     result = result.reverse(); |  595     result = result.reverse(); | 
|  597     for (node = treeNode; node && node.children && node.children.size;) { |  596     for (node = treeNode; node && node.children() && node.children().size;) { | 
|  598       var children = Array.from(node.children.values()); |  597       var children = Array.from(node.children().values()); | 
|  599       node = children.reduce((a, b) => a.totalTime > b.totalTime ? a : b); |  598       node = children.reduce((a, b) => a.totalTime > b.totalTime ? a : b); | 
|  600       result.push(node); |  599       result.push(node); | 
|  601     } |  600     } | 
|  602     return result; |  601     return result; | 
|  603   } |  602   } | 
|  604  |  603  | 
|  605   /** |  604   /** | 
|  606    * @override |  605    * @override | 
|  607    * @return {boolean} |  606    * @return {boolean} | 
|  608    */ |  607    */ | 
| (...skipping 19 matching lines...) Expand all  Loading... | 
|  628    */ |  627    */ | 
|  629   _showDetailsForNode(node) { |  628   _showDetailsForNode(node) { | 
|  630     var stack = this._buildHeaviestStack(node); |  629     var stack = this._buildHeaviestStack(node); | 
|  631     this._stackView.setStack(stack, node); |  630     this._stackView.setStack(stack, node); | 
|  632     this._stackView.show(this._detailsView.element); |  631     this._stackView.show(this._detailsView.element); | 
|  633     return true; |  632     return true; | 
|  634   } |  633   } | 
|  635  |  634  | 
|  636   /** |  635   /** | 
|  637    * @param {!Timeline.AggregatedTimelineTreeView.GroupBy} groupBy |  636    * @param {!Timeline.AggregatedTimelineTreeView.GroupBy} groupBy | 
|  638    * @return {function(!SDK.TracingModel.Event):string} |  637    * @return {function(!SDK.TracingModel.Event):(string|symbol)} | 
|  639    */ |  638    */ | 
|  640   _groupingFunction(groupBy) { |  639   _groupingFunction(groupBy) { | 
|  641     /** |  640     /** | 
|  642      * @param {!SDK.TracingModel.Event} event |  641      * @param {!SDK.TracingModel.Event} event | 
|  643      * @return {string} |  642      * @return {string} | 
|  644      */ |  643      */ | 
|  645     function groupByURL(event) { |  644     function groupByURL(event) { | 
|  646       return TimelineModel.TimelineProfileTree.eventURL(event) || ''; |  645       return TimelineModel.TimelineProfileTree.eventURL(event) || ''; | 
|  647     } |  646     } | 
|  648  |  647  | 
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  776   constructor(model, filters) { |  775   constructor(model, filters) { | 
|  777     super(model, filters); |  776     super(model, filters); | 
|  778     this._dataGrid.markColumnAsSortedBy('self', DataGrid.DataGrid.Order.Descendi
     ng); |  777     this._dataGrid.markColumnAsSortedBy('self', DataGrid.DataGrid.Order.Descendi
     ng); | 
|  779   } |  778   } | 
|  780  |  779  | 
|  781   /** |  780   /** | 
|  782    * @override |  781    * @override | 
|  783    * @return {!TimelineModel.TimelineProfileTree.Node} |  782    * @return {!TimelineModel.TimelineProfileTree.Node} | 
|  784    */ |  783    */ | 
|  785   _buildTree() { |  784   _buildTree() { | 
|  786     var topDown = this.buildTopDownTree(this._groupingFunction(this._groupBySett
     ing.get())); |  785     var tree = new TimelineModel.TimelineProfileTree( | 
|  787     return TimelineModel.TimelineProfileTree.buildBottomUp(topDown); |  786         this._model.mainThreadEvents(), this._filters, this._startTime, this._en
     dTime, | 
 |  787         this._groupingFunction(this._groupBySetting.get())); | 
 |  788     return tree.bottomUpTreeRoot(); | 
|  788   } |  789   } | 
|  789 }; |  790 }; | 
|  790  |  791  | 
|  791 /** |  792 /** | 
|  792  * @unrestricted |  793  * @unrestricted | 
|  793  */ |  794  */ | 
|  794 Timeline.TimelineStackView = class extends UI.VBox { |  795 Timeline.TimelineStackView = class extends UI.VBox { | 
|  795   constructor(treeView) { |  796   constructor(treeView) { | 
|  796     super(); |  797     super(); | 
|  797     var header = this.element.createChild('div', 'timeline-stack-view-header'); |  798     var header = this.element.createChild('div', 'timeline-stack-view-header'); | 
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  835  |  836  | 
|  836   _onSelectionChanged() { |  837   _onSelectionChanged() { | 
|  837     this.dispatchEventToListeners(Timeline.TimelineStackView.Events.SelectionCha
     nged); |  838     this.dispatchEventToListeners(Timeline.TimelineStackView.Events.SelectionCha
     nged); | 
|  838   } |  839   } | 
|  839 }; |  840 }; | 
|  840  |  841  | 
|  841 /** @enum {symbol} */ |  842 /** @enum {symbol} */ | 
|  842 Timeline.TimelineStackView.Events = { |  843 Timeline.TimelineStackView.Events = { | 
|  843   SelectionChanged: Symbol('SelectionChanged') |  844   SelectionChanged: Symbol('SelectionChanged') | 
|  844 }; |  845 }; | 
| OLD | NEW |