Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1863)

Unified Diff: Source/devtools/front_end/timeline/TimelineJSProfile.js

Issue 431273005: DevTools: Collect JS samples when recording timeline (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/devtools/front_end/timeline/TimelineJSProfile.js
diff --git a/Source/devtools/front_end/timeline/TimelineJSProfile.js b/Source/devtools/front_end/timeline/TimelineJSProfile.js
index 5af54ed1e2de23a2e3c3339bf414e61685fb19a7..703bb23029478d52c0329c7b3ed9d18a220a3403 100644
--- a/Source/devtools/front_end/timeline/TimelineJSProfile.js
+++ b/Source/devtools/front_end/timeline/TimelineJSProfile.js
@@ -90,3 +90,45 @@ WebInspector.TimelineJSProfileProcessor.mergeJSProfileIntoTimeline = function(ti
timelineModel.forAllRecords(processRecord);
}
+
+/**
+ * @param {!WebInspector.TracingTimelineModel} timelineModel
+ * @param {!ProfilerAgent.CPUProfile} jsProfile
+ * @return {!Array.<!WebInspector.TracingModel.Event>}
+ */
+WebInspector.TimelineJSProfileProcessor.generateTracingEventsFromCpuProfile = function(timelineModel, jsProfile)
+{
+ if (!jsProfile.samples)
+ return [];
+ var jsProfileModel = new WebInspector.CPUProfileDataModel(jsProfile);
+ var idleNode = jsProfileModel.idleNode;
+ var programNode = jsProfileModel.programNode;
+ var gcNode = jsProfileModel.gcNode;
+ var samples = jsProfileModel.samples;
+ var timestamps = jsProfileModel.timestamps;
+ var jsEvents = [];
+ var mainThread = timelineModel.mainThreadEvents()[0].thread;
+ for (var i = 0; i < samples.length; ++i) {
+ var node = jsProfileModel.nodeByIndex(i);
+ if (node === programNode || node === gcNode || node === idleNode)
+ continue;
+ var stackTrace = node._stackTraceArray;
+ if (!stackTrace) {
+ stackTrace = /** @type {!ConsoleAgent.StackTrace} */ (new Array(node.depth + 1));
+ node._stackTraceArray = stackTrace;
+ for (var j = 0; node.parent; node = node.parent)
+ stackTrace[j++] = /** @type {!ConsoleAgent.CallFrame} */ (node);
+ }
+ var payload = /** @type {!WebInspector.TracingModel.EventPayload} */ ({
+ ph: WebInspector.TracingModel.Phase.Instant,
+ cat: WebInspector.TracingModel.DevToolsMetadataEventCategory,
+ name: WebInspector.TracingTimelineModel.RecordType.CallStack,
+ ts: timestamps[i] * 1000,
+ args: { }
+ });
+ var jsEvent = new WebInspector.TracingModel.Event(payload, 0, mainThread);
+ jsEvent.stackTrace = stackTrace;
+ jsEvents.push(jsEvent);
+ }
+ return jsEvents;
+}

Powered by Google App Engine
This is Rietveld 408576698