Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / devtools / front_end / timeline / TimelineJSProfile.js
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.
4
5
6 WebInspector.TimelineJSProfileProcessor = { };
7
8 /**
9  * @param {!WebInspector.TracingTimelineModel} timelineModel
10  * @param {!ProfilerAgent.CPUProfile} jsProfile
11  * @return {!Array.<!WebInspector.TracingModel.Event>}
12  */
13 WebInspector.TimelineJSProfileProcessor.generateTracingEventsFromCpuProfile = function(timelineModel, jsProfile)
14 {
15     if (!jsProfile.samples)
16         return [];
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;
23     var jsEvents = [];
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)
28             continue;
29         var stackTrace = node._stackTraceArray;
30         if (!stackTrace) {
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);
35         }
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);
40     }
41     return jsEvents;
42 }