UNPKG

monaca-lib

Version:

Monaca cloud API bindings for JavaScript

166 lines (150 loc) 4.21 kB
/* * Copyright 2014 The Chromium Authors. All rights reserved. * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ /** * @interface */ WebInspector.TracingManagerClient = function() { } WebInspector.TracingManagerClient.prototype = { tracingStarted: function() { }, /** * @param {!Array.<!WebInspector.TracingManager.EventPayload>} events */ traceEventsCollected: function(events) { }, tracingComplete: function() { }, /** * @param {number} usage */ tracingBufferUsage: function(usage) { }, /** * @param {number} progress */ eventsRetrievalProgress: function(progress) { } } /** * @constructor * @param {!WebInspector.Target} target */ WebInspector.TracingManager = function(target) { this._target = target; target.registerTracingDispatcher(new WebInspector.TracingDispatcher(this)); /** @type {?WebInspector.TracingManagerClient} */ this._activeClient = null; this._eventBufferSize = 0; this._eventsRetrieved = 0; } /** @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 = { /** * @return {?WebInspector.Target} */ target: function() { return this._target; }, /** * @param {number=} usage * @param {number=} eventCount * @param {number=} percentFull */ _bufferUsage: function(usage, eventCount, percentFull) { this._eventBufferSize = eventCount; this._activeClient.tracingBufferUsage(usage || percentFull || 0); }, /** * @param {!Array.<!WebInspector.TracingManager.EventPayload>} events */ _eventsCollected: function(events) { this._activeClient.traceEventsCollected(events); this._eventsRetrieved += events.length; if (!this._eventBufferSize) return; if (this._eventsRetrieved > this._eventBufferSize) this._eventsRetrieved = this._eventBufferSize; this._activeClient.eventsRetrievalProgress(this._eventsRetrieved / this._eventBufferSize); }, _tracingComplete: function() { this._eventBufferSize = 0; this._eventsRetrieved = 0; this._activeClient.tracingComplete(); this._activeClient = null; }, /** * @param {!WebInspector.TracingManagerClient} client * @param {string} categoryFilter * @param {string} options * @param {function(?string)=} callback */ start: function(client, categoryFilter, options, callback) { if (this._activeClient) throw new Error("Tracing is already started"); WebInspector.targetManager.suspendAllTargets(); var bufferUsageReportingIntervalMs = 500; this._activeClient = client; this._target.tracingAgent().start(categoryFilter, options, bufferUsageReportingIntervalMs, callback); this._activeClient.tracingStarted(); }, stop: function() { this._target.tracingAgent().end(); WebInspector.targetManager.resumeAllTargets(); } } /** * @constructor * @implements {TracingAgent.Dispatcher} * @param {!WebInspector.TracingManager} tracingManager */ WebInspector.TracingDispatcher = function(tracingManager) { this._tracingManager = tracingManager; } WebInspector.TracingDispatcher.prototype = { /** * @override * @param {number=} usage * @param {number=} eventCount * @param {number=} percentFull */ bufferUsage: function(usage, eventCount, percentFull) { this._tracingManager._bufferUsage(usage, eventCount, percentFull); }, /** * @override * @param {!Array.<!WebInspector.TracingManager.EventPayload>} data */ dataCollected: function(data) { this._tracingManager._eventsCollected(data); }, /** * @override */ tracingComplete: function() { this._tracingManager._tracingComplete(); } }