Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 * @implements {SDK.TargetManager.Observer} | 6 * @implements {SDK.TargetManager.Observer} |
| 7 * @implements {SDK.TracingManagerClient} | 7 * @implements {SDK.TracingManagerClient} |
| 8 * @unrestricted | 8 * @unrestricted |
| 9 */ | 9 */ |
| 10 Timeline.TimelineController = class { | 10 Timeline.TimelineController = class { |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 26 /** @type {!Array<!SDK.Target>} */ | 26 /** @type {!Array<!SDK.Target>} */ |
| 27 this._targets = []; | 27 this._targets = []; |
| 28 /** @type {!Array<!Timeline.ExtensionTracingSession>} */ | 28 /** @type {!Array<!Timeline.ExtensionTracingSession>} */ |
| 29 this._extensionSessions = []; | 29 this._extensionSessions = []; |
| 30 SDK.targetManager.observeTargets(this); | 30 SDK.targetManager.observeTargets(this); |
| 31 } | 31 } |
| 32 | 32 |
| 33 /** | 33 /** |
| 34 * @param {!Timeline.TimelineController.RecordingOptions} options | 34 * @param {!Timeline.TimelineController.RecordingOptions} options |
| 35 * @param {!Array<!Extensions.ExtensionTraceProvider>} providers | 35 * @param {!Array<!Extensions.ExtensionTraceProvider>} providers |
| 36 * @return {!Promise} | |
| 36 */ | 37 */ |
| 37 startRecording(options, providers) { | 38 startRecording(options, providers) { |
| 38 this._extensionTraceProviders = Extensions.extensionServer.traceProviders(). slice(); | 39 this._extensionTraceProviders = Extensions.extensionServer.traceProviders(). slice(); |
| 39 | 40 |
| 40 /** | 41 /** |
| 41 * @param {string} category | 42 * @param {string} category |
| 42 * @return {string} | 43 * @return {string} |
| 43 */ | 44 */ |
| 44 function disabledByDefault(category) { | 45 function disabledByDefault(category) { |
| 45 return 'disabled-by-default-' + category; | 46 return 'disabled-by-default-' + category; |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 65 categoriesArray.push( | 66 categoriesArray.push( |
| 66 disabledByDefault('devtools.timeline.layers'), disabledByDefault('devt ools.timeline.picture'), | 67 disabledByDefault('devtools.timeline.layers'), disabledByDefault('devt ools.timeline.picture'), |
| 67 disabledByDefault('blink.graphics_context_annotations')); | 68 disabledByDefault('blink.graphics_context_annotations')); |
| 68 } | 69 } |
| 69 if (options.captureFilmStrip) | 70 if (options.captureFilmStrip) |
| 70 categoriesArray.push(disabledByDefault('devtools.screenshot')); | 71 categoriesArray.push(disabledByDefault('devtools.screenshot')); |
| 71 | 72 |
| 72 this._extensionSessions = | 73 this._extensionSessions = |
| 73 providers.map(provider => new Timeline.ExtensionTracingSession(provider, this._performanceModel)); | 74 providers.map(provider => new Timeline.ExtensionTracingSession(provider, this._performanceModel)); |
| 74 this._extensionSessions.forEach(session => session.start()); | 75 this._extensionSessions.forEach(session => session.start()); |
| 75 this._startRecordingWithCategories(categoriesArray.join(','), options.enable JSSampling); | 76 var startPromise = this._startRecordingWithCategories(categoriesArray.join(' ,'), options.enableJSSampling); |
| 76 this._performanceModel.setRecordStartTime(Date.now()); | 77 this._performanceModel.setRecordStartTime(Date.now()); |
| 78 return startPromise; | |
| 77 } | 79 } |
| 78 | 80 |
| 79 stopRecording() { | 81 stopRecording() { |
| 80 var tracingStoppedPromises = []; | 82 var tracingStoppedPromises = []; |
| 81 tracingStoppedPromises.push(new Promise(resolve => this._tracingCompleteCall back = resolve)); | 83 tracingStoppedPromises.push(new Promise(resolve => this._tracingCompleteCall back = resolve)); |
| 82 tracingStoppedPromises.push(this._stopProfilingOnAllTargets()); | 84 tracingStoppedPromises.push(this._stopProfilingOnAllTargets()); |
| 83 this._target.tracingManager.stop(); | 85 this._target.tracingManager.stop(); |
| 84 tracingStoppedPromises.push(SDK.targetManager.resumeAllTargets()); | 86 tracingStoppedPromises.push(SDK.targetManager.resumeAllTargets()); |
| 85 | 87 |
| 86 this._client.loadingStarted(); | 88 this._client.loadingStarted(); |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 162 */ | 164 */ |
| 163 _stopProfilingOnAllTargets() { | 165 _stopProfilingOnAllTargets() { |
| 164 var targets = this._profiling ? this._targets : []; | 166 var targets = this._profiling ? this._targets : []; |
| 165 this._profiling = false; | 167 this._profiling = false; |
| 166 return Promise.all(targets.map(this._stopProfilingOnTarget, this)); | 168 return Promise.all(targets.map(this._stopProfilingOnTarget, this)); |
| 167 } | 169 } |
| 168 | 170 |
| 169 /** | 171 /** |
| 170 * @param {string} categories | 172 * @param {string} categories |
| 171 * @param {boolean=} enableJSSampling | 173 * @param {boolean=} enableJSSampling |
| 172 * @param {function(?string)=} callback | 174 * @return {!Promise} |
| 173 */ | 175 */ |
| 174 _startRecordingWithCategories(categories, enableJSSampling, callback) { | 176 _startRecordingWithCategories(categories, enableJSSampling) { |
| 175 SDK.targetManager.suspendAllTargets(); | 177 SDK.targetManager.suspendAllTargets(); |
| 176 var profilingStartedPromise = enableJSSampling && !Runtime.experiments.isEna bled('timelineTracingJSProfile') ? | 178 var profilingStartedPromise = enableJSSampling && !Runtime.experiments.isEna bled('timelineTracingJSProfile') ? |
| 177 this._startProfilingOnAllTargets() : | 179 this._startProfilingOnAllTargets() : |
| 178 Promise.resolve(); | 180 Promise.resolve(); |
| 179 var samplingFrequencyHz = Common.moduleSetting('highResolutionCpuProfiling') .get() ? 10000 : 1000; | 181 var samplingFrequencyHz = Common.moduleSetting('highResolutionCpuProfiling') .get() ? 10000 : 1000; |
| 180 var options = 'sampling-frequency=' + samplingFrequencyHz; | 182 var options = 'sampling-frequency=' + samplingFrequencyHz; |
| 181 var target = this._target; | 183 var tracingManager = this._target.tracingManager; |
| 182 var tracingManager = target.tracingManager; | 184 return profilingStartedPromise.then( |
| 183 SDK.targetManager.suspendReload(target); | 185 tracingManager.start.bind(tracingManager, this, categories, options, und efined)); |
|
caseq
2017/02/27 23:13:38
Looks like we need to defer this to when tracingMa
dgozman
2017/02/28 01:58:17
Good catch! Done.
| |
| 184 profilingStartedPromise.then(tracingManager.start.bind(tracingManager, this, categories, options, onTraceStarted)); | |
| 185 /** | |
| 186 * @param {?string} error | |
| 187 */ | |
| 188 function onTraceStarted(error) { | |
| 189 SDK.targetManager.resumeReload(target); | |
| 190 if (callback) | |
| 191 callback(error); | |
| 192 } | |
| 193 } | 186 } |
| 194 | 187 |
| 195 /** | 188 /** |
| 196 * @override | 189 * @override |
| 197 */ | 190 */ |
| 198 tracingStarted() { | 191 tracingStarted() { |
|
caseq
2017/02/27 23:13:38
Now that startRecording returns a promise, you can
dgozman
2017/02/28 01:58:17
Done.
| |
| 199 this._client.recordingStarted(); | 192 this._client.recordingStarted(); |
| 200 } | 193 } |
| 201 | 194 |
| 202 /** | 195 /** |
| 203 * @param {!Array.<!SDK.TracingManager.EventPayload>} events | 196 * @param {!Array.<!SDK.TracingManager.EventPayload>} events |
| 204 * @override | 197 * @override |
| 205 */ | 198 */ |
| 206 traceEventsCollected(events) { | 199 traceEventsCollected(events) { |
| 207 this._tracingModel.addEvents(events); | 200 this._tracingModel.addEvents(events); |
| 208 } | 201 } |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 307 }; | 300 }; |
| 308 | 301 |
| 309 /** | 302 /** |
| 310 * @typedef {!{ | 303 * @typedef {!{ |
| 311 * enableJSSampling: (boolean|undefined), | 304 * enableJSSampling: (boolean|undefined), |
| 312 * capturePictures: (boolean|undefined), | 305 * capturePictures: (boolean|undefined), |
| 313 * captureFilmStrip: (boolean|undefined) | 306 * captureFilmStrip: (boolean|undefined) |
| 314 * }} | 307 * }} |
| 315 */ | 308 */ |
| 316 Timeline.TimelineController.RecordingOptions; | 309 Timeline.TimelineController.RecordingOptions; |
| OLD | NEW |