@@ -369,9 +369,10 @@ def __init__(self, tool_id: int) -> None:
369
369
370
370
self .stats : dict [str , int ] | None = None
371
371
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
+ )
375
376
376
377
self .stopped = False
377
378
self ._activity = False
@@ -493,6 +494,8 @@ def sysmon_py_start(
493
494
self .code_objects .append (code )
494
495
495
496
if tracing_code :
497
+ if self .stats is not None :
498
+ self .stats ["start_tracing" ] += 1
496
499
events = sys .monitoring .events
497
500
with self .lock :
498
501
if self .sysmon_on :
@@ -516,6 +519,8 @@ def sysmon_py_return(
516
519
retval : object ,
517
520
) -> MonitorReturn :
518
521
"""Handle sys.monitoring.events.PY_RETURN events for branch coverage."""
522
+ if self .stats is not None :
523
+ self .stats ["returns" ] += 1
519
524
code_info = self .code_infos .get (id (code ))
520
525
if code_info is not None and code_info .file_data is not None :
521
526
assert code_info .byte_to_line is not None
@@ -529,6 +534,8 @@ def sysmon_py_return(
529
534
@panopticon ("code" , "line" )
530
535
def sysmon_line_lines (self , code : CodeType , line_number : TLineNo ) -> MonitorReturn :
531
536
"""Handle sys.monitoring.events.LINE events for line coverage."""
537
+ if self .stats is not None :
538
+ self .stats ["line_lines" ] += 1
532
539
code_info = self .code_infos .get (id (code ))
533
540
if code_info is not None and code_info .file_data is not None :
534
541
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
538
545
@panopticon ("code" , "line" )
539
546
def sysmon_line_arcs (self , code : CodeType , line_number : TLineNo ) -> MonitorReturn :
540
547
"""Handle sys.monitoring.events.LINE events for branch coverage."""
548
+ if self .stats is not None :
549
+ self .stats ["line_arcs" ] += 1
541
550
code_info = self .code_infos [id (code )]
542
551
if code_info .file_data is not None :
543
552
arc = (line_number , line_number )
@@ -550,9 +559,13 @@ def sysmon_branch_either(
550
559
self , code : CodeType , instruction_offset : TOffset , destination_offset : TOffset
551
560
) -> MonitorReturn :
552
561
"""Handle BRANCH_RIGHT and BRANCH_LEFT events."""
562
+ if self .stats is not None :
563
+ self .stats ["branches" ] += 1
553
564
code_info = self .code_infos [id (code )]
554
565
if code_info .file_data is not None :
555
566
if not code_info .branch_trails :
567
+ if self .stats is not None :
568
+ self .stats ["branch_trails" ] += 1
556
569
populate_branch_trails (code , code_info )
557
570
# log(f"branch_trails for {code}:\n {code_info.branch_trails}")
558
571
added_arc = False
0 commit comments