@@ -62,8 +62,7 @@ def start_trace(self, tracefunc):
6262 sys .monitoring .register_callback (self ._tool_id , event , callback )
6363 if event != E .INSTRUCTION :
6464 all_events |= event
65- self .check_trace_func ()
66- self .check_trace_opcodes ()
65+ self .update_local_events ()
6766 sys .monitoring .set_events (self ._tool_id , self .GLOBAL_EVENTS )
6867 self ._enabled = True
6968
@@ -74,7 +73,6 @@ def stop_trace(self):
7473 if curr_tool != self ._name :
7574 return
7675 sys .monitoring .clear_tool_id (self ._tool_id )
77- self .check_trace_opcodes ()
7876 sys .monitoring .free_tool_id (self ._tool_id )
7977
8078 def disable_current_event (self ):
@@ -95,7 +93,7 @@ def wrapper(self, *args):
9593 frame = sys ._getframe ().f_back
9694 ret = func (self , frame , * args )
9795 if self ._enabled and frame .f_trace :
98- self .check_trace_func ()
96+ self .update_local_events ()
9997 if self ._disable_current_event :
10098 return sys .monitoring .DISABLE
10199 else :
@@ -159,27 +157,18 @@ def opcode_callback(self, frame, code, offset):
159157 if frame .f_trace and frame .f_trace_opcodes :
160158 frame .f_trace (frame , 'opcode' , None )
161159
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 ):
170161 if sys .monitoring .get_tool (self ._tool_id ) != self ._name :
171162 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 ):
178163 if frame is None :
179164 frame = sys ._getframe ().f_back
180165 while frame is not None :
181166 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 )
183172 frame = frame .f_back
184173
185174 def _get_lineno (self , code , offset ):
@@ -544,11 +533,11 @@ def _set_trace_opcodes(self, trace_opcodes):
544533 frame = self .enterframe
545534 while frame is not None :
546535 frame .f_trace_opcodes = trace_opcodes
547- if self .monitoring_tracer :
548- self .monitoring_tracer .set_trace_opcodes (frame , trace_opcodes )
549536 if frame is self .botframe :
550537 break
551538 frame = frame .f_back
539+ if self .monitoring_tracer :
540+ self .monitoring_tracer .update_local_events ()
552541
553542 def _set_stopinfo (self , stopframe , returnframe , stoplineno = 0 , opcode = False ):
554543 """Set the attributes for stopping.
@@ -642,8 +631,8 @@ def set_continue(self):
642631 frame = frame .f_back
643632 for frame , (trace_lines , trace_opcodes ) in self .frame_trace_lines_opcodes .items ():
644633 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 ( )
647636 self .frame_trace_lines_opcodes = {}
648637
649638 def set_quit (self ):
0 commit comments