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 this._compatibilityConversionHeadToNodes(profile); |
| 46 } else { |
| 47 // Current format encodes timestamps as deltas. Start/stop times are in
microseconds. |
| 48 this.profileStartTime = profile.startTime / 1000; |
| 49 this.profileEndTime = profile.endTime / 1000; |
| 50 this.timestamps = this._convertTimestampDeltas(profile); |
| 51 } |
39 this.samples = profile.samples; | 52 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; | 53 this.totalHitCount = 0; |
45 this._compatibilityConversionHeadToNodes(profile); | |
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 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
324 * @param {number} index | 349 * @param {number} index |
325 * @return {?WebInspector.CPUProfileNode} | 350 * @return {?WebInspector.CPUProfileNode} |
326 */ | 351 */ |
327 nodeByIndex: function(index) | 352 nodeByIndex: function(index) |
328 { | 353 { |
329 return this._idToNode.get(this.samples[index]) || null; | 354 return this._idToNode.get(this.samples[index]) || null; |
330 }, | 355 }, |
331 | 356 |
332 __proto__: WebInspector.ProfileTreeModel.prototype | 357 __proto__: WebInspector.ProfileTreeModel.prototype |
333 } | 358 } |
OLD | NEW |