gecko-dev/devtools/shared/client/trace-client.js
2018-03-12 13:44:41 -05:00

113 lines
2.5 KiB
JavaScript

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
const {arg, DebuggerClient} = require("devtools/shared/client/debugger-client");
/**
* Creates a tracing profiler client for the remote debugging protocol
* server. This client is a front to the trace actor created on the
* server side, hiding the protocol details in a traditional
* JavaScript API.
*
* @param client DebuggerClient
* The debugger client parent.
* @param actor string
* The actor ID for this thread.
*/
function TraceClient(client, actor) {
this._client = client;
this._actor = actor;
this._activeTraces = new Set();
this._waitingPackets = new Map();
this._expectedPacket = 0;
this.request = this._client.request;
this.events = [];
}
TraceClient.prototype = {
get actor() {
return this._actor;
},
get tracing() {
return this._activeTraces.size > 0;
},
get _transport() {
return this._client._transport;
},
/**
* Detach from the trace actor.
*/
detach: DebuggerClient.requester({
type: "detach"
}, {
after: function(response) {
this._client.unregisterClient(this);
return response;
},
}),
/**
* Start a new trace.
*
* @param trace [string]
* An array of trace types to be recorded by the new trace.
*
* @param name string
* The name of the new trace.
*
* @param onResponse function
* Called with the request's response.
*/
startTrace: DebuggerClient.requester({
type: "startTrace",
name: arg(1),
trace: arg(0)
}, {
after: function(response) {
if (response.error) {
return response;
}
if (!this.tracing) {
this._waitingPackets.clear();
this._expectedPacket = 0;
}
this._activeTraces.add(response.name);
return response;
},
}),
/**
* End a trace. If a name is provided, stop the named
* trace. Otherwise, stop the most recently started trace.
*
* @param name string
* The name of the trace to stop.
*
* @param onResponse function
* Called with the request's response.
*/
stopTrace: DebuggerClient.requester({
type: "stopTrace",
name: arg(0)
}, {
after: function(response) {
if (response.error) {
return response;
}
this._activeTraces.delete(response.name);
return response;
},
})
};
module.exports = TraceClient;