summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorMark Shannon <mark@hotpy.org>2022-01-28 15:20:33 (GMT)
committerGitHub <noreply@github.com>2022-01-28 15:20:33 (GMT)
commit90ab138bbdc63763ad825ed6d4821367c09c4015 (patch)
tree3adaef410013002de2e488d9c37fb6abc3462082 /Python
parent9a241271139a317597aca71d5971346b2cfe7dbd (diff)
downloadcpython-90ab138bbdc63763ad825ed6d4821367c09c4015.zip
cpython-90ab138bbdc63763ad825ed6d4821367c09c4015.tar.gz
cpython-90ab138bbdc63763ad825ed6d4821367c09c4015.tar.bz2
bpo-46072: Add simple stats for Python calls. (GH-30989)
Diffstat (limited to 'Python')
-rw-r--r--Python/ceval.c4
-rw-r--r--Python/specialize.c9
2 files changed, 13 insertions, 0 deletions
diff --git a/Python/ceval.c b/Python/ceval.c
index cd05780..fa14a1c 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -1651,6 +1651,7 @@ PyObject* _Py_HOT_FUNCTION
_PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int throwflag)
{
_Py_EnsureTstateNotNULL(tstate);
+ CALL_STAT_INC(pyeval_calls);
#if USE_COMPUTED_GOTOS
/* Import the static jump table */
@@ -2252,6 +2253,7 @@ handle_eval_breaker:
_PyFrame_SetStackPointer(frame, stack_pointer);
new_frame->previous = frame;
frame = cframe.current_frame = new_frame;
+ CALL_STAT_INC(inlined_py_calls);
goto start_frame;
}
@@ -4589,6 +4591,7 @@ handle_eval_breaker:
_PyFrame_SetStackPointer(frame, stack_pointer);
new_frame->previous = frame;
cframe.current_frame = frame = new_frame;
+ CALL_STAT_INC(inlined_py_calls);
goto start_frame;
}
/* Callable is not a normal Python function */
@@ -4705,6 +4708,7 @@ handle_eval_breaker:
_PyFrame_SetStackPointer(frame, stack_pointer);
new_frame->previous = frame;
frame = cframe.current_frame = new_frame;
+ CALL_STAT_INC(inlined_py_calls);
goto start_frame;
}
diff --git a/Python/specialize.c b/Python/specialize.c
index a69b73c..aec94d9 100644
--- a/Python/specialize.c
+++ b/Python/specialize.c
@@ -163,9 +163,18 @@ print_spec_stats(FILE *out, OpcodeStats *stats)
}
#undef PRINT_STAT
+
+static void
+print_call_stats(FILE *out, CallStats *stats)
+{
+ fprintf(out, "Calls to PyEval_EvalDefault: %" PRIu64 "\n", stats->pyeval_calls);
+ fprintf(out, "Calls to Python functions inlined: %" PRIu64 "\n", stats->inlined_py_calls);
+}
+
static void
print_stats(FILE *out, PyStats *stats) {
print_spec_stats(out, stats->opcode_stats);
+ print_call_stats(out, &stats->call_stats);
}
void