@@ -308,7 +308,37 @@ export class DebuggerPlugin extends Plugin {
308308 } ) ,
309309 CodeMirror . lineNumbers ( {
310310 domEventHandlers : {
311- click : ( view , block , event ) => this . handleGutterClick ( view . state . doc . lineAt ( block . from ) , event as MouseEvent ) ,
311+ click : ( view , block , event ) => {
312+ if ( Host . rnPerfMetrics . isEnabled ( ) ) {
313+ const element = ( event . target as Element ) ;
314+ const isClickAddingBreakpoint = (
315+ element . classList &&
316+ element . classList . contains ( 'cm-gutterElement' ) &&
317+ ! element . classList . contains ( 'cm-breakpoint' )
318+ ) ;
319+ if ( isClickAddingBreakpoint ) {
320+ const setBreakpointStartMs = Date . now ( ) ;
321+ const observer = new MutationObserver ( mutations => {
322+ mutations . forEach ( mutation => {
323+ if (
324+ mutation . type === 'attributes' &&
325+ mutation . attributeName === 'class'
326+ ) {
327+ if ( element . classList . contains ( 'cm-breakpoint' ) ) {
328+ Host . rnPerfMetrics . manualBreakpointSetSucceeded ( Date . now ( ) - setBreakpointStartMs ) ;
329+ observer . disconnect ( ) ;
330+ }
331+ }
332+ } ) ;
333+ } ) ;
334+ observer . observe ( element , { attributes : true } ) ;
335+ // if there's no breakpoint set on the line in 3 seconds, don't track the event.
336+ // this could happen due to a different line getting the breakpoint, or an error.
337+ setTimeout ( ( ) => observer . disconnect ( ) , 3000 ) ;
338+ }
339+ }
340+ return this . handleGutterClick ( view . state . doc . lineAt ( block . from ) , event as MouseEvent ) ;
341+ } ,
312342 } ,
313343 } ) ,
314344 breakpointMarkers ,
0 commit comments