UNPKG

@embrace-io/web-sdk

Version:
63 lines (62 loc) 3.56 kB
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