Skip to content

Commit 9d6f460

Browse files
add type_cache_resizes and type_cache_invalidations stats
1 parent c4a4fb3 commit 9d6f460

3 files changed

Lines changed: 8 additions & 0 deletions

File tree

Include/cpython/pystats.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,8 @@ typedef struct _object_stats {
9797
uint64_t type_cache_dunder_hits;
9898
uint64_t type_cache_dunder_misses;
9999
uint64_t type_cache_too_big;
100+
uint64_t type_cache_invalidations;
101+
uint64_t type_cache_resizes;
100102
/* Temporary value used during GC */
101103
uint64_t object_visits;
102104
} ObjectStats;

Python/pystats.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,8 @@ print_object_stats(FILE *out, ObjectStats *stats)
233233
fprintf(out, "Object method cache too big: %" PRIu64 "\n", stats->type_cache_too_big);
234234
fprintf(out, "Object method cache dunder hits: %" PRIu64 "\n", stats->type_cache_dunder_hits);
235235
fprintf(out, "Object method cache dunder misses: %" PRIu64 "\n", stats->type_cache_dunder_misses);
236+
fprintf(out, "Object method cache invalidations: %" PRIu64 "\n", stats->type_cache_invalidations);
237+
fprintf(out, "Object method cache resizes: %" PRIu64 "\n", stats->type_cache_resizes);
236238
}
237239

238240
static void
@@ -440,6 +442,8 @@ merge_object_stats(ObjectStats *dest, const ObjectStats *src)
440442
dest->type_cache_dunder_hits += src->type_cache_dunder_hits;
441443
dest->type_cache_dunder_misses += src->type_cache_dunder_misses;
442444
dest->type_cache_too_big += src->type_cache_too_big;
445+
dest->type_cache_invalidations += src->type_cache_invalidations;
446+
dest->type_cache_resizes += src->type_cache_resizes;
443447
dest->object_visits += src->object_visits;
444448
}
445449

Python/typecache.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ cache_resize(PyTypeObject *type, struct type_cache *cache)
157157
if (new_cache == NULL) {
158158
return -1;
159159
}
160+
OBJECT_STAT_INC(type_cache_resizes);
160161
for (uint32_t i = 0; i < old_size; i++) {
161162
if (cache->hashtable[i].name != NULL) {
162163
cache_insert(new_cache, cache->hashtable[i].name, cache->hashtable[i].value);
@@ -238,6 +239,7 @@ _PyTypeCache_Lookup(PyTypeObject *type, PyObject *name)
238239
void
239240
_PyTypeCache_Invalidate(PyTypeObject *type)
240241
{
242+
OBJECT_STAT_INC(type_cache_invalidations);
241243
struct type_cache *cache = cache_get(type);
242244
cache_set(type, &empty_cache);
243245
cache_free_delayed(cache);

0 commit comments

Comments
 (0)