@@ -22,10 +22,16 @@ import {
22
22
OOB_TRACE_PAGE_LOAD_PREFIX ,
23
23
FIRST_PAINT_COUNTER_NAME ,
24
24
FIRST_CONTENTFUL_PAINT_COUNTER_NAME ,
25
- FIRST_INPUT_DELAY_COUNTER_NAME
25
+ FIRST_INPUT_DELAY_COUNTER_NAME ,
26
+ LARGEST_CONTENTFUL_PAINT_METRIC_NAME ,
27
+ LARGEST_CONTENTFUL_PAINT_ATTRIBUTE_NAME ,
28
+ INTERACTION_TO_NEXT_PAINT_METRIC_NAME ,
29
+ INTERACTION_TO_NEXT_PAINT_ATTRIBUTE_NAME ,
30
+ CUMULATIVE_LAYOUT_SHIFT_METRIC_NAME ,
31
+ CUMULATIVE_LAYOUT_SHIFT_ATTRIBUTE_NAME
26
32
} from '../constants' ;
27
33
import { Api } from '../services/api_service' ;
28
- import { logTrace } from '../services/perf_logger' ;
34
+ import { logTrace , flushLogs } from '../services/perf_logger' ;
29
35
import { ERROR_FACTORY , ErrorCode } from '../utils/errors' ;
30
36
import {
31
37
isValidCustomAttributeName ,
@@ -37,6 +43,7 @@ import {
37
43
} from '../utils/metric_utils' ;
38
44
import { PerformanceTrace } from '../public_types' ;
39
45
import { PerformanceController } from '../controllers/perf' ;
46
+ import { CoreVitalMetric , WebVitalMetrics } from './web_vitals' ;
40
47
41
48
const enum TraceState {
42
49
UNINITIALIZED = 1 ,
@@ -279,6 +286,7 @@ export class Trace implements PerformanceTrace {
279
286
performanceController : PerformanceController ,
280
287
navigationTimings : PerformanceNavigationTiming [ ] ,
281
288
paintTimings : PerformanceEntry [ ] ,
289
+ webVitalMetrics : WebVitalMetrics ,
282
290
firstInputDelay ?: number
283
291
) : void {
284
292
const route = Api . getInstance ( ) . getUrl ( ) ;
@@ -340,7 +348,43 @@ export class Trace implements PerformanceTrace {
340
348
}
341
349
}
342
350
351
+ this . addWebVitalMetric (
352
+ trace ,
353
+ LARGEST_CONTENTFUL_PAINT_METRIC_NAME ,
354
+ LARGEST_CONTENTFUL_PAINT_ATTRIBUTE_NAME ,
355
+ webVitalMetrics . lcp
356
+ ) ;
357
+ this . addWebVitalMetric (
358
+ trace ,
359
+ CUMULATIVE_LAYOUT_SHIFT_METRIC_NAME ,
360
+ CUMULATIVE_LAYOUT_SHIFT_ATTRIBUTE_NAME ,
361
+ webVitalMetrics . cls
362
+ ) ;
363
+ this . addWebVitalMetric (
364
+ trace ,
365
+ INTERACTION_TO_NEXT_PAINT_METRIC_NAME ,
366
+ INTERACTION_TO_NEXT_PAINT_ATTRIBUTE_NAME ,
367
+ webVitalMetrics . inp
368
+ ) ;
369
+
370
+ // Page load logs are sent at unload time and so should be logged and
371
+ // flushed immediately.
343
372
logTrace ( trace ) ;
373
+ flushLogs ( ) ;
374
+ }
375
+
376
+ static addWebVitalMetric (
377
+ trace : Trace ,
378
+ metricKey : string ,
379
+ attributeKey : string ,
380
+ metric ?: CoreVitalMetric
381
+ ) : void {
382
+ if ( metric ) {
383
+ trace . putMetric ( metricKey , Math . floor ( metric . value * 1000 ) ) ;
384
+ if ( metric . elementAttribution ) {
385
+ trace . putAttribute ( attributeKey , metric . elementAttribution ) ;
386
+ }
387
+ }
344
388
}
345
389
346
390
static createUserTimingTrace (
0 commit comments