Tracer = function() {
  // TODO(benvanik): make an option?
  var port = 9222;
  var url = 'ws://localhost:' + port + '/devtools/browser';

  /**
   * Target remote debugging port URL.
   * @type {string}
   * @private
   */
  this.url_ = url;

  /**
   * Whether tracing is available at all.
   * @type {boolean}
   * @private
   */
  this.available_ = false;

  /**
   * Whether the tracing is active.
   * @type {boolean}
   * @private
   */
  this.active_ = false;

  /**
   * Tab ID that requested the tracing.
   * This is used to shut down tracing when the tab closes.
   * @type {number|undefined}
   * @private
   */
  this.requestingTabId_ = undefined;

  /**
   * Next request ID.
   * @type {number}
   * @private
   */
  this.nextRequestId_ = 0;

  /**
   * Pending get requests.
   * @type {!Array.<{callback: function(Object), scope: Object}>}
   * @private
   */
  this.pendingGets_ = [];

  /**
   * Data buffer.
   * @type {!Array.<string>}
   * @private
   */
  this.dataBuffer_ = [];

  /**
   * Web socket connected to the browser debug channel.
   * @type {WebSocket}
   * @private
   */
  this.socket_ = null;

  /**
   * Current number of connection attempts.
   * @type {number}
   * @private
   */
  this.connectionAttempts_ = 0;

  this.attemptConnection_();
}
Tracing data proxy.
This allows a tab to enable chrome:tracing data in its session using the
remote debugger API. The Chrome instance must have been launched with
--remote-debugging-port=9222.

@constructor