Index: webrtc/test/histogram.cc |
diff --git a/webrtc/test/histogram.cc b/webrtc/test/histogram.cc |
index 6fcdb6864f6ee856638999bb5ede895991a98e20..2893e4389ad61c7c79980d979f06d78fa02ed4b7 100644 |
--- a/webrtc/test/histogram.cc |
+++ b/webrtc/test/histogram.cc |
@@ -12,6 +12,7 @@ |
#include <map> |
+#include "webrtc/base/checks.h" |
#include "webrtc/base/criticalsection.h" |
#include "webrtc/base/thread_annotations.h" |
#include "webrtc/system_wrappers/include/metrics.h" |
@@ -22,10 +23,10 @@ |
namespace webrtc { |
namespace { |
struct SampleInfo { |
- SampleInfo(int sample) |
- : last(sample), total(1) {} |
- int last; // Last added sample. |
- int total; // Total number of added samples. |
+ SampleInfo(const std::string& name) : name_(name), last_(-1), total_(0) {} |
+ const std::string name_; |
+ int last_; // Last added sample. |
+ int total_; // Total number of added samples. |
}; |
rtc::CriticalSection histogram_crit_; |
@@ -36,21 +37,33 @@ std::map<std::string, SampleInfo> histograms_ GUARDED_BY(histogram_crit_); |
namespace metrics { |
Histogram* HistogramFactoryGetCounts(const std::string& name, int min, int max, |
- int bucket_count) { return NULL; } |
+ int bucket_count) { |
+ rtc::CritScope cs(&histogram_crit_); |
+ if (histograms_.find(name) == histograms_.end()) { |
+ histograms_.insert(std::make_pair(name, SampleInfo(name))); |
+ } |
+ auto it = histograms_.find(name); |
+ return reinterpret_cast<Histogram*>(&it->second); |
+} |
Histogram* HistogramFactoryGetEnumeration(const std::string& name, |
- int boundary) { return NULL; } |
+ int boundary) { |
+ rtc::CritScope cs(&histogram_crit_); |
+ if (histograms_.find(name) == histograms_.end()) { |
+ histograms_.insert(std::make_pair(name, SampleInfo(name))); |
+ } |
+ auto it = histograms_.find(name); |
+ return reinterpret_cast<Histogram*>(&it->second); |
+} |
void HistogramAdd( |
Histogram* histogram_pointer, const std::string& name, int sample) { |
rtc::CritScope cs(&histogram_crit_); |
- auto it = histograms_.find(name); |
- if (it == histograms_.end()) { |
- histograms_.insert(std::make_pair(name, SampleInfo(sample))); |
- return; |
- } |
- it->second.last = sample; |
- ++it->second.total; |
+ SampleInfo* ptr = reinterpret_cast<SampleInfo*>(histogram_pointer); |
+ // The name should not vary. |
+ RTC_CHECK(ptr->name_ == name); |
+ ptr->last_ = sample; |
+ ++ptr->total_; |
} |
} // namespace metrics |
@@ -61,7 +74,7 @@ int LastHistogramSample(const std::string& name) { |
if (it == histograms_.end()) { |
return -1; |
} |
- return it->second.last; |
+ return it->second.last_; |
} |
int NumHistogramSamples(const std::string& name) { |
@@ -70,13 +83,15 @@ int NumHistogramSamples(const std::string& name) { |
if (it == histograms_.end()) { |
return 0; |
} |
- return it->second.total; |
+ return it->second.total_; |
} |
void ClearHistograms() { |
rtc::CritScope cs(&histogram_crit_); |
- histograms_.clear(); |
+ for (auto& it : histograms_) { |
+ it.second.last_ = -1; |
+ it.second.total_ = 0; |
+ } |
} |
} // namespace test |
} // namespace webrtc |
- |