Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 /** |
| 6 * @constructor | 6 * @constructor |
| 7 * @extends {WebInspector.ProfileNode} | 7 * @extends {WebInspector.ProfileNode} |
| 8 * @param {!ProfilerAgent.CPUProfileNode} node | 8 * @param {!ProfilerAgent.CPUProfileNode} node |
| 9 * @param {number} sampleTime | 9 * @param {number} sampleTime |
| 10 */ | 10 */ |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 29 __proto__: WebInspector.ProfileNode.prototype | 29 __proto__: WebInspector.ProfileNode.prototype |
| 30 } | 30 } |
| 31 | 31 |
| 32 /** | 32 /** |
| 33 * @constructor | 33 * @constructor |
| 34 * @extends {WebInspector.ProfileTreeModel} | 34 * @extends {WebInspector.ProfileTreeModel} |
| 35 * @param {!ProfilerAgent.CPUProfile} profile | 35 * @param {!ProfilerAgent.CPUProfile} profile |
| 36 */ | 36 */ |
| 37 WebInspector.CPUProfileDataModel = function(profile) | 37 WebInspector.CPUProfileDataModel = function(profile) |
| 38 { | 38 { |
| 39 var isLegacyFormat = !!profile.head; | |
| 40 if (isLegacyFormat) { | |
| 41 // Legacy format contains raw timestamps and start/stop times are in sec onds. | |
| 42 this.profileStartTime = profile.startTime * 1000; | |
| 43 this.profileEndTime = profile.endTime * 1000; | |
| 44 this.timestamps = profile.timestamps; | |
| 45 } else { | |
| 46 // Current format encodes timestamps as deltas. Start/stop times are in microseconds. | |
| 47 this.profileStartTime = profile.startTime / 1000; | |
| 48 this.profileEndTime = profile.endTime / 1000; | |
| 49 this.timestamps = this._convertTimestampDeltas(profile); | |
| 50 } | |
| 39 this.samples = profile.samples; | 51 this.samples = profile.samples; |
| 40 this.timestamps = profile.timestamps; | |
| 41 // Convert times from sec to msec. | |
| 42 this.profileStartTime = profile.startTime * 1000; | |
| 43 this.profileEndTime = profile.endTime * 1000; | |
| 44 this.totalHitCount = 0; | 52 this.totalHitCount = 0; |
| 45 this._compatibilityConversionHeadToNodes(profile); | 53 this._compatibilityConversionHeadToNodes(profile); |
|
dgozman
2016/08/19 00:45:12
Let's call this in |isLegacyFormat| block?
alph
2016/08/20 01:51:10
Done.
| |
| 46 this.profileHead = this._translateProfileTree(profile.nodes); | 54 this.profileHead = this._translateProfileTree(profile.nodes); |
| 47 WebInspector.ProfileTreeModel.call(this, this.profileHead); | 55 WebInspector.ProfileTreeModel.call(this, this.profileHead); |
| 48 this._extractMetaNodes(); | 56 this._extractMetaNodes(); |
| 49 if (this.samples) { | 57 if (this.samples) { |
| 50 this._buildIdToNodeMap(); | 58 this._buildIdToNodeMap(); |
| 51 this._sortSamples(); | 59 this._sortSamples(); |
| 52 this._normalizeTimestamps(); | 60 this._normalizeTimestamps(); |
| 53 } | 61 } |
| 54 } | 62 } |
| 55 | 63 |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 72 */ | 80 */ |
| 73 function convertNodesTree(node) | 81 function convertNodesTree(node) |
| 74 { | 82 { |
| 75 nodes.push(node); | 83 nodes.push(node); |
| 76 node.children = (/** @type {!Array<!ProfilerAgent.CPUProfileNode>} * /(node.children)).map(convertNodesTree); | 84 node.children = (/** @type {!Array<!ProfilerAgent.CPUProfileNode>} * /(node.children)).map(convertNodesTree); |
| 77 return node.id; | 85 return node.id; |
| 78 } | 86 } |
| 79 }, | 87 }, |
| 80 | 88 |
| 81 /** | 89 /** |
| 90 * @param {!ProfilerAgent.CPUProfile} profile | |
| 91 * @return {?Array<number>} | |
| 92 */ | |
| 93 _convertTimestampDeltas: function(profile) | |
| 94 { | |
| 95 if (!profile.timestampDeltas) | |
| 96 return null; | |
| 97 var lastTimeUsec = profile.startTime; | |
| 98 var timestamps = new Array(profile.timestampDeltas.length); | |
| 99 for (var i = 0; i < timestamps.length; ++i) { | |
| 100 lastTimeUsec += profile.timestampDeltas[i]; | |
| 101 timestamps[i] = lastTimeUsec; | |
| 102 } | |
| 103 return timestamps; | |
| 104 }, | |
| 105 | |
| 106 /** | |
| 82 * @param {!Array<!ProfilerAgent.CPUProfileNode>} nodes | 107 * @param {!Array<!ProfilerAgent.CPUProfileNode>} nodes |
| 83 * @return {!WebInspector.CPUProfileNode} | 108 * @return {!WebInspector.CPUProfileNode} |
| 84 */ | 109 */ |
| 85 _translateProfileTree: function(nodes) | 110 _translateProfileTree: function(nodes) |
| 86 { | 111 { |
| 87 /** | 112 /** |
| 88 * @param {!ProfilerAgent.CPUProfileNode} node | 113 * @param {!ProfilerAgent.CPUProfileNode} node |
| 89 * @return {boolean} | 114 * @return {boolean} |
| 90 */ | 115 */ |
| 91 function isNativeNode(node) | 116 function isNativeNode(node) |
| (...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 322 * @param {number} index | 347 * @param {number} index |
| 323 * @return {?WebInspector.CPUProfileNode} | 348 * @return {?WebInspector.CPUProfileNode} |
| 324 */ | 349 */ |
| 325 nodeByIndex: function(index) | 350 nodeByIndex: function(index) |
| 326 { | 351 { |
| 327 return this._idToNode.get(this.samples[index]) || null; | 352 return this._idToNode.get(this.samples[index]) || null; |
| 328 }, | 353 }, |
| 329 | 354 |
| 330 __proto__: WebInspector.ProfileTreeModel.prototype | 355 __proto__: WebInspector.ProfileTreeModel.prototype |
| 331 } | 356 } |
| OLD | NEW |