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 {!ProfilerAgent.CPUProfile} jsProfile | 9 * @param {!ProfilerAgent.CPUProfile} jsProfile |
10 * @param {!WebInspector.TracingModel.Thread} thread | 10 * @param {!WebInspector.TracingModel.Thread} thread |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
147 if (depth < lockedDepth) { | 147 if (depth < lockedDepth) { |
148 console.error("Child stack is shallower (" + depth + ") than the parent stack (" + lockedDepth + ") at " + time); | 148 console.error("Child stack is shallower (" + depth + ") than the parent stack (" + lockedDepth + ") at " + time); |
149 depth = lockedDepth; | 149 depth = lockedDepth; |
150 } | 150 } |
151 } | 151 } |
152 if (jsFramesStack.length < depth) { | 152 if (jsFramesStack.length < depth) { |
153 console.error("Trying to truncate higher than the current stack size at " + time); | 153 console.error("Trying to truncate higher than the current stack size at " + time); |
154 depth = jsFramesStack.length; | 154 depth = jsFramesStack.length; |
155 } | 155 } |
156 var minFrameDurationMs = currentSamplingIntervalMs / 2; | 156 var minFrameDurationMs = currentSamplingIntervalMs / 2; |
157 for (var k = 0; k < depth; ++k) | |
158 jsFramesStack[k].setEndTime(time); | |
157 for (var k = depth; k < jsFramesStack.length; ++k) | 159 for (var k = depth; k < jsFramesStack.length; ++k) |
158 jsFramesStack[k].setEndTime(Math.min(eventEndTime(jsFramesStack[k]) + minFrameDurationMs, time)); | 160 jsFramesStack[k].setEndTime(Math.min(eventEndTime(jsFramesStack[k]) + minFrameDurationMs, time)); |
159 jsFramesStack.length = depth; | 161 jsFramesStack.length = depth; |
160 } | 162 } |
161 | 163 |
162 /** | 164 /** |
163 * @param {!Array<!ConsoleAgent.CallFrame>} stack | 165 * @param {!Array<!ConsoleAgent.CallFrame>} stack |
164 */ | 166 */ |
165 function filterStackFrames(stack) | 167 function filterStackFrames(stack) |
166 { | 168 { |
167 for (var i = 0, j = 0; i < stack.length; ++i) { | 169 for (var i = 0, j = 0; i < stack.length; ++i) { |
168 var url = stack[i].url; | 170 var url = stack[i].url; |
169 if (url && url.startsWith("native ")) | 171 if (url && url.startsWith("native ")) |
170 continue; | 172 continue; |
171 stack[j++] = stack[i]; | 173 stack[j++] = stack[i]; |
172 } | 174 } |
173 stack.length = j; | 175 stack.length = j; |
174 } | 176 } |
175 | 177 |
176 /** | 178 /** |
177 * @param {!WebInspector.TracingModel.Event} e | 179 * @param {!WebInspector.TracingModel.Event} e |
178 */ | 180 */ |
179 function extractStackTrace(e) | 181 function extractStackTrace(e) |
180 { | 182 { |
181 var eventData = e.args["data"] || e.args["beginData"]; | |
182 var stackTrace = eventData && eventData["stackTrace"]; | |
183 var recordTypes = WebInspector.TimelineModel.RecordType; | 183 var recordTypes = WebInspector.TimelineModel.RecordType; |
184 // GC events do not hold call stack, so make a copy of the current stack . | 184 var stackTrace; |
pfeldman
2016/01/27 23:42:27
Annotate the type please.
alph
2016/01/27 23:51:20
Done.
| |
185 if (e.name === recordTypes.GCEvent || e.name === recordTypes.MajorGC || e.name === recordTypes.MinorGC) | 185 if (e.name === recordTypes.JSSample) { |
186 stackTrace = jsFramesStack.map(function(frameEvent) { return frameEv ent.args["data"]; }).reverse(); | 186 var eventData = e.args["data"] || e.args["beginData"]; |
187 if (!stackTrace) | 187 stackTrace = eventData && eventData["stackTrace"]; |
188 return; | 188 } else { |
189 stackTrace = jsFramesStack.map(frameEvent => frameEvent.args["data"] ).reverse(); | |
190 } | |
189 if (filterNativeFunctions) | 191 if (filterNativeFunctions) |
190 filterStackFrames(stackTrace); | 192 filterStackFrames(stackTrace); |
191 var endTime = eventEndTime(e); | 193 var endTime = eventEndTime(e); |
192 var numFrames = stackTrace.length; | 194 var numFrames = stackTrace.length; |
193 var minFrames = Math.min(numFrames, jsFramesStack.length); | 195 var minFrames = Math.min(numFrames, jsFramesStack.length); |
194 var i; | 196 var i; |
195 for (i = lockedJsStackDepth.peekLast() || 0; i < minFrames; ++i) { | 197 for (i = lockedJsStackDepth.peekLast() || 0; i < minFrames; ++i) { |
196 var newFrame = stackTrace[numFrames - 1 - i]; | 198 var newFrame = stackTrace[numFrames - 1 - i]; |
197 var oldFrame = jsFramesStack[i].args["data"]; | 199 var oldFrame = jsFramesStack[i].args["data"]; |
198 if (!equalFrames(newFrame, oldFrame)) | 200 if (!equalFrames(newFrame, oldFrame)) |
199 break; | 201 break; |
200 jsFramesStack[i].setEndTime(Math.max(jsFramesStack[i].endTime, endTi me)); | 202 jsFramesStack[i].setEndTime(Math.max(jsFramesStack[i].endTime, endTi me)); |
201 } | 203 } |
202 truncateJSStack(i, e.startTime); | 204 truncateJSStack(i, e.startTime); |
203 for (; i < numFrames; ++i) { | 205 for (; i < numFrames; ++i) { |
204 var frame = stackTrace[numFrames - 1 - i]; | 206 var frame = stackTrace[numFrames - 1 - i]; |
205 var jsFrameEvent = new WebInspector.TracingModel.Event(WebInspector. TracingModel.DevToolsTimelineEventCategory, WebInspector.TimelineModel.RecordTyp e.JSFrame, | 207 var jsFrameEvent = new WebInspector.TracingModel.Event(WebInspector. TracingModel.DevToolsTimelineEventCategory, recordTypes.JSFrame, |
206 WebInspector.TracingModel.Phase.Complete, e.startTime, e.thread) ; | 208 WebInspector.TracingModel.Phase.Complete, e.startTime, e.thread) ; |
207 jsFrameEvent.ordinal = e.ordinal; | 209 jsFrameEvent.ordinal = e.ordinal; |
208 jsFrameEvent.addArgs({ data: frame }); | 210 jsFrameEvent.addArgs({ data: frame }); |
209 jsFrameEvent.setEndTime(endTime); | 211 jsFrameEvent.setEndTime(endTime); |
210 jsFramesStack.push(jsFrameEvent); | 212 jsFramesStack.push(jsFrameEvent); |
211 jsFrameEvents.push(jsFrameEvent); | 213 jsFrameEvents.push(jsFrameEvent); |
212 } | 214 } |
213 } | 215 } |
214 | 216 |
215 /** | 217 /** |
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
505 WebInspector.TracingModel.Phase.Instant, e.startTime, e.thread); | 507 WebInspector.TracingModel.Phase.Instant, e.startTime, e.thread); |
506 sampleEvent.ordinal = e.ordinal; | 508 sampleEvent.ordinal = e.ordinal; |
507 sampleEvent.args = {"data": {"stackTrace": stack }}; | 509 sampleEvent.args = {"data": {"stackTrace": stack }}; |
508 samples.push(sampleEvent); | 510 samples.push(sampleEvent); |
509 break; | 511 break; |
510 } | 512 } |
511 } | 513 } |
512 | 514 |
513 return samples; | 515 return samples; |
514 } | 516 } |
OLD | NEW |