From 56b89cc8cbf056111c6e50d33a4fc412ced2af03 Mon Sep 17 00:00:00 2001 From: Nikita Smith Date: Wed, 11 Feb 2026 15:26:22 -0800 Subject: [PATCH] plot arena memory usage --- src/base/base_arena.c | 28 ++++++++++++++++++++++++++++ src/base/base_arena.h | 2 ++ 2 files changed, 30 insertions(+) diff --git a/src/base/base_arena.c b/src/base/base_arena.c index 4e6cd0c0..7283d20e 100644 --- a/src/base/base_arena.c +++ b/src/base/base_arena.c @@ -67,6 +67,7 @@ arena_alloc_(ArenaParams *params) arena->res = reserve_size; arena->allocation_site_file = params->allocation_site_file; arena->allocation_site_line = params->allocation_site_line; + arena->name = params->name; #if ARENA_FREE_LIST arena->free_last = 0; #endif @@ -76,6 +77,14 @@ arena_alloc_(ArenaParams *params) internal void arena_release(Arena *arena) { +#if PROFILE_TELEMETRY + { + Arena *base_arena = arena; + while (base_arena->prev) base_arena = base_arena->prev; + tmPlot(0, TM_PLOT_UNITS_MEMORY, TM_PLOT_DRAW_LINE, 0, "%s/%p", base_arena->name, base_arena); + } +#endif + for(Arena *n = arena->current, *prev = 0; n != 0; n = prev) { prev = n->prev; @@ -181,6 +190,15 @@ arena_push(Arena *arena, U64 size, U64 align, B32 zero) MemoryZero(result, size_to_zero); } } + +#if PROFILE_TELEMETRY + if(size > KB(1)) + { + Arena *base_arena = arena; + while (base_arena->prev) base_arena = base_arena->prev; + tmPlot(0, TM_PLOT_UNITS_MEMORY, TM_PLOT_DRAW_LINE, (double)(current->base_pos + current->pos) / 1024.0 / 1024.0, "%s/%p", base_arena->name, base_arena); + } +#endif // rjf: panic on failure #if OS_FEATURE_GRAPHICAL @@ -228,6 +246,16 @@ arena_pop_to(Arena *arena, U64 pos) AssertAlways(new_pos <= current->pos); AsanPoisonMemoryRegion((U8*)current + new_pos, (current->pos - new_pos)); current->pos = new_pos; + +#if PROFILE_TELEMETRY + if((pos - (new_pos + current->base_pos)) > KB(1)) + { + Arena *base_arena = arena; + while (base_arena->prev) base_arena = base_arena->prev; + tmPlot(0, TM_PLOT_UNITS_MEMORY, TM_PLOT_DRAW_LINE, (double)(current->base_pos + current->pos) / 1024.0 / 1024.0, "%s/%p", base_arena->name, base_arena); + } +#endif + } //- rjf: arena push/pop helpers diff --git a/src/base/base_arena.h b/src/base/base_arena.h index 99fd33bb..5a1d82c2 100644 --- a/src/base/base_arena.h +++ b/src/base/base_arena.h @@ -25,6 +25,7 @@ struct ArenaParams void *optional_backing_buffer; char *allocation_site_file; int allocation_site_line; + char *name; }; typedef struct Arena Arena; @@ -41,6 +42,7 @@ struct Arena U64 res; char *allocation_site_file; int allocation_site_line; + char *name; #if ARENA_FREE_LIST Arena *free_last; #endif