22// Use of this source code is governed by a BSD-style license that can be
33// found in the LICENSE file.
44
5- import { defaultTraceEvent } from '../../../testing/TraceHelpers.js' ;
65import { TraceLoader } from '../../../testing/TraceLoader.js' ;
76import * as Trace from '../trace.js' ;
87
98describe ( 'ScreenshotsHandler' , function ( ) {
10- const baseEvent = {
11- ...defaultTraceEvent ,
12- name : 'Screenshot' ,
13- // Ensure that the screenshots are held against the pid & tid values
14- // that match the Browser process and CrBrowserMain in defaultTraceEvents.
15- pid : Trace . Types . Events . ProcessID ( 8017 ) ,
16- tid : Trace . Types . Events . ThreadID ( 775 ) ,
17- ts : Trace . Types . Timing . Micro ( 0 ) ,
18- args : { } ,
19- cat : 'test' ,
20- ph : Trace . Types . Events . Phase . OBJECT_SNAPSHOT ,
21- } ;
22-
23- let baseEvents : readonly Trace . Types . Events . Event [ ] ;
24-
259 beforeEach ( async function ( ) {
26- // The screenshot handler requires the meta handler because it needs
27- // to know the browser process and thread IDs. Here, then, we reset
28- // and later we will pass events to the meta handler, otherwise the
29- // screenshots handler will fail.
3010 Trace . Handlers . ModelHandlers . Meta . reset ( ) ;
31-
3211 Trace . Handlers . ModelHandlers . Screenshots . reset ( ) ;
3312 } ) ;
13+ describe ( 'supporting old and new screenshot formats' , ( ) => {
14+ async function runHandler ( events : readonly Trace . Types . Events . Event [ ] ) {
15+ Trace . Helpers . SyntheticEvents . SyntheticEventsManager . createAndActivate ( events ) ;
3416
35- describe ( 'frames' , ( ) => {
36- it ( 'obtains them if present' , async function ( ) {
37- const defaultTraceEvents = await TraceLoader . rawEvents ( this , 'basic.json.gz' ) ;
38-
39- baseEvents = [
40- ...defaultTraceEvents ,
41- { ...baseEvent , ts : Trace . Types . Timing . Micro ( 100 ) } ,
42- { ...baseEvent , ts : Trace . Types . Timing . Micro ( 200 ) } ,
43- ] ;
44- Trace . Helpers . SyntheticEvents . SyntheticEventsManager . createAndActivate ( baseEvents ) ;
45-
46- for ( const event of baseEvents ) {
17+ for ( const event of events ) {
4718 Trace . Handlers . ModelHandlers . Meta . handleEvent ( event ) ;
4819 Trace . Handlers . ModelHandlers . Screenshots . handleEvent ( event ) ;
4920 }
5021
5122 await Trace . Handlers . ModelHandlers . Meta . finalize ( ) ;
5223 await Trace . Handlers . ModelHandlers . Screenshots . finalize ( ) ;
24+ }
25+
26+ it ( 'finds the screenshots in traces using the OBJECT_SNAPSHOT screenshot format' , async function ( ) {
27+ const events = await TraceLoader . rawEvents ( this , 'web-dev-with-commit.json.gz' ) ;
28+ await runHandler ( events ) ;
29+ const data = Trace . Handlers . ModelHandlers . Screenshots . data ( ) ;
30+ assert . isOk ( data . legacySyntheticScreenshots ) ;
31+ assert . isNull ( data . screenshots ) ;
32+ assert . lengthOf ( data . legacySyntheticScreenshots , 18 ) ;
33+ } ) ;
5334
54- const data = Trace . Handlers . ModelHandlers . Screenshots . data ( ) . all ;
55- assert . lengthOf ( data , 2 ) ;
35+ // TODO: leave explainer comment here
36+ it ( 'finds the screenshots in traces using the new instant event screenshot format' , async function ( ) {
37+ const events = await TraceLoader . rawEvents ( this , 'web-dev-screenshot-source-ids.json.gz' ) ;
38+ await runHandler ( events ) ;
39+ const data = Trace . Handlers . ModelHandlers . Screenshots . data ( ) ;
40+ assert . isOk ( data . screenshots ) ;
41+ assert . isNull ( data . legacySyntheticScreenshots ) ;
42+ assert . lengthOf ( data . screenshots , 20 ) ;
5643 } ) ;
5744 } ) ;
5845
5946 describe ( 'presentation timestamps' , ( ) => {
6047 function getMsDifferences (
61- syntheticScreenshots : Trace . Types . Events . SyntheticScreenshot [ ] ,
62- originalScreenshotEvents : Trace . Types . Events . Screenshot [ ] ) : number [ ] {
48+ syntheticScreenshots : Trace . Types . Events . LegacySyntheticScreenshot [ ] ,
49+ originalScreenshotEvents : Trace . Types . Events . LegacyScreenshot [ ] ) : number [ ] {
6350 return syntheticScreenshots . map ( ( synEvent , i ) => {
64- const origEvent = originalScreenshotEvents . at ( i ) as Trace . Types . Events . Screenshot ;
51+ const origEvent = originalScreenshotEvents . at ( i ) as Trace . Types . Events . LegacyScreenshot ;
6552 const msDifference = ( synEvent . ts - origEvent . ts ) / 1000 ;
6653 return msDifference ;
6754 } ) ;
@@ -77,8 +64,9 @@ describe('ScreenshotsHandler', function() {
7764 await Trace . Handlers . ModelHandlers . Meta . finalize ( ) ;
7865 await Trace . Handlers . ModelHandlers . Screenshots . finalize ( ) ;
7966
80- const syntheticScreenshots = Trace . Handlers . ModelHandlers . Screenshots . data ( ) . all ;
81- const originalScreenshotEvents = events . filter ( Trace . Types . Events . isScreenshot ) ;
67+ const syntheticScreenshots = Trace . Handlers . ModelHandlers . Screenshots . data ( ) . legacySyntheticScreenshots ;
68+ assert . isOk ( syntheticScreenshots ) ;
69+ const originalScreenshotEvents = events . filter ( Trace . Types . Events . isLegacyScreenshot ) ;
8270 assert . strictEqual ( syntheticScreenshots . length , originalScreenshotEvents . length ) ;
8371
8472 for ( const oEvent of originalScreenshotEvents ) {
@@ -103,8 +91,9 @@ describe('ScreenshotsHandler', function() {
10391 await Trace . Handlers . ModelHandlers . Meta . finalize ( ) ;
10492 await Trace . Handlers . ModelHandlers . Screenshots . finalize ( ) ;
10593
106- const syntheticScreenshots = Trace . Handlers . ModelHandlers . Screenshots . data ( ) . all ;
107- const originalScreenshotEvents = events . filter ( Trace . Types . Events . isScreenshot ) ;
94+ const syntheticScreenshots = Trace . Handlers . ModelHandlers . Screenshots . data ( ) . legacySyntheticScreenshots ;
95+ const originalScreenshotEvents = events . filter ( Trace . Types . Events . isLegacyScreenshot ) ;
96+ assert . isOk ( syntheticScreenshots ) ;
10897 assert . strictEqual ( syntheticScreenshots . length , originalScreenshotEvents . length ) ;
10998
11099 for ( const oEvent of originalScreenshotEvents ) {
0 commit comments