| Index: webrtc/base/histogram.cc
|
| diff --git a/webrtc/base/histogram.cc b/webrtc/base/histogram.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..179a9c946d700da83f0f583667b276b3331cadad
|
| --- /dev/null
|
| +++ b/webrtc/base/histogram.cc
|
| @@ -0,0 +1,87 @@
|
| +/*
|
| + * Copyright (c) 2012 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/base/histogram.h"
|
| +
|
| +#include "webrtc/base/checks.h"
|
| +#include "webrtc/system_wrappers/include/metrics.h"
|
| +
|
| +namespace rtc {
|
| +
|
| +HistogramBase::HistogramBase(const char* name,
|
| + Type type,
|
| + int min,
|
| + int max,
|
| + int bucket_count)
|
| + : histogram_(type == Type::kCounts
|
| + ? webrtc::metrics::HistogramFactoryGetCounts(name,
|
| + min,
|
| + max,
|
| + bucket_count)
|
| + : webrtc::metrics::HistogramFactoryGetCountsLinear(
|
| + name,
|
| + min,
|
| + max,
|
| + bucket_count)) {
|
| + RTC_DCHECK(type == Type::kCounts || type == Type::kCountsLinear);
|
| +}
|
| +
|
| +HistogramBase::HistogramBase(const char* name, Type type, int boundary)
|
| + : histogram_(
|
| + webrtc::metrics::HistogramFactoryGetEnumeration(name, boundary)) {
|
| + // Enumerations should only specify boundary, other types should use the other
|
| + // constructor.
|
| + RTC_DCHECK(type == Type::kEnumeration);
|
| +}
|
| +
|
| +void HistogramBase::AddSample(int sample) const {
|
| + webrtc::metrics::HistogramAdd(histogram_, sample);
|
| +}
|
| +
|
| +// Histograms for counts with exponentionally spaced buckets.
|
| +Histogram::Histogram(const char* name, int max) : Histogram(name, 1, max) {}
|
| +Histogram::Histogram(const char* name, int min, int max)
|
| + : Histogram(name, min, max, 50) {}
|
| +Histogram::Histogram(const char* name, int min, int max, int bucket_count)
|
| + : HistogramBase(name, Type::kCounts, min, max, bucket_count) {}
|
| +
|
| +
|
| +// Histograms with linear spaced buckets.
|
| +HistogramLinear::HistogramLinear(const char* name, int max)
|
| + : HistogramLinear(name, 1, max) {}
|
| +HistogramLinear::HistogramLinear(const char* name, int min, int max)
|
| + : HistogramLinear(name, min, max, 50) {}
|
| +HistogramLinear::HistogramLinear(const char* name,
|
| + int min,
|
| + int max,
|
| + int bucket_count)
|
| + : HistogramBase(name, Type::kCountsLinear, min, max, bucket_count) {}
|
| +
|
| +// Histograms for enumerations, values in [0, boundary) are valid.
|
| +HistogramEnumeration::HistogramEnumeration(const char* name, int boundary)
|
| + : HistogramBase(name, Type::kEnumeration, boundary),
|
| + boundary_(boundary) {}
|
| +void HistogramEnumeration::AddSample(int sample) {
|
| + RTC_DCHECK_GE(sample, 0);
|
| + RTC_DCHECK_LE(sample, boundary_);
|
| + HistogramBase::AddSample(sample);
|
| +}
|
| +
|
| +// Histograms for booleans.
|
| +HistogramBoolean::HistogramBoolean(const char* name)
|
| + : HistogramEnumeration(name, 2) {}
|
| +void HistogramBoolean::AddSample(bool sample) {
|
| + HistogramEnumeration::AddSample(sample ? 1 : 0);
|
| +}
|
| +
|
| +// Histograms for percentages.
|
| +HistogramPercentage::HistogramPercentage(const char* name)
|
| + : HistogramEnumeration(name, 101) {}
|
| +
|
| +} // namespace rtc
|
|
|