| 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 /** | 6 /** |
| 7 * @constructor | 7 * @constructor |
| 8 * @param {!ProfilerAgent.CPUProfile} profile | 8 * @param {!ProfilerAgent.CPUProfile} profile |
| 9 */ | 9 */ |
| 10 WebInspector.CPUProfileDataModel = function(profile) | 10 WebInspector.CPUProfileDataModel = function(profile) |
| 11 { | 11 { |
| 12 this.profileHead = profile.head; | 12 this.profileHead = profile.head; |
| 13 this.samples = profile.samples; | 13 this.samples = profile.samples; |
| 14 this.timestamps = profile.timestamps; | 14 this.timestamps = profile.timestamps; |
| 15 this.profileStartTime = profile.startTime * 1000; | 15 this.profileStartTime = profile.startTime * 1000; |
| 16 this.profileEndTime = profile.endTime * 1000; | 16 this.profileEndTime = profile.endTime * 1000; |
| 17 this._assignParentsInProfile(); | 17 this._assignParentsInProfile(); |
| 18 if (this.samples) { | 18 if (this.samples) { |
| 19 this._sortSamples(); |
| 19 this._normalizeTimestamps(); | 20 this._normalizeTimestamps(); |
| 20 this._buildIdToNodeMap(); | 21 this._buildIdToNodeMap(); |
| 21 this._fixMissingSamples(); | 22 this._fixMissingSamples(); |
| 22 } | 23 } |
| 23 if (!WebInspector.moduleSetting("showNativeFunctionsInJSProfile").get()) | 24 if (!WebInspector.moduleSetting("showNativeFunctionsInJSProfile").get()) |
| 24 this._filterNativeFrames(); | 25 this._filterNativeFrames(); |
| 25 this._assignDepthsInProfile(); | 26 this._assignDepthsInProfile(); |
| 26 this._calculateTimes(profile); | 27 this._calculateTimes(profile); |
| 27 } | 28 } |
| 28 | 29 |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 149 var length = children.length; | 150 var length = children.length; |
| 150 for (var i = 0; i < length; ++i) { | 151 for (var i = 0; i < length; ++i) { |
| 151 var child = children[i]; | 152 var child = children[i]; |
| 152 child.depth = depth; | 153 child.depth = depth; |
| 153 if (child.children.length) | 154 if (child.children.length) |
| 154 nodesToTraverse.push(child); | 155 nodesToTraverse.push(child); |
| 155 } | 156 } |
| 156 } | 157 } |
| 157 }, | 158 }, |
| 158 | 159 |
| 160 _sortSamples: function() |
| 161 { |
| 162 var timestamps = this.timestamps; |
| 163 var samples = this.samples; |
| 164 var indices = timestamps.map((x, index) => index); |
| 165 indices.sort((a, b) => timestamps[a] - timestamps[b]); |
| 166 for (var i = 0; i < timestamps.length; ++i) { |
| 167 var index = indices[i]; |
| 168 if (index === i) |
| 169 continue; |
| 170 // Move items in a cycle. |
| 171 var savedTimestamp = timestamps[i]; |
| 172 var savedSample = samples[i]; |
| 173 var currentIndex = i; |
| 174 while (index !== i) { |
| 175 samples[currentIndex] = samples[index]; |
| 176 timestamps[currentIndex] = timestamps[index]; |
| 177 currentIndex = index; |
| 178 index = indices[index]; |
| 179 indices[currentIndex] = currentIndex; |
| 180 } |
| 181 samples[currentIndex] = savedSample; |
| 182 timestamps[currentIndex] = savedTimestamp; |
| 183 } |
| 184 }, |
| 185 |
| 159 _normalizeTimestamps: function() | 186 _normalizeTimestamps: function() |
| 160 { | 187 { |
| 161 var timestamps = this.timestamps; | 188 var timestamps = this.timestamps; |
| 162 if (!timestamps) { | 189 if (!timestamps) { |
| 163 // Support loading old CPU profiles that are missing timestamps. | 190 // Support loading old CPU profiles that are missing timestamps. |
| 164 // Derive timestamps from profile start and stop times. | 191 // Derive timestamps from profile start and stop times. |
| 165 var profileStartTime = this.profileStartTime; | 192 var profileStartTime = this.profileStartTime; |
| 166 var interval = (this.profileEndTime - profileStartTime) / this.sampl
es.length; | 193 var interval = (this.profileEndTime - profileStartTime) / this.sampl
es.length; |
| 167 timestamps = new Float64Array(this.samples.length + 1); | 194 timestamps = new Float64Array(this.samples.length + 1); |
| 168 for (var i = 0; i < timestamps.length; ++i) | 195 for (var i = 0; i < timestamps.length; ++i) |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 368 /** | 395 /** |
| 369 * @param {number} index | 396 * @param {number} index |
| 370 * @return {!ProfilerAgent.CPUProfileNode} | 397 * @return {!ProfilerAgent.CPUProfileNode} |
| 371 */ | 398 */ |
| 372 nodeByIndex: function(index) | 399 nodeByIndex: function(index) |
| 373 { | 400 { |
| 374 return this._idToNode[this.samples[index]]; | 401 return this._idToNode[this.samples[index]]; |
| 375 } | 402 } |
| 376 | 403 |
| 377 } | 404 } |
| OLD | NEW |