From a9992591dc8ade9cbd1ecc931a3de092d9dd8f8e Mon Sep 17 00:00:00 2001 From: Daan Date: Mon, 31 Mar 2025 10:14:22 -0700 Subject: [PATCH] count page_bin statistics --- src/page-queue.c | 5 +++++ src/page.c | 2 ++ 2 files changed, 7 insertions(+) diff --git a/src/page-queue.c b/src/page-queue.c index 6e8b0853..cb712a03 100644 --- a/src/page-queue.c +++ b/src/page-queue.c @@ -167,6 +167,11 @@ bool _mi_page_queue_is_valid(mi_heap_t* heap, const mi_page_queue_t* pq) { return true; } +static size_t mi_page_bin(const mi_page_t* page) { + const size_t bin = (mi_page_is_in_full(page) ? MI_BIN_FULL : (mi_page_is_huge(page) ? MI_BIN_HUGE : mi_bin(mi_page_block_size(page)))); + mi_assert_internal(bin <= MI_BIN_FULL); + return bin; +} static mi_page_queue_t* mi_heap_page_queue_of(mi_heap_t* heap, const mi_page_t* page) { mi_assert_internal(heap!=NULL); diff --git a/src/page.c b/src/page.c index 2efe7496..69d0e15f 100644 --- a/src/page.c +++ b/src/page.c @@ -324,6 +324,7 @@ static mi_page_t* mi_page_fresh_alloc(mi_heap_t* heap, mi_page_queue_t* pq, size } mi_heap_stat_increase(heap, pages, 1); mi_assert_internal(pq!=NULL || mi_page_block_size(page) >= block_size); + mi_heap_stat_increase(heap, page_bins[mi_page_bin(page)], 1); mi_assert_expensive(_mi_page_is_valid(page)); return page; } @@ -394,6 +395,7 @@ void _mi_page_free(mi_page_t* page, mi_page_queue_t* pq) { // and free it mi_heap_t* heap = page->heap; + mi_heap_stat_decrease(heap, page_bins[mi_page_bin(page)], 1); mi_page_set_heap(page,NULL); _mi_arenas_page_free(page); _mi_arenas_collect(false, false, heap->tld); // allow purging