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 WebInspector.TimelineJSProfileProcessor = { }; | 6 WebInspector.TimelineJSProfileProcessor = { }; |
7 | 7 |
8 /** | 8 /** |
9 * @param {!WebInspector.TimelineModelImpl} timelineModel | 9 * @param {!WebInspector.TimelineModelImpl} timelineModel |
10 * @param {!ProfilerAgent.CPUProfile} jsProfile | 10 * @param {!ProfilerAgent.CPUProfile} jsProfile |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 record.children().push(child); | 83 record.children().push(child); |
84 } | 84 } |
85 } | 85 } |
86 | 86 |
87 jsProfileModel.forEachFrame(onOpenFrame, onCloseFrame, recordStartTime,
recordEndTime); | 87 jsProfileModel.forEachFrame(onOpenFrame, onCloseFrame, recordStartTime,
recordEndTime); |
88 putOriginalChildrenUpToTime(recordEndTime); | 88 putOriginalChildrenUpToTime(recordEndTime); |
89 } | 89 } |
90 | 90 |
91 timelineModel.forAllRecords(processRecord); | 91 timelineModel.forAllRecords(processRecord); |
92 } | 92 } |
| 93 |
| 94 /** |
| 95 * @param {!WebInspector.TracingTimelineModel} timelineModel |
| 96 * @param {!ProfilerAgent.CPUProfile} jsProfile |
| 97 * @return {!Array.<!WebInspector.TracingModel.Event>} |
| 98 */ |
| 99 WebInspector.TimelineJSProfileProcessor.generateTracingEventsFromCpuProfile = fu
nction(timelineModel, jsProfile) |
| 100 { |
| 101 if (!jsProfile.samples) |
| 102 return []; |
| 103 var jsProfileModel = new WebInspector.CPUProfileDataModel(jsProfile); |
| 104 var idleNode = jsProfileModel.idleNode; |
| 105 var programNode = jsProfileModel.programNode; |
| 106 var gcNode = jsProfileModel.gcNode; |
| 107 var samples = jsProfileModel.samples; |
| 108 var timestamps = jsProfileModel.timestamps; |
| 109 var jsEvents = []; |
| 110 var mainThread = timelineModel.mainThreadEvents()[0].thread; |
| 111 for (var i = 0; i < samples.length; ++i) { |
| 112 var node = jsProfileModel.nodeByIndex(i); |
| 113 if (node === programNode || node === gcNode || node === idleNode) |
| 114 continue; |
| 115 var stackTrace = node._stackTraceArray; |
| 116 if (!stackTrace) { |
| 117 stackTrace = /** @type {!ConsoleAgent.StackTrace} */ (new Array(node
.depth + 1)); |
| 118 node._stackTraceArray = stackTrace; |
| 119 for (var j = 0; node.parent; node = node.parent) |
| 120 stackTrace[j++] = /** @type {!ConsoleAgent.CallFrame} */ (node); |
| 121 } |
| 122 var payload = /** @type {!WebInspector.TracingModel.EventPayload} */ ({ |
| 123 ph: WebInspector.TracingModel.Phase.Instant, |
| 124 cat: WebInspector.TracingModel.DevToolsMetadataEventCategory, |
| 125 name: WebInspector.TracingTimelineModel.RecordType.JSSample, |
| 126 ts: timestamps[i] * 1000, |
| 127 args: { } |
| 128 }); |
| 129 var jsEvent = new WebInspector.TracingModel.Event(payload, 0, mainThread
); |
| 130 jsEvent.stackTrace = stackTrace; |
| 131 jsEvents.push(jsEvent); |
| 132 } |
| 133 return jsEvents; |
| 134 } |
OLD | NEW |