From 14b7b40a82003689e2ac197995b8731584ac8168 Mon Sep 17 00:00:00 2001 From: Matthew Parkinson Date: Thu, 5 May 2022 11:09:37 +0100 Subject: [PATCH] Add a Stats combiner to make code cleaner. --- src/snmalloc/backend/backend.h | 30 ++++++++--------------- src/snmalloc/backend_helpers/statsrange.h | 18 ++++++++++++++ 2 files changed, 28 insertions(+), 20 deletions(-) diff --git a/src/snmalloc/backend/backend.h b/src/snmalloc/backend/backend.h index be498f4..db380fc 100644 --- a/src/snmalloc/backend/backend.h +++ b/src/snmalloc/backend/backend.h @@ -134,22 +134,22 @@ namespace snmalloc // Source for object allocations using StatsObject = StatsRange>; using ObjectRange = LargeBuddyRange; - using StatsR = StatsObject; - using StatsRMeta = StatsRange>; + using StatsMeta = StatsRange>; using MetaRange = SmallBuddyRange< - LargeBuddyRange>; + LargeBuddyRange>; // Create global range that can service small meta-data requests. // Don't want to add this to the CentralMetaRange to move Commit outside the // lock on the common case. - using GlobalMetaRange = GlobalRange>; + using GlobalMetaRange = GlobalRange>; + using Stats = StatsCombiner; #else // Source for object allocations and metadata // No separation between the two - using StatsR = StatsRange; + using Stats = StatsRange; using ObjectRange = SmallBuddyRange< - LargeBuddyRange, 21, 21, Pagemap>>; + LargeBuddyRange, 21, 21, Pagemap>>; using GlobalMetaRange = GlobalRange; #endif @@ -321,24 +321,14 @@ namespace snmalloc static size_t get_current_usage() { - StatsR stats_state; - auto result = stats_state.get_current_usage(); -#ifdef SNMALLOC_PROTECT_METADATA - StatsRMeta stats_state_meta; - result += stats_state_meta.get_current_usage(); -#endif - return result; + Stats stats_state; + return stats_state.get_current_usage(); } static size_t get_peak_usage() { - StatsR stats_state; - auto result = stats_state.get_peak_usage(); -#ifdef SNMALLOC_PROTECT_METADATA - StatsRMeta stats_state_meta; - result += stats_state_meta.get_peak_usage(); -#endif - return result; + Stats stats_state; + return stats_state.get_peak_usage(); } }; } // namespace snmalloc diff --git a/src/snmalloc/backend_helpers/statsrange.h b/src/snmalloc/backend_helpers/statsrange.h index da874b2..98a06ae 100644 --- a/src/snmalloc/backend_helpers/statsrange.h +++ b/src/snmalloc/backend_helpers/statsrange.h @@ -54,4 +54,22 @@ namespace snmalloc return peak_usage.load(); } }; + + template + class StatsCombiner + { + StatsR1 r1{}; + StatsR2 r2{}; + + public: + size_t get_current_usage() + { + return r1.get_current_usage() + r2.get_current_usage(); + } + + size_t get_peak_usage() + { + return r1.get_peak_usage() + r2.get_peak_usage(); + } + }; } // namespace snmalloc