summaryrefslogtreecommitdiff
path: root/coverage/pytracer.py
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2022-05-28 16:12:14 -0400
committerNed Batchelder <ned@nedbatchelder.com>2022-05-28 16:12:14 -0400
commit4b592fe30a7ebf871ba9a3d883ec955dae198c15 (patch)
treecf2572b4d846c267833510591db0a7673a6b1e9d /coverage/pytracer.py
parent65033080e0ad33f2615a40bbdd54d8abed48c19a (diff)
downloadpython-coveragepy-git-4b592fe30a7ebf871ba9a3d883ec955dae198c15.tar.gz
perf: set frame->f_trace_lines=0 when not tracing. ~3% faster
Diffstat (limited to 'coverage/pytracer.py')
-rw-r--r--coverage/pytracer.py4
1 files changed, 4 insertions, 0 deletions
diff --git a/coverage/pytracer.py b/coverage/pytracer.py
index 1f0f7924..08050b58 100644
--- a/coverage/pytracer.py
+++ b/coverage/pytracer.py
@@ -161,6 +161,7 @@ class PyTracer:
self.cur_file_data = self.data[tracename]
else:
frame.f_trace_lines = False
+
# The call event is really a "start frame" event, and happens for
# function calls and re-entering generators. The f_lasti field is
# -1 for calls, and a real offset for generators. Use <0 as the
@@ -176,6 +177,7 @@ class PyTracer:
self.last_line = -frame.f_code.co_firstlineno
else:
self.last_line = frame.f_lineno
+
elif event == 'line':
# Record an executed line.
if self.cur_file_data is not None:
@@ -186,6 +188,7 @@ class PyTracer:
else:
self.cur_file_data.add(lineno)
self.last_line = lineno
+
elif event == 'return':
if self.trace_arcs and self.cur_file_data:
# Record an arc leaving the function, but beware that a
@@ -213,6 +216,7 @@ class PyTracer:
if real_return:
first = frame.f_code.co_firstlineno
self.cur_file_data.add((self.last_line, -first))
+
# Leaving this function, pop the filename stack.
self.cur_file_data, self.cur_file_name, self.last_line, self.started_context = (
self.data_stack.pop()