diff --git a/src/metric.cpp b/src/metric.cpp index 42dbb08..be2c698 100644 --- a/src/metric.cpp +++ b/src/metric.cpp @@ -1083,21 +1083,21 @@ compute_metric_values(ArenaAllocator &arena, const LabelSets &label_sets) { auto *instance = it->second; // Extract data under lock - minimize critical section - ArenaVector counts_snapshot(&arena); + uint64_t *counts_snapshot = arena.allocate(bucket_count); double sum_snapshot; uint64_t observations_snapshot; { std::lock_guard lock(instance->mutex); for (size_t i = 0; i < instance->counts.size(); ++i) { - counts_snapshot.push_back(instance->counts[i]); + counts_snapshot[i] = instance->counts[i]; } sum_snapshot = instance->sum; observations_snapshot = instance->observations; } // Add to totals - for (size_t i = 0; i < counts_snapshot.size(); ++i) { + for (size_t i = 0; i < bucket_count; ++i) { total_counts[i] += counts_snapshot[i]; } total_sum += sum_snapshot;