mirror of
https://github.com/python/cpython.git
synced 2025-11-01 10:45:30 +00:00
This change adjusts the profiling/tracing support so that the common
path (with no profile/trace function) through eval_code2() and eval_frame() avoids several checks. In the common cases of calls, returns, and exception propogation, eval_code2() and eval_frame() used to test two values in the thread-state: the profiling function and the tracing function. With this change, a flag is set in the thread-state if either of these is active, allowing a single check to suffice when both are NULL. This also simplifies the code needed when either function is in use but is already active (to avoid profiling/tracing the profiler/tracer); the flag is set to 0 when the profile/trace code is entered, allowing the same check to suffice for "already in the tracer" for call/return/ exception events.
This commit is contained in:
parent
d89a2e7731
commit
9e3ad78444
3 changed files with 67 additions and 47 deletions
|
|
@ -109,6 +109,7 @@ PyThreadState_New(PyInterpreterState *interp)
|
|||
tstate->recursion_depth = 0;
|
||||
tstate->ticker = 0;
|
||||
tstate->tracing = 0;
|
||||
tstate->use_tracing = 0;
|
||||
|
||||
tstate->dict = NULL;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue