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

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

Issue 724013003: DevTools: Connect worker cpu profiles to worker tracing threads. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 1 month 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/TimelineModel.js
diff --git a/Source/devtools/front_end/timeline/TimelineModel.js b/Source/devtools/front_end/timeline/TimelineModel.js
index eb1a1bc431de541eaadaaa79e947f0163d0eb72c..81a0beb09b93caea7a9bd186cf0d9d23ce423b76 100644
--- a/Source/devtools/front_end/timeline/TimelineModel.js
+++ b/Source/devtools/front_end/timeline/TimelineModel.js
@@ -405,7 +405,7 @@ WebInspector.TimelineModel.prototype = {
if (captureCauses || enableJSSampling)
categoriesArray.push(disabledByDefault("devtools.timeline.stack"));
if (enableJSSampling)
- this._startCpuProfilingOnAllTargets();
+ categoriesArray.push(disabledByDefault("devtools.js.profile"));
if (captureCauses && Runtime.experiments.isEnabled("timelineInvalidationTracking"))
categoriesArray.push(disabledByDefault("devtools.timeline.invalidationTracking"));
if (capturePictures) {
@@ -550,6 +550,8 @@ WebInspector.TimelineModel.prototype = {
*/
_startRecordingWithCategories: function(categories)
{
+ if (categories.indexOf("devtools.js.profile") >= 0)
yurys 2014/11/14 13:25:26 Let's pass it as explicit enableJSSampling paramet
alph 2014/11/14 15:01:59 Done.
+ this._startCpuProfilingOnAllTargets();
this._tracingManager.start(categories, "");
},
@@ -597,33 +599,43 @@ WebInspector.TimelineModel.prototype = {
if (error)
WebInspector.console.error(error);
if (!this._cpuProfiles)
- this._cpuProfiles = {};
- this._cpuProfiles[target.id()] = cpuProfile;
+ this._cpuProfiles = new Map();
+ this._cpuProfiles.set(target.id(), cpuProfile);
},
_didStopRecordingTraceEvents: function()
{
this._tracingModel.tracingComplete();
- var events = this._tracingModel.devtoolsPageMetadataEvents();
+ var metaEvents = this._tracingModel.devtoolsPageMetadataEvents();
var workerMetadataEvents = this._tracingModel.devtoolsWorkerMetadataEvents();
this._resetProcessingState();
- for (var i = 0, length = events.length; i < length; i++) {
- var event = events[i];
- var process = event.thread.process();
- var startTime = event.startTime;
+ for (var i = 0, length = metaEvents.length; i < length; i++) {
+ var metaEvent = metaEvents[i];
+ var process = metaEvent.thread.process();
+ var startTime = metaEvent.startTime;
var endTime = Infinity;
if (i + 1 < length)
- endTime = events[i + 1].startTime;
+ endTime = metaEvents[i + 1].startTime;
var threads = process.sortedThreads();
for (var j = 0; j < threads.length; j++) {
var thread = threads[j];
- if (thread.name() === "WebCore: Worker" && workerMetadataEvents.every(function(e) { return e.args["data"]["workerThreadId"] !== thread.id(); }))
- continue;
- this._processThreadEvents(startTime, endTime, event.thread, thread);
+ var workerId = 0;
+ if (thread.name() === "WebCore: Worker") {
+ for (var k = 0; k < workerMetadataEvents.length; ++k) {
+ var eventData = workerMetadataEvents[k].args["data"];
+ if (eventData["workerThreadId"] === thread.id()) {
+ workerId = eventData["workerId"];
+ break;
+ }
+ }
+ if (!workerId)
+ continue;
+ }
+ this._processThreadEvents(startTime, endTime, metaEvent.thread, thread, workerId);
}
}
this._resetProcessingState();
@@ -753,8 +765,9 @@ WebInspector.TimelineModel.prototype = {
* @param {?number} endTime
* @param {!WebInspector.TracingModel.Thread} mainThread
* @param {!WebInspector.TracingModel.Thread} thread
+ * @param {number} workerId
*/
- _processThreadEvents: function(startTime, endTime, mainThread, thread)
+ _processThreadEvents: function(startTime, endTime, mainThread, thread, workerId)
{
var events = thread.events();
var length = events.length;
@@ -782,20 +795,28 @@ WebInspector.TimelineModel.prototype = {
this._inspectedTargetEvents.push(event);
}
- if (this._cpuProfiles && thread.target()) {
- var cpuProfile = this._cpuProfiles[thread.target().id()];
- if (cpuProfile) {
- var jsSamples = WebInspector.TimelineJSProfileProcessor.generateTracingEventsFromCpuProfile(cpuProfile, thread);
- var mergedEvents = threadEvents.mergeOrdered(jsSamples, WebInspector.TracingModel.Event.orderedCompareStartTime);
- var jsFrameEvents = WebInspector.TimelineJSProfileProcessor.generateJSFrameEvents(mergedEvents);
- mergedEvents = jsFrameEvents.mergeOrdered(mergedEvents, WebInspector.TracingModel.Event.orderedCompareStartTime);
- if (virtualThread)
- virtualThread.events = mergedEvents;
- else
- this._mainThreadEvents = mergedEvents;
- this._inspectedTargetEvents = this._inspectedTargetEvents.concat(jsSamples, jsFrameEvents);
- }
- }
+ if (!this._cpuProfiles)
+ return;
+ var target;
+ if (thread === mainThread)
+ target = WebInspector.targetManager.mainTarget();
+ else
+ target = WebInspector.workerTargetManager && WebInspector.workerTargetManager.targetByWorkerId(workerId);
yurys 2014/11/14 13:25:26 When can WebInspector.workerTargetManager be null?
alph 2014/11/14 15:01:59 before the main target is created. It is obviously
+ if (!target)
+ return;
+ var cpuProfile = this._cpuProfiles.get(target.id());
+ if (!cpuProfile)
+ return;
+ this._cpuProfiles.delete(target.id());
+ var jsSamples = WebInspector.TimelineJSProfileProcessor.generateTracingEventsFromCpuProfile(cpuProfile, thread);
+ var mergedEvents = threadEvents.mergeOrdered(jsSamples, WebInspector.TracingModel.Event.orderedCompareStartTime);
+ var jsFrameEvents = WebInspector.TimelineJSProfileProcessor.generateJSFrameEvents(mergedEvents);
+ mergedEvents = jsFrameEvents.mergeOrdered(mergedEvents, WebInspector.TracingModel.Event.orderedCompareStartTime);
+ if (virtualThread)
+ virtualThread.events = mergedEvents;
+ else
+ this._mainThreadEvents = mergedEvents;
+ this._inspectedTargetEvents = this._inspectedTargetEvents.concat(jsSamples, jsFrameEvents);
},
/**

Powered by Google App Engine
This is Rietveld 408576698