@@ -64,15 +64,15 @@ describeWithEnvironment('TimelineFlameChartView', function() {
6464 } ) ;
6565
6666 it ( 'Can search for events by name in the timeline' , async function ( ) {
67- const { parsedTrace} = await TraceLoader . traceEngine ( this , 'lcp-images.json.gz' ) ;
67+ const { parsedTrace, metadata } = await TraceLoader . traceEngine ( this , 'lcp-images.json.gz' ) ;
6868 // The timeline flamechart view will invoke the `select` method
6969 // of this delegate every time an event has matched on a search.
7070 const mockViewDelegate = new MockViewDelegate ( ) ;
7171
7272 const flameChartView = new Timeline . TimelineFlameChartView . TimelineFlameChartView ( mockViewDelegate ) ;
7373 const searchableView = new UI . SearchableView . SearchableView ( flameChartView , null ) ;
7474 flameChartView . setSearchableView ( searchableView ) ;
75- flameChartView . setModel ( parsedTrace ) ;
75+ flameChartView . setModel ( parsedTrace , metadata ) ;
7676
7777 const searchQuery = 'Paint' ;
7878 const searchConfig =
@@ -103,15 +103,15 @@ describeWithEnvironment('TimelineFlameChartView', function() {
103103 } ) ;
104104
105105 it ( 'can search across both flame charts for events' , async function ( ) {
106- const { parsedTrace} = await TraceLoader . traceEngine ( this , 'web-dev-with-commit.json.gz' ) ;
106+ const { parsedTrace, metadata } = await TraceLoader . traceEngine ( this , 'web-dev-with-commit.json.gz' ) ;
107107 // The timeline flamechart view will invoke the `select` method
108108 // of this delegate every time an event has matched on a search.
109109 const mockViewDelegate = new MockViewDelegate ( ) ;
110110
111111 const flameChartView = new Timeline . TimelineFlameChartView . TimelineFlameChartView ( mockViewDelegate ) ;
112112 const searchableView = new UI . SearchableView . SearchableView ( flameChartView , null ) ;
113113 flameChartView . setSearchableView ( searchableView ) ;
114- flameChartView . setModel ( parsedTrace ) ;
114+ flameChartView . setModel ( parsedTrace , metadata ) ;
115115
116116 const searchQuery = 'app.js' ;
117117 const searchConfig =
@@ -129,35 +129,35 @@ describeWithEnvironment('TimelineFlameChartView', function() {
129129 // This test is still failing after bumping up the timeout to 20 seconds. So
130130 // skip it while we work on a fix for the trace load speed.
131131 it . skip ( '[crbug.com/1492405] Shows the network track correctly' , async function ( ) {
132- const { parsedTrace} = await TraceLoader . traceEngine ( this , 'load-simple.json.gz' ) ;
132+ const { parsedTrace, metadata } = await TraceLoader . traceEngine ( this , 'load-simple.json.gz' ) ;
133133 // The timeline flamechart view will invoke the `select` method
134134 // of this delegate every time an event has matched on a search.
135135 const mockViewDelegate = new MockViewDelegate ( ) ;
136136
137137 const flameChartView = new Timeline . TimelineFlameChartView . TimelineFlameChartView ( mockViewDelegate ) ;
138- flameChartView . setModel ( parsedTrace ) ;
138+ flameChartView . setModel ( parsedTrace , metadata ) ;
139139
140140 assert . isTrue ( flameChartView . isNetworkTrackShownForTests ( ) ) ;
141141 } ) ;
142142
143143 it ( 'Does not show the network track when there is no network request' , async function ( ) {
144- const { parsedTrace} = await TraceLoader . traceEngine ( this , 'basic.json.gz' ) ;
144+ const { parsedTrace, metadata } = await TraceLoader . traceEngine ( this , 'basic.json.gz' ) ;
145145 // The timeline flamechart view will invoke the `select` method
146146 // of this delegate every time an event has matched on a search.
147147 const mockViewDelegate = new MockViewDelegate ( ) ;
148148
149149 const flameChartView = new Timeline . TimelineFlameChartView . TimelineFlameChartView ( mockViewDelegate ) ;
150- flameChartView . setModel ( parsedTrace ) ;
150+ flameChartView . setModel ( parsedTrace , metadata ) ;
151151
152152 assert . isFalse ( flameChartView . isNetworkTrackShownForTests ( ) ) ;
153153 } ) ;
154154
155155 it ( 'Adds Hidden Descendants Arrow as a decoration when a Context Menu action is applied on a node' , async function ( ) {
156- const { parsedTrace} = await TraceLoader . traceEngine ( this , 'load-simple.json.gz' ) ;
156+ const { parsedTrace, metadata } = await TraceLoader . traceEngine ( this , 'load-simple.json.gz' ) ;
157157 const mockViewDelegate = new MockViewDelegate ( ) ;
158158
159159 const flameChartView = new Timeline . TimelineFlameChartView . TimelineFlameChartView ( mockViewDelegate ) ;
160- flameChartView . setModel ( parsedTrace ) ;
160+ flameChartView . setModel ( parsedTrace , metadata ) ;
161161
162162 // Find the main track to later collapse entries of
163163 const mainTrack = flameChartView . getMainFlameChart ( ) . timelineData ( ) ?. groups . find ( group => {
@@ -194,11 +194,11 @@ describeWithEnvironment('TimelineFlameChartView', function() {
194194
195195 it ( 'Adds Hidden Descendants Arrow as a decoration when a Context Menu action is applied on a selected node with a key shortcut event' ,
196196 async function ( ) {
197- const { parsedTrace} = await TraceLoader . traceEngine ( this , 'load-simple.json.gz' ) ;
197+ const { parsedTrace, metadata } = await TraceLoader . traceEngine ( this , 'load-simple.json.gz' ) ;
198198 const mockViewDelegate = new MockViewDelegate ( ) ;
199199
200200 const flameChartView = new Timeline . TimelineFlameChartView . TimelineFlameChartView ( mockViewDelegate ) ;
201- flameChartView . setModel ( parsedTrace ) ;
201+ flameChartView . setModel ( parsedTrace , metadata ) ;
202202
203203 // Find the main track to later collapse entries of
204204 const mainTrack = flameChartView . getMainFlameChart ( ) . timelineData ( ) ?. groups . find ( group => {
@@ -238,11 +238,11 @@ describeWithEnvironment('TimelineFlameChartView', function() {
238238
239239 it ( 'Removes Hidden Descendants Arrow as a decoration when Reset Children action is applied on a node' ,
240240 async function ( ) {
241- const { parsedTrace} = await TraceLoader . traceEngine ( this , 'load-simple.json.gz' ) ;
241+ const { parsedTrace, metadata } = await TraceLoader . traceEngine ( this , 'load-simple.json.gz' ) ;
242242 const mockViewDelegate = new MockViewDelegate ( ) ;
243243
244244 const flameChartView = new Timeline . TimelineFlameChartView . TimelineFlameChartView ( mockViewDelegate ) ;
245- flameChartView . setModel ( parsedTrace ) ;
245+ flameChartView . setModel ( parsedTrace , metadata ) ;
246246 Timeline . ModificationsManager . ModificationsManager . activeManager ( ) ;
247247
248248 // Find the main track to later collapse entries of
@@ -292,16 +292,43 @@ describeWithEnvironment('TimelineFlameChartView', function() {
292292 assert . isUndefined ( decorationsForEntry ) ;
293293 } ) ;
294294
295+ it ( 'renders metrics as marker overlays w/ tooltips' , async function ( ) {
296+ const { parsedTrace, metadata} = await TraceLoader . traceEngine ( this , 'crux.json.gz' ) ;
297+ const mockViewDelegate = new MockViewDelegate ( ) ;
298+
299+ const flameChartView = new Timeline . TimelineFlameChartView . TimelineFlameChartView ( mockViewDelegate ) ;
300+ flameChartView . setModel ( parsedTrace , metadata ) ;
301+
302+ const tooltips =
303+ [ ...flameChartView . element . querySelectorAll ( '.overlay-type-TIMINGS_MARKER .marker-title' ) ] . map ( el => {
304+ el ?. dispatchEvent ( new MouseEvent ( 'mousemove' , {
305+ clientX : 0 ,
306+ clientY : 0 ,
307+ } ) ) ;
308+ return flameChartView . element . querySelector ( '.timeline-entry-tooltip-element' )
309+ ?. textContent ?. replaceAll ( '\xa0' , ' ' ) ;
310+ } ) ;
311+
312+ assert . deepEqual ( tooltips , [
313+ '0 μsNav' ,
314+ '43.98 msL' ,
315+ '75.90 msFCP - Local939.00 msFCP - Field (URL)' ,
316+ '75.90 msLCP - Local936.00 msLCP - Field (URL)' ,
317+ '43.75 msDCL' ,
318+ ] ) ;
319+ } ) ;
320+
295321 describe ( 'Context Menu' , function ( ) {
296322 let flameChartView : Timeline . TimelineFlameChartView . TimelineFlameChartView ;
297323 let parsedTrace : Trace . Handlers . Types . ParsedTrace ;
324+ let metadata : Trace . Types . File . MetaData | null ;
298325
299326 this . beforeEach ( async ( ) => {
300- ( { parsedTrace} = await TraceLoader . traceEngine ( this , 'recursive-blocking-js.json.gz' ) ) ;
327+ ( { parsedTrace, metadata } = await TraceLoader . traceEngine ( this , 'recursive-blocking-js.json.gz' ) ) ;
301328 const mockViewDelegate = new MockViewDelegate ( ) ;
302329
303330 flameChartView = new Timeline . TimelineFlameChartView . TimelineFlameChartView ( mockViewDelegate ) ;
304- flameChartView . setModel ( parsedTrace ) ;
331+ flameChartView . setModel ( parsedTrace , metadata ) ;
305332 Timeline . ModificationsManager . ModificationsManager . activeManager ( ) ;
306333 } ) ;
307334
@@ -753,13 +780,14 @@ describeWithEnvironment('TimelineFlameChartView', function() {
753780 describe ( 'Link between entries annotation in progress' , function ( ) {
754781 let flameChartView : Timeline . TimelineFlameChartView . TimelineFlameChartView ;
755782 let parsedTrace : Trace . Handlers . Types . ParsedTrace ;
783+ let metadata : Trace . Types . File . MetaData | null ;
756784
757785 this . beforeEach ( async ( ) => {
758- ( { parsedTrace} = await TraceLoader . traceEngine ( this , 'recursive-blocking-js.json.gz' ) ) ;
786+ ( { parsedTrace, metadata } = await TraceLoader . traceEngine ( this , 'recursive-blocking-js.json.gz' ) ) ;
759787 const mockViewDelegate = new MockViewDelegate ( ) ;
760788
761789 flameChartView = new Timeline . TimelineFlameChartView . TimelineFlameChartView ( mockViewDelegate ) ;
762- flameChartView . setModel ( parsedTrace ) ;
790+ flameChartView . setModel ( parsedTrace , metadata ) ;
763791 Timeline . ModificationsManager . ModificationsManager . activeManager ( ) ;
764792 } ) ;
765793
0 commit comments