@@ -62,8 +62,7 @@ def start_trace(self, tracefunc):
62
62
sys .monitoring .register_callback (self ._tool_id , event , callback )
63
63
if event != E .INSTRUCTION :
64
64
all_events |= event
65
- self .check_trace_func ()
66
- self .check_trace_opcodes ()
65
+ self .update_local_events ()
67
66
sys .monitoring .set_events (self ._tool_id , self .GLOBAL_EVENTS )
68
67
self ._enabled = True
69
68
@@ -74,7 +73,6 @@ def stop_trace(self):
74
73
if curr_tool != self ._name :
75
74
return
76
75
sys .monitoring .clear_tool_id (self ._tool_id )
77
- self .check_trace_opcodes ()
78
76
sys .monitoring .free_tool_id (self ._tool_id )
79
77
80
78
def disable_current_event (self ):
@@ -95,7 +93,7 @@ def wrapper(self, *args):
95
93
frame = sys ._getframe ().f_back
96
94
ret = func (self , frame , * args )
97
95
if self ._enabled and frame .f_trace :
98
- self .check_trace_func ()
96
+ self .update_local_events ()
99
97
if self ._disable_current_event :
100
98
return sys .monitoring .DISABLE
101
99
else :
@@ -159,27 +157,18 @@ def opcode_callback(self, frame, code, offset):
159
157
if frame .f_trace and frame .f_trace_opcodes :
160
158
frame .f_trace (frame , 'opcode' , None )
161
159
162
- def check_trace_opcodes (self , frame = None ):
163
- if frame is None :
164
- frame = sys ._getframe ().f_back
165
- while frame is not None :
166
- self .set_trace_opcodes (frame , frame .f_trace_opcodes )
167
- frame = frame .f_back
168
-
169
- def set_trace_opcodes (self , frame , trace_opcodes ):
160
+ def update_local_events (self , frame = None ):
170
161
if sys .monitoring .get_tool (self ._tool_id ) != self ._name :
171
162
return
172
- if trace_opcodes :
173
- sys .monitoring .set_local_events (self ._tool_id , frame .f_code , E .INSTRUCTION )
174
- else :
175
- sys .monitoring .set_local_events (self ._tool_id , frame .f_code , 0 )
176
-
177
- def check_trace_func (self , frame = None ):
178
163
if frame is None :
179
164
frame = sys ._getframe ().f_back
180
165
while frame is not None :
181
166
if frame .f_trace is not None :
182
- sys .monitoring .set_local_events (self ._tool_id , frame .f_code , self .LOCAL_EVENTS )
167
+ if frame .f_trace_opcodes :
168
+ events = self .LOCAL_EVENTS | E .INSTRUCTION
169
+ else :
170
+ events = self .LOCAL_EVENTS
171
+ sys .monitoring .set_local_events (self ._tool_id , frame .f_code , events )
183
172
frame = frame .f_back
184
173
185
174
def _get_lineno (self , code , offset ):
@@ -544,11 +533,11 @@ def _set_trace_opcodes(self, trace_opcodes):
544
533
frame = self .enterframe
545
534
while frame is not None :
546
535
frame .f_trace_opcodes = trace_opcodes
547
- if self .monitoring_tracer :
548
- self .monitoring_tracer .set_trace_opcodes (frame , trace_opcodes )
549
536
if frame is self .botframe :
550
537
break
551
538
frame = frame .f_back
539
+ if self .monitoring_tracer :
540
+ self .monitoring_tracer .update_local_events ()
552
541
553
542
def _set_stopinfo (self , stopframe , returnframe , stoplineno = 0 , opcode = False ):
554
543
"""Set the attributes for stopping.
@@ -642,8 +631,8 @@ def set_continue(self):
642
631
frame = frame .f_back
643
632
for frame , (trace_lines , trace_opcodes ) in self .frame_trace_lines_opcodes .items ():
644
633
frame .f_trace_lines , frame .f_trace_opcodes = trace_lines , trace_opcodes
645
- if self .backend == 'monitoring' :
646
- self .monitoring_tracer .set_trace_opcodes ( frame , trace_opcodes )
634
+ if self .backend == 'monitoring' :
635
+ self .monitoring_tracer .update_local_events ( )
647
636
self .frame_trace_lines_opcodes = {}
648
637
649
638
def set_quit (self ):
0 commit comments