@embrace-io/web-sdk
Version:
63 lines (62 loc) • 3.56 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const require_constants_attributes = require("../../../constants/attributes.cjs");
const require_utils_performanceObserver_performanceObserver = require("../../../utils/performanceObserver/performanceObserver.cjs");
const require_instrumentations_EmbraceInstrumentationBase_EmbraceInstrumentationBase = require("../../EmbraceInstrumentationBase/EmbraceInstrumentationBase.cjs");
const require_instrumentations_element_timing_ElementTimingInstrumentation_constants = require("./constants.cjs");
//#region src/instrumentations/element-timing/ElementTimingInstrumentation/ElementTimingInstrumentation.ts
var ElementTimingInstrumentation = class extends require_instrumentations_EmbraceInstrumentationBase_EmbraceInstrumentationBase.EmbraceInstrumentationBase {
_observer = null;
constructor({ diag, perf, limitManager } = {}) {
super({
instrumentationName: "ElementTimingInstrumentation",
instrumentationVersion: "1.0.0",
diag,
perf,
limitManager,
config: {}
});
if (this._config.enabled) this.enable();
}
enable() {
if (require_utils_performanceObserver_performanceObserver.isEntryTypeSupported("element")) super.enable();
else this._diag.debug("element not supported, skipping");
}
onEnable() {
if (this._observer) this._observer.disconnect();
this._observer = require_utils_performanceObserver_performanceObserver.createPerformanceObserver("element", (entry) => this._processEntry(entry), { diag: this._diag });
if (!this._observer) {
this._isEnabled = false;
this._diag.error("failed to enable");
return;
}
}
onDisable() {
if (this._observer) {
this._observer.disconnect();
this._observer = null;
}
}
_processEntry(entry) {
if (!this._isEnabled) return;
if (this.limitManager?.limitElementTimingEntry()) return;
const span = this.tracer.startSpan(entry.identifier, {
startTime: this.perf.getZeroTime(),
attributes: {
[require_constants_attributes.KEY_EMB_TYPE]: "ux.element_timing",
[require_instrumentations_element_timing_ElementTimingInstrumentation_constants.KEY_EMB_ELEMENT_TIMING_IDENTIFIER]: entry.identifier,
[require_instrumentations_element_timing_ElementTimingInstrumentation_constants.KEY_EMB_ELEMENT_TIMING_ELEMENT]: entry.element?.tagName?.toLowerCase(),
[require_instrumentations_element_timing_ElementTimingInstrumentation_constants.KEY_EMB_ELEMENT_TIMING_RENDER_TIME]: this.perf.millisFromZeroTime(entry.renderTime),
[require_instrumentations_element_timing_ElementTimingInstrumentation_constants.KEY_EMB_ELEMENT_TIMING_LOAD_TIME]: this.perf.millisFromZeroTime(entry.loadTime),
[require_instrumentations_element_timing_ElementTimingInstrumentation_constants.KEY_EMB_ELEMENT_TIMING_START_TIME]: this.perf.millisFromZeroTime(entry.startTime),
[require_instrumentations_element_timing_ElementTimingInstrumentation_constants.KEY_EMB_ELEMENT_TIMING_URL]: entry.url,
[require_instrumentations_element_timing_ElementTimingInstrumentation_constants.KEY_EMB_ELEMENT_TIMING_NATURAL_WIDTH]: entry.naturalWidth,
[require_instrumentations_element_timing_ElementTimingInstrumentation_constants.KEY_EMB_ELEMENT_TIMING_NATURAL_HEIGHT]: entry.naturalHeight
}
});
if (entry.loadTime > 0) span.addEvent("load", this.perf.epochMillisFromOrigin(entry.loadTime));
span.end(this.perf.epochMillisFromOrigin(entry.startTime));
}
};
//#endregion
exports.ElementTimingInstrumentation = ElementTimingInstrumentation;
//# sourceMappingURL=ElementTimingInstrumentation.cjs.map