animate/webGl/my-threejs-test/node_modules/@parcel/profiler/lib/Tracer.js

131 lines
2.8 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.tracer = exports.default = exports.PluginTracer = void 0;
function _events() {
const data = require("@parcel/events");
_events = function () {
return data;
};
return data;
}
function _perf_hooks() {
const data = require("perf_hooks");
_perf_hooks = function () {
return data;
};
return data;
}
// @ts-ignore
let tid;
try {
tid = require('worker_threads').threadId;
} catch {
tid = 0;
}
const pid = process.pid;
class TraceMeasurement {
#active = true;
#name;
#pid;
#tid;
#start;
// $FlowFixMe
#data;
constructor(tracer, name, pid, tid, data) {
this.#name = name;
this.#pid = pid;
this.#tid = tid;
this.#start = _perf_hooks().performance.now();
this.#data = data;
}
end() {
if (!this.#active) return;
const duration = _perf_hooks().performance.now() - this.#start;
tracer.trace({
type: 'trace',
name: this.#name,
pid: this.#pid,
tid: this.#tid,
duration,
ts: this.#start,
...this.#data
});
this.#active = false;
}
}
class Tracer {
#traceEmitter = new (_events().ValueEmitter)();
#enabled = false;
onTrace(cb) {
return this.#traceEmitter.addListener(cb);
}
async wrap(name, fn) {
let measurement = this.createMeasurement(name);
try {
await fn();
} finally {
measurement && measurement.end();
}
}
createMeasurement(name, category = 'Core', argumentName, otherArgs) {
if (!this.enabled) return null;
// We create `args` in a fairly verbose way to avoid object
// allocation where not required.
let args;
if (typeof argumentName === 'string') {
args = {
name: argumentName
};
}
if (typeof otherArgs === 'object') {
if (typeof args == 'undefined') {
args = {};
}
for (const [k, v] of Object.entries(otherArgs)) {
args[k] = v;
}
}
const data = {
categories: [category],
args
};
return new TraceMeasurement(this, name, pid, tid, data);
}
get enabled() {
return this.#enabled;
}
enable() {
this.#enabled = true;
}
disable() {
this.#enabled = false;
}
trace(event) {
if (!this.#enabled) return;
this.#traceEmitter.emit(event);
}
}
exports.default = Tracer;
const tracer = exports.tracer = new Tracer();
class PluginTracer {
/** @private */
/** @private */
/** @private */
constructor(opts) {
this.origin = opts.origin;
this.category = opts.category;
}
get enabled() {
return tracer.enabled;
}
createMeasurement(name, category, argumentName, otherArgs) {
return tracer.createMeasurement(name, `${this.category}:${this.origin}${typeof category === 'string' ? `:${category}` : ''}`, argumentName, otherArgs);
}
}
exports.PluginTracer = PluginTracer;