"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = void 0;
function _chromeTraceEvent() {
  const data = require("chrome-trace-event");
  _chromeTraceEvent = function () {
    return data;
  };
  return data;
}
class Trace {
  constructor() {
    this.tracer = new (_chromeTraceEvent().Tracer)();
    this.tid = 0;
    this.eventId = 0;
  }
  getEventId() {
    return this.eventId++;
  }
  init(ts) {
    this.tracer.instantEvent({
      name: 'TracingStartedInPage',
      id: this.getEventId(),
      ts,
      cat: ['disabled-by-default-devtools.timeline'],
      args: {
        data: {
          sessionId: '-1',
          page: '0xfff',
          frames: [{
            frame: '0xfff',
            url: 'parcel',
            name: ''
          }]
        }
      }
    });
    this.tracer.instantEvent({
      name: 'TracingStartedInBrowser',
      id: this.getEventId(),
      ts,
      cat: ['disabled-by-default-devtools.timeline'],
      args: {
        data: {
          sessionId: '-1'
        }
      }
    });
  }
  addCPUProfile(name, profile) {
    if (this.eventId === 0) {
      this.init(profile.startTime);
    }
    const trace = this.tracer;
    const tid = this.tid;
    this.tid++;
    const cpuStartTime = profile.startTime;
    const cpuEndTime = profile.endTime;
    trace.instantEvent({
      tid,
      id: this.getEventId(),
      cat: ['toplevel'],
      name: 'TaskQueueManager::ProcessTaskFromWorkQueue',
      args: {
        src_file: '../../ipc/ipc_moji_bootstrap.cc',
        src_func: 'Accept'
      },
      ts: cpuStartTime
    });
    trace.completeEvent({
      tid,
      name: 'EvaluateScript',
      id: this.getEventId(),
      cat: ['devtools.timeline'],
      ts: cpuStartTime,
      dur: cpuEndTime - cpuStartTime,
      args: {
        data: {
          url: 'parcel',
          lineNumber: 1,
          columnNumber: 1,
          frame: '0xFFF'
        }
      }
    });
    trace.instantEvent({
      tid,
      ts: 0,
      ph: 'M',
      cat: ['__metadata'],
      name: 'thread_name',
      args: {
        name
      }
    });
    trace.instantEvent({
      tid,
      name: 'CpuProfile',
      id: this.getEventId(),
      cat: ['disabled-by-default-devtools.timeline'],
      ts: cpuEndTime,
      args: {
        data: {
          cpuProfile: profile
        }
      }
    });
  }
  pipe(writable) {
    return this.tracer.pipe(writable);
  }
  flush() {
    this.tracer.push(null);
  }
}
exports.default = Trace;