@@ -969,38 +969,15 @@ export class TimelineUIUtils {
969969 }
970970 break ;
971971 }
972- case Trace . Types . Events . Name . PROFILE_CALL : {
973- details = document . createElement ( 'span' ) ;
974- // This check is only added for convenience with the type checker.
975- if ( ! Trace . Types . Events . isProfileCall ( event ) ) {
976- break ;
977- }
978- const maybeResolvedData = Utils . SourceMapsResolver . SourceMapsResolver . resolvedCodeLocationForEntry ( event ) ;
979- const functionName = maybeResolvedData ?. name || TimelineUIUtils . frameDisplayName ( event . callFrame ) ;
980- UI . UIUtils . createTextChild ( details , functionName ) ;
981- const location = this . linkifyLocation ( {
982- scriptId : event . callFrame [ 'scriptId' ] ,
983- url : event . callFrame [ 'url' ] ,
984- lineNumber : event . callFrame [ 'lineNumber' ] ,
985- columnNumber : event . callFrame [ 'columnNumber' ] ,
986- target,
987- isFreshRecording,
988- linkifier,
989- } ) ;
990- if ( location ) {
991- UI . UIUtils . createTextChild ( details , ' @ ' ) ;
992- details . appendChild ( location ) ;
993- }
994- break ;
995- }
996972
997973 default : {
998974 /**
999975 * Some events have a stack trace which is extracted by default at @see TimelineUIUtils.generateCauses
1000976 * thus, we prevent extracting the stack trace again here.
1001977 */
1002978 if ( Trace . Helpers . Trace . eventHasCategory ( event , Trace . Types . Events . Categories . Console ) ||
1003- Trace . Types . Events . isUserTiming ( event ) || Trace . Types . Extensions . isSyntheticExtensionEntry ( event ) ) {
979+ Trace . Types . Events . isUserTiming ( event ) || Trace . Types . Extensions . isSyntheticExtensionEntry ( event ) ||
980+ Trace . Types . Events . isProfileCall ( event ) ) {
1004981 detailsText = null ;
1005982 } else {
1006983 details = this . linkifyTopCallFrame ( event , target , linkifier , isFreshRecording ) ?? null ;
@@ -1684,7 +1661,8 @@ export class TimelineUIUtils {
16841661 }
16851662
16861663 const stackTrace = Trace . Helpers . Trace . getZeroIndexedStackTraceForEvent ( event ) ;
1687- if ( initiator || initiatorFor || stackTrace || parsedTrace ?. Invalidations . invalidationsForEvent . get ( event ) ) {
1664+ if ( Trace . Types . Events . isProfileCall ( event ) || initiator || initiatorFor || stackTrace ||
1665+ parsedTrace ?. Invalidations . invalidationsForEvent . get ( event ) ) {
16881666 await TimelineUIUtils . generateCauses ( event , contentHelper , parsedTrace ) ;
16891667 }
16901668
@@ -1872,13 +1850,26 @@ export class TimelineUIUtils {
18721850 return { callFrames} as Protocol . Runtime . StackTrace ;
18731851 }
18741852
1875- private static async generateCauses (
1853+ static async generateCauses (
18761854 event : Trace . Types . Events . Event , contentHelper : TimelineDetailsContentHelper ,
18771855 parsedTrace : Trace . Handlers . Types . ParsedTrace ) : Promise < void > {
18781856 const { startTime} = Trace . Helpers . Timing . eventTimingsMilliSeconds ( event ) ;
18791857 let initiatorStackLabel = i18nString ( UIStrings . initiatorStackTrace ) ;
18801858 let stackLabel = i18nString ( UIStrings . stackTrace ) ;
1881-
1859+ const stackTraceForEvent = Trace . Extras . StackTraceForEvent . get (
1860+ event , parsedTrace , { isIgnoreListedCallback : Utils . IgnoreList . isIgnoreListedEntry } ) ;
1861+ if ( Trace . Types . Events . isProfileCall ( event ) && stackTraceForEvent ) {
1862+ contentHelper . addSection ( i18nString ( UIStrings . stackTrace ) ) ;
1863+ contentHelper . createChildStackTraceElement ( stackTraceForEvent ) ;
1864+ // TODO(andoli): also build stack trace component for other events
1865+ // that have a stack trace using the StackTraceForEvent helper.
1866+ } else {
1867+ const stackTrace = Trace . Helpers . Trace . getZeroIndexedStackTraceForEvent ( event ) ;
1868+ if ( stackTrace && stackTrace . length ) {
1869+ contentHelper . addSection ( stackLabel ) ;
1870+ contentHelper . createChildStackTraceElement ( TimelineUIUtils . stackTraceFromCallFrames ( stackTrace ) ) ;
1871+ }
1872+ }
18821873 switch ( event . name ) {
18831874 case Trace . Types . Events . Name . TIMER_FIRE :
18841875 initiatorStackLabel = i18nString ( UIStrings . timerInstalled ) ;
@@ -1899,12 +1890,6 @@ export class TimelineUIUtils {
18991890 break ;
19001891 }
19011892
1902- const stackTrace = Trace . Helpers . Trace . getZeroIndexedStackTraceForEvent ( event ) ;
1903- if ( stackTrace && stackTrace . length ) {
1904- contentHelper . addSection ( stackLabel ) ;
1905- contentHelper . createChildStackTraceElement ( TimelineUIUtils . stackTraceFromCallFrames ( stackTrace ) ) ;
1906- }
1907-
19081893 const initiator = parsedTrace . Initiators . eventToInitiator . get ( event ) ;
19091894 const initiatorFor = parsedTrace . Initiators . initiatorToEvents . get ( event ) ;
19101895 const invalidations = parsedTrace . Invalidations . invalidationsForEvent . get ( event ) ;
@@ -2589,11 +2574,22 @@ export class TimelineDetailsContentHelper {
25892574 if ( ! this . linkifierInternal ) {
25902575 return ;
25912576 }
2592-
2577+ const resolvedStackTrace : Protocol . Runtime . StackTrace = structuredClone ( stackTrace ) ;
2578+ let currentResolvedStackTrace : Protocol . Runtime . StackTrace | undefined = resolvedStackTrace ;
2579+ while ( currentResolvedStackTrace ) {
2580+ currentResolvedStackTrace . callFrames = currentResolvedStackTrace . callFrames . map (
2581+ callFrame => ( {
2582+ ...callFrame ,
2583+ functionName :
2584+ Utils . SourceMapsResolver . SourceMapsResolver . resolvedCodeLocationForCallFrame ( callFrame ) ?. name ||
2585+ callFrame . functionName ,
2586+ } ) ) ;
2587+ currentResolvedStackTrace = currentResolvedStackTrace . parent ;
2588+ }
25932589 const stackTraceElement =
25942590 this . tableElement . createChild ( 'div' , 'timeline-details-view-row timeline-details-stack-values' ) ;
25952591 const callFrameContents = LegacyComponents . JSPresentationUtils . buildStackTracePreviewContents (
2596- this . target , this . linkifierInternal , { stackTrace, tabStops : true , showColumnNumber : true } ) ;
2592+ this . target , this . linkifierInternal , { stackTrace : resolvedStackTrace , tabStops : true , showColumnNumber : true } ) ;
25972593 stackTraceElement . appendChild ( callFrameContents . element ) ;
25982594 }
25992595}
0 commit comments