diff options
author | Mark Shannon <mark@hotpy.org> | 2022-05-16 13:35:11 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-05-16 13:35:11 (GMT) |
commit | fa2b8b75eb2b8a0193d587e02b488a73579118fc (patch) | |
tree | 023f4ceed47906c30c68348c032a38707ec5516f /Include/internal | |
parent | f6fd8aac13714ce17650eb4a648d5c08f0be53b4 (diff) | |
download | cpython-fa2b8b75eb2b8a0193d587e02b488a73579118fc.zip cpython-fa2b8b75eb2b8a0193d587e02b488a73579118fc.tar.gz cpython-fa2b8b75eb2b8a0193d587e02b488a73579118fc.tar.bz2 |
Improve object stats (#92845)
* Add incref/decref stats
* Show ratios for allocation in summary
Diffstat (limited to 'Include/internal')
-rw-r--r-- | Include/internal/pycore_code.h | 49 | ||||
-rw-r--r-- | Include/internal/pycore_object.h | 2 |
2 files changed, 2 insertions, 49 deletions
diff --git a/Include/internal/pycore_code.h b/Include/internal/pycore_code.h index e11d1f0..96cc9dc 100644 --- a/Include/internal/pycore_code.h +++ b/Include/internal/pycore_code.h @@ -265,53 +265,6 @@ extern int _PyStaticCode_InternStrings(PyCodeObject *co); #ifdef Py_STATS -#define SPECIALIZATION_FAILURE_KINDS 30 - -typedef struct _specialization_stats { - uint64_t success; - uint64_t failure; - uint64_t hit; - uint64_t deferred; - uint64_t miss; - uint64_t deopt; - uint64_t failure_kinds[SPECIALIZATION_FAILURE_KINDS]; -} SpecializationStats; - -typedef struct _opcode_stats { - SpecializationStats specialization; - uint64_t execution_count; - uint64_t pair_count[256]; -} OpcodeStats; - -typedef struct _call_stats { - uint64_t inlined_py_calls; - uint64_t pyeval_calls; - uint64_t frames_pushed; - uint64_t frame_objects_created; -} CallStats; - -typedef struct _object_stats { - uint64_t allocations; - uint64_t allocations512; - uint64_t allocations4k; - uint64_t allocations_big; - uint64_t frees; - uint64_t to_freelist; - uint64_t from_freelist; - uint64_t new_values; - uint64_t dict_materialized_on_request; - uint64_t dict_materialized_new_key; - uint64_t dict_materialized_too_big; - uint64_t dict_materialized_str_subclass; -} ObjectStats; - -typedef struct _stats { - OpcodeStats opcode_stats[256]; - CallStats call_stats; - ObjectStats object_stats; -} PyStats; - -extern PyStats _py_stats; #define STAT_INC(opname, name) _py_stats.opcode_stats[opname].specialization.name++ #define STAT_DEC(opname, name) _py_stats.opcode_stats[opname].specialization.name-- @@ -321,8 +274,6 @@ extern PyStats _py_stats; #define OBJECT_STAT_INC_COND(name, cond) \ do { if (cond) _py_stats.object_stats.name++; } while (0) -extern void _Py_PrintSpecializationStats(int to_file); - // Used by the _opcode extension which is built as a shared library PyAPI_FUNC(PyObject*) _Py_GetSpecializationStats(void); diff --git a/Include/internal/pycore_object.h b/Include/internal/pycore_object.h index f022f82..cc50418 100644 --- a/Include/internal/pycore_object.h +++ b/Include/internal/pycore_object.h @@ -34,6 +34,7 @@ PyAPI_FUNC(void) _Py_NO_RETURN _Py_FatalRefcountErrorFunc( static inline void _Py_DECREF_SPECIALIZED(PyObject *op, const destructor destruct) { + _Py_DECREF_STAT_INC(); #ifdef Py_REF_DEBUG _Py_RefTotal--; #endif @@ -51,6 +52,7 @@ _Py_DECREF_SPECIALIZED(PyObject *op, const destructor destruct) static inline void _Py_DECREF_NO_DEALLOC(PyObject *op) { + _Py_DECREF_STAT_INC(); #ifdef Py_REF_DEBUG _Py_RefTotal--; #endif |