From d09f72e59e9cd7d07339a979b01657b8cc5ed236 Mon Sep 17 00:00:00 2001 From: Artem Kharytoniuk Date: Thu, 10 Jul 2025 12:25:09 +0200 Subject: [PATCH] new approximation for merged peak stats --- src/stats.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/stats.c b/src/stats.c index 03eafb666..cba480c05 100644 --- a/src/stats.c +++ b/src/stats.c @@ -86,11 +86,11 @@ void _mi_stat_adjust_decrease(mi_stat_count_t* stat, size_t amount) { static void mi_stat_count_add_mt(mi_stat_count_t* stat, const mi_stat_count_t* src) { if (stat==src) return; mi_atomic_void_addi64_relaxed(&stat->total, &src->total); - mi_atomic_void_addi64_relaxed(&stat->current, &src->current); - // peak scores do really not work across threads .. we just add them - mi_atomic_void_addi64_relaxed( &stat->peak, &src->peak); - // or, take the max? - // mi_atomic_maxi64_relaxed(&stat->peak, src->peak); + + int64_t prev_current = mi_atomic_addi64_relaxed(&stat->current, src->current); + + // global current plus thread peak approximates new global peak + mi_atomic_maxi64_relaxed(&stat->peak, prev_current + src->peak); } static void mi_stat_counter_add_mt(mi_stat_counter_t* stat, const mi_stat_counter_t* src) {