Chromium Code Reviews| Index: webrtc/test/histogram.cc |
| diff --git a/webrtc/test/histogram.cc b/webrtc/test/histogram.cc |
| index 6fcdb6864f6ee856638999bb5ede895991a98e20..0bbd66fba0d7658ae6be0a73e4a38b27a9e0b147 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,11 @@ |
| 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) |
|
pbos-webrtc
2015/12/21 13:44:43
consider const char* here as well
åsapersson
2015/12/21 16:45:32
Acknowledged.
|
| + : 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 +38,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 +75,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 +84,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 |
| - |