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:
Fred Drake 2001-07-03 23:39:52 +00:00
parent d89a2e7731
commit 9e3ad78444
3 changed files with 67 additions and 47 deletions

View file

@ -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;