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

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/timeline/TimelineController.js

Issue 1807093002: DevTools: Resume targets *after* stopping timeline recording. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: addressing comment. Created 4 years, 9 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 * @constructor 6 * @constructor
7 * @param {!WebInspector.TimelineLifecycleDelegate} delegate 7 * @param {!WebInspector.TimelineLifecycleDelegate} delegate
8 * @param {!WebInspector.TracingModel} tracingModel 8 * @param {!WebInspector.TracingModel} tracingModel
9 * @implements {WebInspector.TargetManager.Observer} 9 * @implements {WebInspector.TargetManager.Observer}
10 * @implements {WebInspector.TracingManagerClient} 10 * @implements {WebInspector.TracingManagerClient}
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 } 63 }
64 if (captureFilmStrip) 64 if (captureFilmStrip)
65 categoriesArray.push(disabledByDefault("devtools.screenshot")); 65 categoriesArray.push(disabledByDefault("devtools.screenshot"));
66 66
67 var categories = categoriesArray.join(","); 67 var categories = categoriesArray.join(",");
68 this._startRecordingWithCategories(categories, enableJSSampling); 68 this._startRecordingWithCategories(categories, enableJSSampling);
69 }, 69 },
70 70
71 stopRecording: function() 71 stopRecording: function()
72 { 72 {
73 this._allProfilesStoppedPromise = this._stopProfilingOnAllTargets();
74 var mainTarget = WebInspector.targetManager.mainTarget();
75 if (mainTarget)
76 mainTarget.tracingManager.stop();
73 WebInspector.targetManager.resumeAllTargets(); 77 WebInspector.targetManager.resumeAllTargets();
74 this._allProfilesStoppedPromise = this._stopProfilingOnAllTargets();
75 if (this._targets[0])
76 this._targets[0].tracingManager.stop();
77 this._delegate.loadingStarted(); 78 this._delegate.loadingStarted();
78 }, 79 },
79 80
80 /** 81 /**
81 * @override 82 * @override
82 * @param {!WebInspector.Target} target 83 * @param {!WebInspector.Target} target
83 */ 84 */
84 targetAdded: function(target) 85 targetAdded: function(target)
85 { 86 {
86 this._targets.push(target); 87 this._targets.push(target);
(...skipping 20 matching lines...) Expand all
107 { 108 {
108 return target.profilerAgent().start(); 109 return target.profilerAgent().start();
109 }, 110 },
110 111
111 /** 112 /**
112 * @return {!Promise} 113 * @return {!Promise}
113 */ 114 */
114 _startProfilingOnAllTargets: function() 115 _startProfilingOnAllTargets: function()
115 { 116 {
116 var intervalUs = WebInspector.moduleSetting("highResolutionCpuProfiling" ).get() ? 100 : 1000; 117 var intervalUs = WebInspector.moduleSetting("highResolutionCpuProfiling" ).get() ? 100 : 1000;
117 this._targets[0].profilerAgent().setSamplingInterval(intervalUs); 118 var mainTarget = WebInspector.targetManager.mainTarget();
119 if (mainTarget)
120 mainTarget.profilerAgent().setSamplingInterval(intervalUs);
118 this._profiling = true; 121 this._profiling = true;
119 return Promise.all(this._targets.map(this._startProfilingOnTarget)); 122 return Promise.all(this._targets.map(this._startProfilingOnTarget));
120 }, 123 },
121 124
122 /** 125 /**
123 * @param {!WebInspector.Target} target 126 * @param {!WebInspector.Target} target
124 * @return {!Promise} 127 * @return {!Promise}
125 */ 128 */
126 _stopProfilingOnTarget: function(target) 129 _stopProfilingOnTarget: function(target)
127 { 130 {
128 /** 131 return target.profilerAgent().stop(this._addCpuProfile.bind(this, target .id()));
129 * @param {?Protocol.Error} error
130 * @param {?ProfilerAgent.CPUProfile} profile
131 * @return {?ProfilerAgent.CPUProfile}
132 */
133 function extractProfile(error, profile)
134 {
135 return !error && profile ? profile : null;
136 }
137 return target.profilerAgent().stop(extractProfile).then(this._addCpuProf ile.bind(this, target.id()));
138 }, 132 },
139 133
140 /** 134 /**
135 * @param {number} targetId
136 * @param {?Protocol.Error} error
137 * @param {?ProfilerAgent.CPUProfile} cpuProfile
138 */
139 _addCpuProfile: function(targetId, error, cpuProfile)
140 {
141 if (!cpuProfile) {
142 WebInspector.console.log(WebInspector.UIString("CPU profile for a ta rget is not available. %s", error || ""));
pfeldman 2016/03/17 19:04:04 this could be a warning.
alph 2016/03/17 21:12:39 Done.
143 return;
144 }
145 if (!this._cpuProfiles)
146 this._cpuProfiles = new Map();
147 this._cpuProfiles.set(targetId, cpuProfile);
148 },
149
150 /**
141 * @return {!Promise} 151 * @return {!Promise}
142 */ 152 */
143 _stopProfilingOnAllTargets: function() 153 _stopProfilingOnAllTargets: function()
144 { 154 {
145 var targets = this._profiling ? this._targets : []; 155 var targets = this._profiling ? this._targets : [];
146 this._profiling = false; 156 this._profiling = false;
147 return Promise.all(targets.map(this._stopProfilingOnTarget, this)); 157 return Promise.all(targets.map(this._stopProfilingOnTarget, this));
148 }, 158 },
149 159
150 /** 160 /**
151 * @param {string} categories 161 * @param {string} categories
152 * @param {boolean=} enableJSSampling 162 * @param {boolean=} enableJSSampling
153 * @param {function(?string)=} callback 163 * @param {function(?string)=} callback
154 */ 164 */
155 _startRecordingWithCategories: function(categories, enableJSSampling, callba ck) 165 _startRecordingWithCategories: function(categories, enableJSSampling, callba ck)
156 { 166 {
157 if (!this._targets.length) 167 if (!this._targets.length)
158 return; 168 return;
159 WebInspector.targetManager.suspendAllTargets(); 169 WebInspector.targetManager.suspendAllTargets();
160 var profilingStartedPromise = enableJSSampling && !Runtime.experiments.i sEnabled("timelineTracingJSProfile") ? 170 var profilingStartedPromise = enableJSSampling && !Runtime.experiments.i sEnabled("timelineTracingJSProfile") ?
161 this._startProfilingOnAllTargets() : Promise.resolve(); 171 this._startProfilingOnAllTargets() : Promise.resolve();
162 var samplingFrequencyHz = WebInspector.moduleSetting("highResolutionCpuP rofiling").get() ? 10000 : 1000; 172 var samplingFrequencyHz = WebInspector.moduleSetting("highResolutionCpuP rofiling").get() ? 10000 : 1000;
163 var options = "sampling-frequency=" + samplingFrequencyHz; 173 var options = "sampling-frequency=" + samplingFrequencyHz;
164 var mainTarget = this._targets[0]; 174 var mainTarget = WebInspector.targetManager.mainTarget();
165 var tracingManager = mainTarget.tracingManager; 175 var tracingManager = mainTarget.tracingManager;
166 mainTarget.resourceTreeModel.suspendReload(); 176 mainTarget.resourceTreeModel.suspendReload();
167 profilingStartedPromise.then(tracingManager.start.bind(tracingManager, t his, categories, options, onTraceStarted)); 177 profilingStartedPromise.then(tracingManager.start.bind(tracingManager, t his, categories, options, onTraceStarted));
168 /** 178 /**
169 * @param {?string} error 179 * @param {?string} error
170 */ 180 */
171 function onTraceStarted(error) 181 function onTraceStarted(error)
172 { 182 {
173 mainTarget.resourceTreeModel.resumeReload(); 183 mainTarget.resourceTreeModel.resumeReload();
174 if (callback) 184 if (callback)
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 if (!this._cpuProfiles) 250 if (!this._cpuProfiles)
241 return; 251 return;
242 252
243 var metadataEventTypes = WebInspector.TimelineModel.DevToolsMetadataEven t; 253 var metadataEventTypes = WebInspector.TimelineModel.DevToolsMetadataEven t;
244 var metadataEvents = this._tracingModel.devToolsMetadataEvents(); 254 var metadataEvents = this._tracingModel.devToolsMetadataEvents();
245 var mainMetaEvent = metadataEvents.filter(event => event.name === metada taEventTypes.TracingStartedInPage).peekLast(); 255 var mainMetaEvent = metadataEvents.filter(event => event.name === metada taEventTypes.TracingStartedInPage).peekLast();
246 if (!mainMetaEvent) 256 if (!mainMetaEvent)
247 return; 257 return;
248 258
249 var pid = mainMetaEvent.thread.process().id(); 259 var pid = mainMetaEvent.thread.process().id();
250 var mainTarget = this._targets[0]; 260 var mainTarget = WebInspector.targetManager.mainTarget();
251 var mainCpuProfile = this._cpuProfiles.get(mainTarget.id()); 261 var mainCpuProfile = this._cpuProfiles.get(mainTarget.id());
252 this._injectCpuProfileEvent(pid, mainMetaEvent.thread.id(), mainCpuProfi le); 262 this._injectCpuProfileEvent(pid, mainMetaEvent.thread.id(), mainCpuProfi le);
253 263
254 var workerMetaEvents = metadataEvents.filter(event => event.name === met adataEventTypes.TracingSessionIdForWorker); 264 var workerMetaEvents = metadataEvents.filter(event => event.name === met adataEventTypes.TracingSessionIdForWorker);
255 for (var metaEvent of workerMetaEvents) { 265 for (var metaEvent of workerMetaEvents) {
256 var workerId = metaEvent.args["data"]["workerId"]; 266 var workerId = metaEvent.args["data"]["workerId"];
257 var target = mainTarget.workerManager ? mainTarget.workerManager.tar getByWorkerId(workerId) : null; 267 var target = mainTarget.workerManager ? mainTarget.workerManager.tar getByWorkerId(workerId) : null;
258 if (!target) 268 if (!target)
259 continue; 269 continue;
260 var cpuProfile = this._cpuProfiles.get(target.id()); 270 var cpuProfile = this._cpuProfiles.get(target.id());
(...skipping 11 matching lines...) Expand all
272 this._delegate.recordingProgress(usage); 282 this._delegate.recordingProgress(usage);
273 }, 283 },
274 284
275 /** 285 /**
276 * @param {number} progress 286 * @param {number} progress
277 * @override 287 * @override
278 */ 288 */
279 eventsRetrievalProgress: function(progress) 289 eventsRetrievalProgress: function(progress)
280 { 290 {
281 this._delegate.loadingProgress(progress); 291 this._delegate.loadingProgress(progress);
282 },
283
284 /**
285 * @param {number} targetId
286 * @param {?ProfilerAgent.CPUProfile} cpuProfile
287 */
288 _addCpuProfile: function(targetId, cpuProfile)
289 {
290 if (!cpuProfile)
291 return;
292 if (!this._cpuProfiles)
293 this._cpuProfiles = new Map();
294 this._cpuProfiles.set(targetId, cpuProfile);
295 } 292 }
296 } 293 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698