
Update test implementation (test/histograms.h) to be more similar a real implementation (where histogram get functions return a Histogram pointer). Add check that the name of a histogram does not change. BUG=webrtc:5283 Review URL: https://codereview.webrtc.org/1528403003 Cr-Commit-Position: refs/heads/master@{#11161}
98 lines
2.9 KiB
C++
98 lines
2.9 KiB
C++
/*
|
|
* Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
#include "webrtc/test/histogram.h"
|
|
|
|
#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"
|
|
|
|
// Test implementation of histogram methods in
|
|
// webrtc/system_wrappers/include/metrics.h.
|
|
|
|
namespace webrtc {
|
|
namespace {
|
|
struct SampleInfo {
|
|
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_;
|
|
// Map holding info about added samples to a histogram (mapped by the histogram
|
|
// name).
|
|
std::map<std::string, SampleInfo> histograms_ GUARDED_BY(histogram_crit_);
|
|
} // namespace
|
|
|
|
namespace metrics {
|
|
Histogram* HistogramFactoryGetCounts(const std::string& name, int min, int max,
|
|
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) {
|
|
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_);
|
|
SampleInfo* ptr = reinterpret_cast<SampleInfo*>(histogram_pointer);
|
|
// The name should not vary.
|
|
RTC_CHECK(ptr->name_ == name);
|
|
ptr->last_ = sample;
|
|
++ptr->total_;
|
|
}
|
|
} // namespace metrics
|
|
|
|
namespace test {
|
|
int LastHistogramSample(const std::string& name) {
|
|
rtc::CritScope cs(&histogram_crit_);
|
|
const auto it = histograms_.find(name);
|
|
if (it == histograms_.end()) {
|
|
return -1;
|
|
}
|
|
return it->second.last_;
|
|
}
|
|
|
|
int NumHistogramSamples(const std::string& name) {
|
|
rtc::CritScope cs(&histogram_crit_);
|
|
const auto it = histograms_.find(name);
|
|
if (it == histograms_.end()) {
|
|
return 0;
|
|
}
|
|
return it->second.total_;
|
|
}
|
|
|
|
void ClearHistograms() {
|
|
rtc::CritScope cs(&histogram_crit_);
|
|
for (auto& it : histograms_) {
|
|
it.second.last_ = -1;
|
|
it.second.total_ = 0;
|
|
}
|
|
}
|
|
} // namespace test
|
|
} // namespace webrtc
|