Use swap instead of copy in RtcHistogram::GetAndReset.

BUG=webrtc:5283

Review-Url: https://codereview.webrtc.org/2268323002
Cr-Commit-Position: refs/heads/master@{#15311}
This commit is contained in:
asapersson 2016-11-30 00:29:09 -08:00 committed by Commit bot
parent 84e56d5768
commit 1731c9cb4c
3 changed files with 25 additions and 6 deletions

View File

@ -9,6 +9,8 @@
#include "webrtc/system_wrappers/include/metrics_default.h"
#include <algorithm>
#include "webrtc/base/criticalsection.h"
#include "webrtc/base/thread_annotations.h"
#include "webrtc/system_wrappers/include/metrics.h"
@ -34,10 +36,8 @@ class RtcHistogram {
}
void Add(int sample) {
if (sample < min_)
sample = min_ - 1; // Underflow bucket.
if (sample > max_)
sample = max_;
sample = std::min(sample, max_);
sample = std::max(sample, min_ - 1); // Underflow bucket.
rtc::CritScope cs(&crit_);
if (info_.samples.size() == kMaxSampleMapSize &&
@ -55,8 +55,9 @@ class RtcHistogram {
SampleInfo* copy =
new SampleInfo(info_.name, info_.min, info_.max, info_.bucket_count);
copy->samples = info_.samples;
info_.samples.clear();
std::swap(info_.samples, copy->samples);
return std::unique_ptr<SampleInfo>(copy);
}

View File

@ -134,6 +134,16 @@ TEST_F(MetricsDefaultTest, GetAndReset) {
EXPECT_EQ(1, NumEvents("Histogram1", 4, histograms));
EXPECT_EQ(2, NumEvents("Histogram1", 5, histograms));
EXPECT_EQ(1, NumEvents("Histogram2", 10, histograms));
// Add samples after reset.
metrics::GetAndReset(&histograms);
EXPECT_EQ(0u, histograms.size());
RTC_HISTOGRAM_PERCENTAGE("Histogram1", 50);
RTC_HISTOGRAM_PERCENTAGE("Histogram2", 8);
EXPECT_EQ(1, metrics::NumSamples("Histogram1"));
EXPECT_EQ(1, metrics::NumSamples("Histogram2"));
EXPECT_EQ(1, metrics::NumEvents("Histogram1", 50));
EXPECT_EQ(1, metrics::NumEvents("Histogram2", 8));
}
TEST_F(MetricsDefaultTest, TestMinMaxBucket) {

View File

@ -58,6 +58,14 @@ TEST_F(MetricsTest, RtcHistogramEnumeration_AddSample) {
EXPECT_EQ(1, metrics::NumEvents(kName, kSample));
}
TEST_F(MetricsTest, RtcHistogramBoolean_AddSample) {
const std::string kName = "Boolean";
const int kSample = 0;
RTC_HISTOGRAM_BOOLEAN(kName, kSample);
EXPECT_EQ(1, metrics::NumSamples(kName));
EXPECT_EQ(1, metrics::NumEvents(kName, kSample));
}
TEST_F(MetricsTest, RtcHistogramCountsSparse_AddSample) {
const std::string kName = "CountsSparse100";
RTC_HISTOGRAM_COUNTS_SPARSE_100(kName, kSample);