@@ -162,48 +162,55 @@ def baz():
162162
163163 @unittest .skipIf (support .check_bolt_optimized (), "fails on BOLT instrumented binaries" )
164164 def test_sys_api (self ):
165- code = """if 1:
166- import sys
167- def foo():
168- pass
169-
170- def spam():
171- pass
165+ for define_eval_hook in (False , True ):
166+ code = """if 1:
167+ import sys
168+ def foo():
169+ pass
172170
173- def bar():
174- sys.deactivate_stack_trampoline()
175- foo()
176- sys.activate_stack_trampoline("perf")
177- spam()
171+ def spam():
172+ pass
178173
179- def baz():
180- bar()
174+ def bar():
175+ sys.deactivate_stack_trampoline()
176+ foo()
177+ sys.activate_stack_trampoline("perf")
178+ spam()
181179
182- sys.activate_stack_trampoline("perf")
183- baz()
184- """
185- with temp_dir () as script_dir :
186- script = make_script (script_dir , "perftest" , code )
187- env = {** os .environ , "PYTHON_JIT" : "0" }
188- with subprocess .Popen (
189- [sys .executable , script ],
190- text = True ,
191- stderr = subprocess .PIPE ,
192- stdout = subprocess .PIPE ,
193- env = env ,
194- ) as process :
195- stdout , stderr = process .communicate ()
180+ def baz():
181+ bar()
196182
197- self .assertEqual (stderr , "" )
198- self .assertEqual (stdout , "" )
183+ sys.activate_stack_trampoline("perf")
184+ baz()
185+ """
186+ if define_eval_hook :
187+ set_eval_hook = """if 1:
188+ import _testinternalcapi
189+ _testinternalcapi.set_eval_frame_record([])
190+ """
191+ code = set_eval_hook + code
192+ with temp_dir () as script_dir :
193+ script = make_script (script_dir , "perftest" , code )
194+ env = {** os .environ , "PYTHON_JIT" : "0" }
195+ with subprocess .Popen (
196+ [sys .executable , script ],
197+ text = True ,
198+ stderr = subprocess .PIPE ,
199+ stdout = subprocess .PIPE ,
200+ env = env ,
201+ ) as process :
202+ stdout , stderr = process .communicate ()
199203
200- perf_file = pathlib .Path (f"/tmp/perf-{ process .pid } .map" )
201- self .assertTrue (perf_file .exists ())
202- perf_file_contents = perf_file .read_text ()
203- self .assertNotIn (f"py::foo:{ script } " , perf_file_contents )
204- self .assertIn (f"py::spam:{ script } " , perf_file_contents )
205- self .assertIn (f"py::bar:{ script } " , perf_file_contents )
206- self .assertIn (f"py::baz:{ script } " , perf_file_contents )
204+ self .assertEqual (stderr , "" )
205+ self .assertEqual (stdout , "" )
206+
207+ perf_file = pathlib .Path (f"/tmp/perf-{ process .pid } .map" )
208+ self .assertTrue (perf_file .exists ())
209+ perf_file_contents = perf_file .read_text ()
210+ self .assertNotIn (f"py::foo:{ script } " , perf_file_contents )
211+ self .assertIn (f"py::spam:{ script } " , perf_file_contents )
212+ self .assertIn (f"py::bar:{ script } " , perf_file_contents )
213+ self .assertIn (f"py::baz:{ script } " , perf_file_contents )
207214
208215 def test_sys_api_with_existing_trampoline (self ):
209216 code = """if 1:
0 commit comments