Chromium Code Reviews| Index: Source/devtools/front_end/sdk/TracingManager.js |
| diff --git a/Source/devtools/front_end/sdk/TracingManager.js b/Source/devtools/front_end/sdk/TracingManager.js |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..6471cb0449ab328258de54a17327ccfbd98b1011 |
| --- /dev/null |
| +++ b/Source/devtools/front_end/sdk/TracingManager.js |
| @@ -0,0 +1,168 @@ |
| +/* |
| + * Copyright 2014 The Chromium Authors. All rights reserved. |
|
yurys
2014/09/11 06:49:23
nit: I guess we use // -style comments for license
|
| + * Use of this source code is governed by a BSD-style license that can be |
| + * found in the LICENSE file. |
| + */ |
| + |
| +/** |
| + * @constructor |
| + * @extends {WebInspector.Object} |
| + * @implements {WebInspector.TargetManager.Observer} |
| + */ |
| +WebInspector.TracingManager = function() |
| +{ |
| + WebInspector.Object.call(this); |
| + this._active = false; |
| + WebInspector.targetManager.observeTargets(this); |
| +} |
| + |
| +WebInspector.TracingManager.Events = { |
| + "BufferUsage": "BufferUsage", |
| + "TracingStarted": "TracingStarted", |
| + "EventsCollected": "EventsCollected", |
| + "TracingStopped": "TracingStopped", |
| + "TracingComplete": "TracingComplete" |
| +} |
| + |
| +/** @typedef {!{ |
| + cat: string, |
| + pid: number, |
| + tid: number, |
| + ts: number, |
| + ph: string, |
| + name: string, |
| + args: !Object, |
| + dur: number, |
| + id: number, |
| + s: string |
| + }} |
| + */ |
| +WebInspector.TracingManager.EventPayload; |
| + |
| +WebInspector.TracingManager.prototype = { |
| + /** |
| + * @param {!WebInspector.Target} target |
| + */ |
| + targetAdded: function(target) |
| + { |
| + if (this._target) |
| + return; |
| + this._target = target; |
| + InspectorBackend.registerTracingDispatcher(new WebInspector.TracingDispatcher(this)); |
| + }, |
| + |
| + /** |
| + * @param {!WebInspector.Target} target |
| + */ |
| + targetRemoved: function(target) |
| + { |
| + if (this._target !== target) |
| + return; |
| + delete this._target; |
| + }, |
| + |
| + /** |
| + * @param {number} usage |
| + */ |
| + _bufferUsage: function(usage) |
| + { |
| + this.dispatchEventToListeners(WebInspector.TracingManager.Events.BufferUsage, usage); |
| + }, |
| + |
| + /** |
| + * @param {!Array.<!WebInspector.TracingManager.EventPayload>} events |
| + */ |
| + _eventsCollected: function(events) |
| + { |
| + this.dispatchEventToListeners(WebInspector.TracingManager.Events.EventsCollected, events); |
| + }, |
| + |
| + _tracingComplete: function() |
| + { |
| + this.dispatchEventToListeners(WebInspector.TracingManager.Events.TracingComplete); |
| + }, |
| + |
| + _tracingStarted: function() |
| + { |
| + if (this._active) |
| + return; |
| + this._active = true; |
| + this.dispatchEventToListeners(WebInspector.TracingManager.Events.TracingStarted); |
| + }, |
| + |
| + /** |
| + * @param {string} categoryFilter |
| + * @param {string} options |
| + * @param {function(?string)=} callback |
| + */ |
| + start: function(categoryFilter, options, callback) |
| + { |
| + if (this._active) |
| + return; |
| + WebInspector.profilingLock().acquire(); |
| + this._shouldReleaseLock = true; |
| + var bufferUsageReportingIntervalMs = 500; |
| + TracingAgent.start(categoryFilter, options, bufferUsageReportingIntervalMs, callback); |
| + this._tracingStarted(); |
| + this._active = true; |
| + }, |
| + |
| + stop: function() |
| + { |
| + if (!this._active) |
| + return; |
| + TracingAgent.end(this._onStop.bind(this)); |
| + if (this._shouldReleaseLock) { |
| + this._shouldReleaseLock = false; |
| + WebInspector.profilingLock().release(); |
| + } |
| + }, |
| + |
| + _onStop: function() |
| + { |
| + if (!this._active) |
| + return; |
| + this.dispatchEventToListeners(WebInspector.TracingManager.Events.TracingStopped); |
| + this._active = false; |
| + }, |
| + |
| + __proto__: WebInspector.Object.prototype |
| +} |
| + |
| +/** |
| + * @constructor |
| + * @implements {TracingAgent.Dispatcher} |
| + * @param {!WebInspector.TracingManager} tracingManager |
| + */ |
| +WebInspector.TracingDispatcher = function(tracingManager) |
| +{ |
| + this._tracingManager = tracingManager; |
| +} |
| + |
| +WebInspector.TracingDispatcher.prototype = { |
| + /** |
| + * @param {number} usage |
| + */ |
| + bufferUsage: function(usage) |
| + { |
| + this._tracingManager._bufferUsage(usage); |
| + }, |
| + |
| + /** |
| + * @param {!Array.<!WebInspector.TracingManager.EventPayload>} data |
| + */ |
| + dataCollected: function(data) |
| + { |
| + this._tracingManager._eventsCollected(data); |
| + }, |
| + |
| + tracingComplete: function() |
| + { |
| + this._tracingManager._tracingComplete(); |
| + }, |
| + |
| + started: function() |
| + { |
| + this._tracingManager._tracingStarted(); |
| + } |
| +} |