@@ -62,7 +62,6 @@ type RecordingState = {
6262 recording : boolean ;
6363 callIds : Set < string > ;
6464 groupStack : string [ ] ;
65- groupId : number ;
6665} ;
6766
6867const kScreencastOptions = { width : 800 , height : 600 , quality : 90 } ;
@@ -151,7 +150,6 @@ export class Tracing extends SdkObject implements InstrumentationListener, Snaps
151150 recording : false ,
152151 callIds : new Set ( ) ,
153152 groupStack : [ ] ,
154- groupId : 0 ,
155153 } ;
156154 this . _fs . mkdir ( this . _state . resourcesDir ) ;
157155 this . _fs . writeFile ( this . _state . networkFile , '' ) ;
@@ -198,23 +196,27 @@ export class Tracing extends SdkObject implements InstrumentationListener, Snaps
198196 return { traceName : this . _state . traceName } ;
199197 }
200198
201- async group ( name : string , options : { location ?: { file : string , line ?: number , column ?: number } } = { } ) : Promise < void > {
199+ async group ( name : string , options : { location ?: { file : string , line ?: number , column ?: number } } = { } , metadata : CallMetadata ) : Promise < void > {
202200 if ( ! this . _state )
203201 return ;
204- const stackFrame : StackFrame = {
205- file : options . location ?. file || '' ,
206- line : options . location ?. line || 0 ,
207- column : options . location ?. column || 0 ,
208- } ;
202+ const stackFrames : StackFrame [ ] = [ ] ;
203+ const { file, line, column } = options . location ?? metadata . location ?? { } ;
204+ if ( file ) {
205+ stackFrames . push ( {
206+ file,
207+ line : line ?? 0 ,
208+ column : column ?? 0 ,
209+ } ) ;
210+ }
209211 const event : trace . BeforeActionTraceEvent = {
210212 type : 'before' ,
211- callId : `group- ${ this . _state . groupId ++ } ` ,
212- startTime : monotonicTime ( ) ,
213+ callId : metadata . id ,
214+ startTime : metadata . startTime ,
213215 apiName : name ,
214216 class : 'Tracing' ,
215217 method : 'group' ,
216218 params : { } ,
217- stack : [ stackFrame ] ,
219+ stack : stackFrames ,
218220 } ;
219221 if ( this . _state . groupStack . length )
220222 event . parentId = this . _state . groupStack [ this . _state . groupStack . length - 1 ] ;
@@ -403,22 +405,19 @@ export class Tracing extends SdkObject implements InstrumentationListener, Snaps
403405
404406 onBeforeCall ( sdkObject : SdkObject , metadata : CallMetadata ) {
405407 // IMPORTANT: no awaits before this._appendTraceEvent in this method.
406- const event = createBeforeActionTraceEvent ( metadata ) ;
408+ const event = createBeforeActionTraceEvent (
409+ metadata ,
410+ this . _state ?. groupStack . length ? this . _state . groupStack [ this . _state . groupStack . length - 1 ] : undefined
411+ ) ;
407412 if ( ! event )
408413 return Promise . resolve ( ) ;
409- this . _applyOpenGroup ( event ) ;
410414 sdkObject . attribution . page ?. temporarilyDisableTracingScreencastThrottling ( ) ;
411415 event . beforeSnapshot = `before@${ metadata . id } ` ;
412416 this . _state ?. callIds . add ( metadata . id ) ;
413417 this . _appendTraceEvent ( event ) ;
414418 return this . _captureSnapshot ( event . beforeSnapshot , sdkObject , metadata ) ;
415419 }
416420
417- private _applyOpenGroup ( event : trace . BeforeActionTraceEvent ) {
418- if ( event . parentId === undefined && this . _state ?. groupStack . length )
419- event . parentId = this . _state ?. groupStack [ this . _state . groupStack . length - 1 ] ;
420- }
421-
422421 onBeforeInputAction ( sdkObject : SdkObject , metadata : CallMetadata ) {
423422 if ( ! this . _state ?. callIds . has ( metadata . id ) )
424423 return Promise . resolve ( ) ;
@@ -626,10 +625,10 @@ export function shouldCaptureSnapshot(metadata: CallMetadata): boolean {
626625 return commandsWithTracingSnapshots . has ( metadata . type + '.' + metadata . method ) ;
627626}
628627
629- function createBeforeActionTraceEvent ( metadata : CallMetadata ) : trace . BeforeActionTraceEvent | null {
628+ function createBeforeActionTraceEvent ( metadata : CallMetadata , parentId ?: string ) : trace . BeforeActionTraceEvent | null {
630629 if ( metadata . internal || metadata . method . startsWith ( 'tracing' ) )
631630 return null ;
632- return {
631+ const event : trace . BeforeActionTraceEvent = {
633632 type : 'before' ,
634633 callId : metadata . id ,
635634 startTime : metadata . startTime ,
@@ -640,6 +639,9 @@ function createBeforeActionTraceEvent(metadata: CallMetadata): trace.BeforeActio
640639 stepId : metadata . stepId ,
641640 pageId : metadata . pageId ,
642641 } ;
642+ if ( parentId )
643+ event . parentId = parentId ;
644+ return event ;
643645}
644646
645647function createInputActionTraceEvent ( metadata : CallMetadata ) : trace . InputActionTraceEvent | null {
0 commit comments