| OLD | NEW |
| (Empty) |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 /** | |
| 6 * @constructor | |
| 7 */ | |
| 8 WebInspector.ProfileNode = function(functionName, scriptId, url, lineNumber, col
umnNumber) | |
| 9 { | |
| 10 /** @type {!RuntimeAgent.CallFrame} */ | |
| 11 this.frame = { | |
| 12 functionName: functionName, | |
| 13 scriptId: scriptId, | |
| 14 url: url, | |
| 15 lineNumber: lineNumber, | |
| 16 columnNumber: columnNumber | |
| 17 }; | |
| 18 /** @type {number} */ | |
| 19 this.callUID; | |
| 20 /** @type {number} */ | |
| 21 this.self = 0; | |
| 22 /** @type {number} */ | |
| 23 this.total = 0; | |
| 24 /** @type {number} */ | |
| 25 this.id = 0; | |
| 26 /** @type {?WebInspector.ProfileNode} */ | |
| 27 this.parent = null; | |
| 28 /** @type {!Array<!WebInspector.ProfileNode>} */ | |
| 29 this.children = []; | |
| 30 } | |
| 31 | |
| 32 WebInspector.ProfileNode.prototype = { | |
| 33 /** | |
| 34 * @return {string} | |
| 35 */ | |
| 36 get functionName() | |
| 37 { | |
| 38 return this.frame.functionName; | |
| 39 }, | |
| 40 | |
| 41 /** | |
| 42 * @return {string} | |
| 43 */ | |
| 44 get scriptId() | |
| 45 { | |
| 46 return this.frame.scriptId; | |
| 47 }, | |
| 48 | |
| 49 /** | |
| 50 * @return {string} | |
| 51 */ | |
| 52 get url() | |
| 53 { | |
| 54 return this.frame.url; | |
| 55 }, | |
| 56 | |
| 57 /** | |
| 58 * @return {number} | |
| 59 */ | |
| 60 get lineNumber() | |
| 61 { | |
| 62 return this.frame.lineNumber; | |
| 63 }, | |
| 64 | |
| 65 /** | |
| 66 * @return {number} | |
| 67 */ | |
| 68 get columnNumber() | |
| 69 { | |
| 70 return this.frame.columnNumber; | |
| 71 } | |
| 72 } | |
| 73 | |
| 74 /** | |
| 75 * @constructor | |
| 76 * @param {!WebInspector.ProfileNode} root | |
| 77 * @param {number} begin | |
| 78 * @param {number} end | |
| 79 */ | |
| 80 WebInspector.ProfileTreeModel = function(root, begin, end) | |
| 81 { | |
| 82 this.root = root; | |
| 83 this.begin = begin; | |
| 84 this.end = end; | |
| 85 this._assignDepthsAndParents(); | |
| 86 this._calculateTotals(this.root); | |
| 87 } | |
| 88 | |
| 89 WebInspector.ProfileTreeModel.prototype = { | |
| 90 _assignDepthsAndParents: function() | |
| 91 { | |
| 92 var root = this.root; | |
| 93 root.depth = -1; | |
| 94 root.parent = null; | |
| 95 this.maxDepth = 0; | |
| 96 var nodesToTraverse = [root]; | |
| 97 while (nodesToTraverse.length) { | |
| 98 var parent = nodesToTraverse.pop(); | |
| 99 var depth = parent.depth + 1; | |
| 100 if (depth > this.maxDepth) | |
| 101 this.maxDepth = depth; | |
| 102 var children = parent.children; | |
| 103 var length = children.length; | |
| 104 for (var i = 0; i < length; ++i) { | |
| 105 var child = children[i]; | |
| 106 child.depth = depth; | |
| 107 child.parent = parent; | |
| 108 if (child.children.length) | |
| 109 nodesToTraverse.push(child); | |
| 110 } | |
| 111 } | |
| 112 }, | |
| 113 | |
| 114 /** | |
| 115 * @param {!WebInspector.ProfileNode} node | |
| 116 * @return {number} | |
| 117 */ | |
| 118 _calculateTotals: function(node) | |
| 119 { | |
| 120 node.total = node.children.reduce((acc, child) => acc + this._calculateT
otals(child), node.self); | |
| 121 return node.total; | |
| 122 } | |
| 123 } | |
| OLD | NEW |