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
3 // found in the LICENSE file.
6 WebInspector.TimelineJSProfileProcessor = { };
9 * @param {!WebInspector.TracingTimelineModel} timelineModel
10 * @param {!ProfilerAgent.CPUProfile} jsProfile
11 * @return {!Array.<!WebInspector.TracingModel.Event>}
13 WebInspector.TimelineJSProfileProcessor.generateTracingEventsFromCpuProfile = function(timelineModel, jsProfile)
15 if (!jsProfile.samples)
17 var jsProfileModel = new WebInspector.CPUProfileDataModel(jsProfile);
18 var idleNode = jsProfileModel.idleNode;
19 var programNode = jsProfileModel.programNode;
20 var gcNode = jsProfileModel.gcNode;
21 var samples = jsProfileModel.samples;
22 var timestamps = jsProfileModel.timestamps;
24 var mainThread = timelineModel.mainThreadEvents()[0].thread;
25 for (var i = 0; i < samples.length; ++i) {
26 var node = jsProfileModel.nodeByIndex(i);
27 if (node === programNode || node === gcNode || node === idleNode)
29 var stackTrace = node._stackTraceArray;
31 stackTrace = /** @type {!ConsoleAgent.StackTrace} */ (new Array(node.depth + 1));
32 node._stackTraceArray = stackTrace;
33 for (var j = 0; node.parent; node = node.parent)
34 stackTrace[j++] = /** @type {!ConsoleAgent.CallFrame} */ (node);
36 var jsEvent = new WebInspector.TracingModel.Event(WebInspector.TracingModel.DevToolsMetadataEventCategory, WebInspector.TracingTimelineModel.RecordType.JSSample,
37 WebInspector.TracingModel.Phase.Instant, timestamps[i], mainThread);
38 jsEvent.stackTrace = stackTrace;
39 jsEvents.push(jsEvent);