Allocate memory up front for histogram copy
This commit is contained in:
@@ -1083,21 +1083,21 @@ compute_metric_values(ArenaAllocator &arena, const LabelSets &label_sets) {
|
|||||||
auto *instance = it->second;
|
auto *instance = it->second;
|
||||||
|
|
||||||
// Extract data under lock - minimize critical section
|
// Extract data under lock - minimize critical section
|
||||||
ArenaVector<uint64_t> counts_snapshot(&arena);
|
uint64_t *counts_snapshot = arena.allocate<uint64_t>(bucket_count);
|
||||||
double sum_snapshot;
|
double sum_snapshot;
|
||||||
uint64_t observations_snapshot;
|
uint64_t observations_snapshot;
|
||||||
|
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> lock(instance->mutex);
|
std::lock_guard<std::mutex> lock(instance->mutex);
|
||||||
for (size_t i = 0; i < instance->counts.size(); ++i) {
|
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;
|
sum_snapshot = instance->sum;
|
||||||
observations_snapshot = instance->observations;
|
observations_snapshot = instance->observations;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add to totals
|
// 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_counts[i] += counts_snapshot[i];
|
||||||
}
|
}
|
||||||
total_sum += sum_snapshot;
|
total_sum += sum_snapshot;
|
||||||
|
|||||||
Reference in New Issue
Block a user