@@ -43,6 +43,12 @@ export function startTrackingElementTiming(): () => void {
43
43
* exported only for testing
44
44
*/
45
45
export const _onElementTiming = ( { entries } : { entries : PerformanceEntry [ ] } ) : void => {
46
+ const activeSpan = getActiveSpan ( ) ;
47
+ const rootSpan = activeSpan ? getRootSpan ( activeSpan ) : undefined ;
48
+ const transactionName = rootSpan
49
+ ? spanToJSON ( rootSpan ) . description
50
+ : getCurrentScope ( ) . getScopeData ( ) . transactionName ;
51
+
46
52
entries . forEach ( entry => {
47
53
const elementEntry = entry as PerformanceElementTiming ;
48
54
@@ -63,11 +69,11 @@ export const _onElementTiming = ({ entries }: { entries: PerformanceEntry[] }):
63
69
// - `renderTime` if available (available for all entries, except 3rd party images, but these should be covered by `loadTime`, 0 otherwise)
64
70
// - `timestampInSeconds()` as a safeguard
65
71
// see https://developer.mozilla.org/en-US/docs/Web/API/PerformanceElementTiming/renderTime#cross-origin_image_render_time
66
- const { spanStartTime, spanStartTimeSource } = loadTime
67
- ? { spanStartTime : msToSec ( loadTime ) , spanStartTimeSource : 'load-time' }
72
+ const [ spanStartTime , spanStartTimeSource ] = loadTime
73
+ ? [ msToSec ( loadTime ) , 'load-time' ]
68
74
: renderTime
69
- ? { spanStartTime : msToSec ( renderTime ) , spanStartTimeSource : 'render-time' }
70
- : { spanStartTime : timestampInSeconds ( ) , spanStartTimeSource : 'entry-emission' } ;
75
+ ? [ msToSec ( renderTime ) , 'render-time' ]
76
+ : [ timestampInSeconds ( ) , 'entry-emission' ] ;
71
77
72
78
const duration =
73
79
paintType === 'image-paint'
@@ -78,30 +84,26 @@ export const _onElementTiming = ({ entries }: { entries: PerformanceEntry[] }):
78
84
: // for `'text-paint'` entries, we can't get a duration because the `loadTime` is always zero.
79
85
0 ;
80
86
81
- const activeSpan = getActiveSpan ( ) ;
82
- const rootSpan = activeSpan ? getRootSpan ( activeSpan ) : undefined ;
83
- const route = rootSpan ? spanToJSON ( rootSpan ) . description : getCurrentScope ( ) . getScopeData ( ) . transactionName ;
84
-
85
87
const attributes : SpanAttributes = {
86
88
[ SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN ] : 'auto.ui.browser.elementtiming' ,
87
89
[ SEMANTIC_ATTRIBUTE_SENTRY_OP ] : 'ui.elementtiming' ,
88
90
// name must be user-entered, so we can assume low cardinality
89
91
[ SEMANTIC_ATTRIBUTE_SENTRY_SOURCE ] : 'component' ,
90
92
// recording the source of the span start time, as it varies depending on available data
91
- 'sentry.span-start-time-source ' : spanStartTimeSource ,
92
- route ,
93
-
93
+ 'sentry.span_start_time_source ' : spanStartTimeSource ,
94
+ 'sentry.transaction_name' : transactionName ,
95
+ 'element.id' : elementEntry . id ,
94
96
'element.type' : elementEntry . element ?. tagName ?. toLowerCase ( ) || 'unknown' ,
95
97
'element.size' :
96
98
elementEntry . naturalWidth && elementEntry . naturalHeight
97
99
? `${ elementEntry . naturalWidth } x${ elementEntry . naturalHeight } `
98
100
: undefined ,
99
- 'element.render-time ' : renderTime ,
100
- 'element.load-time ' : loadTime ,
101
+ 'element.render_time ' : renderTime ,
102
+ 'element.load_time ' : loadTime ,
101
103
// `url` is `0`(number) for text paints (hence we fall back to undefined)
102
104
'element.url' : elementEntry . url || undefined ,
103
105
'element.identifier' : elementEntry . identifier ,
104
- 'element.paint-type ' : paintType ,
106
+ 'element.paint_type ' : paintType ,
105
107
} ;
106
108
107
109
startSpan (
0 commit comments