@@ -57,14 +57,20 @@ const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
5757 * This defines the order these markers will be rendered if they are at the
5858 * same timestamp. The smaller number will be shown first - e.g. so if NavigationStart, MarkFCP,
5959 * MarkLCPCandidate have the same timestamp, visually we
60- * will render [Nav][FCP][LCP] everytime.
60+ * will render [Nav][FCP][DCL][ LCP] everytime.
6161 */
6262export const SORT_ORDER_PAGE_LOAD_MARKERS : Readonly < Record < string , number > > = {
6363 [ Trace . Types . Events . Name . NAVIGATION_START ] : 0 ,
64- [ Trace . Types . Events . Name . MARK_FCP ] : 1 ,
65- [ Trace . Types . Events . Name . MARK_LCP_CANDIDATE ] : 2 ,
64+ [ Trace . Types . Events . Name . MARK_LOAD ] : 1 ,
65+ [ Trace . Types . Events . Name . MARK_FCP ] : 2 ,
66+ [ Trace . Types . Events . Name . MARK_DOM_CONTENT ] : 3 ,
67+ [ Trace . Types . Events . Name . MARK_LCP_CANDIDATE ] : 4 ,
6668} ;
6769
70+ // Threshold to match up overlay markers that are off by a tiny amount so they aren't rendered
71+ // on top of each other.
72+ const TIMESTAMP_THRESHOLD_MS = Trace . Types . Timing . MicroSeconds ( 10 ) ;
73+
6874export class TimelineFlameChartView extends
6975 Common . ObjectWrapper . eventMixin < TimelineTreeView . EventTypes , typeof UI . Widget . VBox > ( UI . Widget . VBox )
7076 implements PerfUI . FlameChart . FlameChartDelegate , UI . SearchableView . Searchable {
@@ -466,33 +472,42 @@ export class TimelineFlameChartView extends
466472 // Clear out any markers.
467473 this . bulkRemoveOverlays ( this . #markers) ;
468474 const markerEvents = parsedTrace . PageLoadMetrics . allMarkerEvents ;
469- // Set markers for Navigations, LCP, FCP.
475+ // Set markers for Navigations, LCP, FCP, DCL, L .
470476 const markers = markerEvents . filter (
471477 event => event . name === Trace . Types . Events . Name . NAVIGATION_START ||
472478 event . name === Trace . Types . Events . Name . MARK_LCP_CANDIDATE ||
473- event . name === Trace . Types . Events . Name . MARK_FCP ) ;
479+ event . name === Trace . Types . Events . Name . MARK_FCP ||
480+ event . name === Trace . Types . Events . Name . MARK_DOM_CONTENT ||
481+ event . name === Trace . Types . Events . Name . MARK_LOAD ) ;
474482
475483 this . #sortMarkersForPreferredVisualOrder( markers ) ;
476- const markerOverlays : Overlays . Overlays . TimingsMarker [ ] = [ ] ;
477- markers . forEach ( ( marker , i ) => {
484+ const overlayByTs = new Map < Trace . Types . Timing . MicroSeconds , Overlays . Overlays . TimingsMarker > ( ) ;
485+ markers . forEach ( marker => {
478486 const adjustedTimestamp = Trace . Helpers . Timing . timeStampForEventAdjustedByClosestNavigation (
479487 marker ,
480488 parsedTrace . Meta . traceBounds ,
481489 parsedTrace . Meta . navigationsByNavigationId ,
482490 parsedTrace . Meta . navigationsByFrameId ,
483491 ) ;
484492 // If any of the markers overlap in timing, lets put them on the same marker.
485- if ( i > 0 && marker . ts === markerOverlays [ markerOverlays . length - 1 ] . entries [ 0 ] . ts ) {
486- markerOverlays [ markerOverlays . length - 1 ] . entries . push ( marker ) ;
487- return ;
493+ let matchingOverlay = false ;
494+ for ( const [ ts , overlay ] of overlayByTs . entries ( ) ) {
495+ if ( Math . abs ( marker . ts - ts ) <= TIMESTAMP_THRESHOLD_MS ) {
496+ overlay . entries . push ( marker ) ;
497+ matchingOverlay = true ;
498+ break ;
499+ }
500+ }
501+ if ( ! matchingOverlay ) {
502+ const overlay = {
503+ type : 'TIMINGS_MARKER' ,
504+ entries : [ marker ] ,
505+ adjustedTimestamp,
506+ } as Overlays . Overlays . TimingsMarker ;
507+ overlayByTs . set ( marker . ts , overlay ) ;
488508 }
489- const overlay = {
490- type : 'TIMINGS_MARKER' ,
491- entries : [ marker ] ,
492- adjustedTimestamp,
493- } as Overlays . Overlays . TimingsMarker ;
494- markerOverlays . push ( overlay ) ;
495509 } ) ;
510+ const markerOverlays : Overlays . Overlays . TimingsMarker [ ] = [ ...overlayByTs . values ( ) ] ;
496511 this . #markers = markerOverlays ;
497512 if ( this . #markers. length === 0 ) {
498513 return ;
0 commit comments