UNPKG

@embrace-io/web-sdk

Version:
1 lines 5.39 kB
{"version":3,"file":"ElementTimingInstrumentation.cjs","names":["EmbraceInstrumentationBase","isEntryTypeSupported","createPerformanceObserver","KEY_EMB_TYPE","KEY_EMB_ELEMENT_TIMING_IDENTIFIER","KEY_EMB_ELEMENT_TIMING_ELEMENT","KEY_EMB_ELEMENT_TIMING_RENDER_TIME","KEY_EMB_ELEMENT_TIMING_LOAD_TIME","KEY_EMB_ELEMENT_TIMING_START_TIME","KEY_EMB_ELEMENT_TIMING_URL","KEY_EMB_ELEMENT_TIMING_NATURAL_WIDTH","KEY_EMB_ELEMENT_TIMING_NATURAL_HEIGHT"],"sources":["../../../../src/instrumentations/element-timing/ElementTimingInstrumentation/ElementTimingInstrumentation.ts"],"sourcesContent":["import { EMB_TYPES, KEY_EMB_TYPE } from '../../../constants/index.ts';\nimport {\n createPerformanceObserver,\n isEntryTypeSupported,\n} from '../../../utils/index.ts';\nimport { EmbraceInstrumentationBase } from '../../EmbraceInstrumentationBase/index.ts';\nimport {\n KEY_EMB_ELEMENT_TIMING_ELEMENT,\n KEY_EMB_ELEMENT_TIMING_IDENTIFIER,\n KEY_EMB_ELEMENT_TIMING_LOAD_TIME,\n KEY_EMB_ELEMENT_TIMING_NATURAL_HEIGHT,\n KEY_EMB_ELEMENT_TIMING_NATURAL_WIDTH,\n KEY_EMB_ELEMENT_TIMING_RENDER_TIME,\n KEY_EMB_ELEMENT_TIMING_START_TIME,\n KEY_EMB_ELEMENT_TIMING_URL,\n} from './constants.ts';\nimport type {\n ElementTimingInstrumentationArgs,\n PerformanceElementTiming,\n} from './types.ts';\n\nexport class ElementTimingInstrumentation extends EmbraceInstrumentationBase {\n private _observer: PerformanceObserver | null = null;\n\n public constructor({\n diag,\n perf,\n limitManager,\n }: ElementTimingInstrumentationArgs = {}) {\n super({\n instrumentationName: 'ElementTimingInstrumentation',\n instrumentationVersion: '1.0.0',\n diag,\n perf,\n limitManager,\n config: {},\n });\n\n if (this._config.enabled) {\n this.enable();\n }\n }\n\n public override enable(): void {\n if (isEntryTypeSupported('element')) {\n super.enable();\n } else {\n this._diag.debug('element not supported, skipping');\n }\n }\n\n public override onEnable(): void {\n if (this._observer) {\n this._observer.disconnect();\n }\n\n this._observer = createPerformanceObserver<PerformanceElementTiming>(\n 'element',\n (entry) => this._processEntry(entry),\n { diag: this._diag },\n );\n\n if (!this._observer) {\n this._isEnabled = false;\n this._diag.error('failed to enable');\n return;\n }\n }\n\n public onDisable(): void {\n if (this._observer) {\n this._observer.disconnect();\n this._observer = null;\n }\n }\n\n private _processEntry(entry: PerformanceElementTiming): void {\n if (!this._isEnabled) {\n return;\n }\n\n if (this.limitManager?.limitElementTimingEntry()) {\n return;\n }\n\n const span = this.tracer.startSpan(entry.identifier, {\n // Span start anchors to the SDK's zero time (start of the current view) so the span\n // duration equals \"time since the user started viewing this page until the element\n // was rendered\" — useful for analyzing render timing relative to the current view.\n startTime: this.perf.getZeroTime(),\n attributes: {\n [KEY_EMB_TYPE]: EMB_TYPES.ElementTiming,\n [KEY_EMB_ELEMENT_TIMING_IDENTIFIER]: entry.identifier,\n [KEY_EMB_ELEMENT_TIMING_ELEMENT]: entry.element?.tagName?.toLowerCase(),\n [KEY_EMB_ELEMENT_TIMING_RENDER_TIME]: this.perf.millisFromZeroTime(\n entry.renderTime,\n ),\n [KEY_EMB_ELEMENT_TIMING_LOAD_TIME]: this.perf.millisFromZeroTime(\n entry.loadTime,\n ),\n [KEY_EMB_ELEMENT_TIMING_START_TIME]: this.perf.millisFromZeroTime(\n entry.startTime,\n ),\n [KEY_EMB_ELEMENT_TIMING_URL]: entry.url,\n [KEY_EMB_ELEMENT_TIMING_NATURAL_WIDTH]: entry.naturalWidth,\n [KEY_EMB_ELEMENT_TIMING_NATURAL_HEIGHT]: entry.naturalHeight,\n },\n });\n if (entry.loadTime > 0) {\n span.addEvent('load', this.perf.epochMillisFromOrigin(entry.loadTime));\n }\n // entry.startTime = renderTime if non-zero, else loadTime\n span.end(this.perf.epochMillisFromOrigin(entry.startTime));\n }\n}\n"],"mappings":";;;;;;AAqBA,IAAa,+BAAb,cAAkDA,+EAAAA,2BAA2B;CAC3E,YAAgD;CAEhD,YAAmB,EACjB,MACA,MACA,iBACoC,CAAC,GAAG;EACxC,MAAM;GACJ,qBAAqB;GACrB,wBAAwB;GACxB;GACA;GACA;GACA,QAAQ,CAAC;EACX,CAAC;EAED,IAAI,KAAK,QAAQ,SACf,KAAK,OAAO;CAEhB;CAEA,SAA+B;EAC7B,IAAIC,sDAAAA,qBAAqB,SAAS,GAChC,MAAM,OAAO;OAEb,KAAK,MAAM,MAAM,iCAAiC;CAEtD;CAEA,WAAiC;EAC/B,IAAI,KAAK,WACP,KAAK,UAAU,WAAW;EAG5B,KAAK,YAAYC,sDAAAA,0BACf,YACC,UAAU,KAAK,cAAc,KAAK,GACnC,EAAE,MAAM,KAAK,MAAM,CACrB;EAEA,IAAI,CAAC,KAAK,WAAW;GACnB,KAAK,aAAa;GAClB,KAAK,MAAM,MAAM,kBAAkB;GACnC;EACF;CACF;CAEA,YAAyB;EACvB,IAAI,KAAK,WAAW;GAClB,KAAK,UAAU,WAAW;GAC1B,KAAK,YAAY;EACnB;CACF;CAEA,cAAsB,OAAuC;EAC3D,IAAI,CAAC,KAAK,YACR;EAGF,IAAI,KAAK,cAAc,wBAAwB,GAC7C;EAGF,MAAM,OAAO,KAAK,OAAO,UAAU,MAAM,YAAY;GAInD,WAAW,KAAK,KAAK,YAAY;GACjC,YAAY;KACTC,6BAAAA,eAAAA;KACAC,+EAAAA,oCAAoC,MAAM;KAC1CC,+EAAAA,iCAAiC,MAAM,SAAS,SAAS,YAAY;KACrEC,+EAAAA,qCAAqC,KAAK,KAAK,mBAC9C,MAAM,UACR;KACCC,+EAAAA,mCAAmC,KAAK,KAAK,mBAC5C,MAAM,QACR;KACCC,+EAAAA,oCAAoC,KAAK,KAAK,mBAC7C,MAAM,SACR;KACCC,+EAAAA,6BAA6B,MAAM;KACnCC,+EAAAA,uCAAuC,MAAM;KAC7CC,+EAAAA,wCAAwC,MAAM;GACjD;EACF,CAAC;EACD,IAAI,MAAM,WAAW,GACnB,KAAK,SAAS,QAAQ,KAAK,KAAK,sBAAsB,MAAM,QAAQ,CAAC;EAGvE,KAAK,IAAI,KAAK,KAAK,sBAAsB,MAAM,SAAS,CAAC;CAC3D;AACF"}