@@ -369,9 +369,10 @@ def __init__(self, tool_id: int) -> None:
369369
370370 self .stats : dict [str , int ] | None = None
371371 if COLLECT_STATS :
372- self .stats = {
373- "starts" : 0 ,
374- }
372+ self .stats = dict .fromkeys (
373+ "starts start_tracing returns line_lines line_arcs branches branch_trails" .split (),
374+ 0 ,
375+ )
375376
376377 self .stopped = False
377378 self ._activity = False
@@ -493,6 +494,8 @@ def sysmon_py_start(
493494 self .code_objects .append (code )
494495
495496 if tracing_code :
497+ if self .stats is not None :
498+ self .stats ["start_tracing" ] += 1
496499 events = sys .monitoring .events
497500 with self .lock :
498501 if self .sysmon_on :
@@ -516,6 +519,8 @@ def sysmon_py_return(
516519 retval : object ,
517520 ) -> MonitorReturn :
518521 """Handle sys.monitoring.events.PY_RETURN events for branch coverage."""
522+ if self .stats is not None :
523+ self .stats ["returns" ] += 1
519524 code_info = self .code_infos .get (id (code ))
520525 if code_info is not None and code_info .file_data is not None :
521526 assert code_info .byte_to_line is not None
@@ -529,6 +534,8 @@ def sysmon_py_return(
529534 @panopticon ("code" , "line" )
530535 def sysmon_line_lines (self , code : CodeType , line_number : TLineNo ) -> MonitorReturn :
531536 """Handle sys.monitoring.events.LINE events for line coverage."""
537+ if self .stats is not None :
538+ self .stats ["line_lines" ] += 1
532539 code_info = self .code_infos .get (id (code ))
533540 if code_info is not None and code_info .file_data is not None :
534541 cast (set [TLineNo ], code_info .file_data ).add (line_number )
@@ -538,6 +545,8 @@ def sysmon_line_lines(self, code: CodeType, line_number: TLineNo) -> MonitorRetu
538545 @panopticon ("code" , "line" )
539546 def sysmon_line_arcs (self , code : CodeType , line_number : TLineNo ) -> MonitorReturn :
540547 """Handle sys.monitoring.events.LINE events for branch coverage."""
548+ if self .stats is not None :
549+ self .stats ["line_arcs" ] += 1
541550 code_info = self .code_infos [id (code )]
542551 if code_info .file_data is not None :
543552 arc = (line_number , line_number )
@@ -550,9 +559,13 @@ def sysmon_branch_either(
550559 self , code : CodeType , instruction_offset : TOffset , destination_offset : TOffset
551560 ) -> MonitorReturn :
552561 """Handle BRANCH_RIGHT and BRANCH_LEFT events."""
562+ if self .stats is not None :
563+ self .stats ["branches" ] += 1
553564 code_info = self .code_infos [id (code )]
554565 if code_info .file_data is not None :
555566 if not code_info .branch_trails :
567+ if self .stats is not None :
568+ self .stats ["branch_trails" ] += 1
556569 populate_branch_trails (code , code_info )
557570 # log(f"branch_trails for {code}:\n {code_info.branch_trails}")
558571 added_arc = False
0 commit comments