| Index: base/metrics/single_sample_metrics.cc
|
| diff --git a/base/metrics/single_sample_metrics.cc b/base/metrics/single_sample_metrics.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..66fdb14bda5afc7d61da10ee77f1713afd18a1e6
|
| --- /dev/null
|
| +++ b/base/metrics/single_sample_metrics.cc
|
| @@ -0,0 +1,77 @@
|
| +// Copyright 2017 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "base/metrics/single_sample_metrics.h"
|
| +
|
| +#include "base/memory/ptr_util.h"
|
| +#include "base/metrics/histogram.h"
|
| +
|
| +namespace base {
|
| +
|
| +static SingleSampleMetricsFactory* g_factory = nullptr;
|
| +
|
| +// static
|
| +SingleSampleMetricsFactory* SingleSampleMetricsFactory::Get() {
|
| + if (!g_factory)
|
| + g_factory = new DefaultSingleSampleMetricsFactory();
|
| +
|
| + return g_factory;
|
| +}
|
| +
|
| +// static
|
| +void SingleSampleMetricsFactory::SetFactory(
|
| + std::unique_ptr<SingleSampleMetricsFactory> factory) {
|
| + DCHECK(!g_factory);
|
| + g_factory = factory.release();
|
| +}
|
| +
|
| +// static
|
| +void SingleSampleMetricsFactory::DeleteFactoryForTesting() {
|
| + DCHECK(g_factory);
|
| + delete g_factory;
|
| + g_factory = nullptr;
|
| +}
|
| +
|
| +std::unique_ptr<SingleSampleMetric>
|
| +DefaultSingleSampleMetricsFactory::CreateCustomCountsMetric(
|
| + const std::string& histogram_name,
|
| + HistogramBase::Sample min,
|
| + HistogramBase::Sample max,
|
| + uint32_t bucket_count) {
|
| + return MakeUnique<DefaultSingleSampleMetric>(
|
| + histogram_name, min, max, bucket_count,
|
| + HistogramBase::kUmaTargetedHistogramFlag);
|
| +}
|
| +
|
| +DefaultSingleSampleMetric::DefaultSingleSampleMetric(
|
| + const std::string& histogram_name,
|
| + HistogramBase::Sample min,
|
| + HistogramBase::Sample max,
|
| + uint32_t bucket_count,
|
| + int32_t flags)
|
| + : histogram_(Histogram::FactoryGet(histogram_name,
|
| + min,
|
| + max,
|
| + bucket_count,
|
| + flags)) {
|
| + // Bad construction parameters may lead to |histogram_| being null; DCHECK to
|
| + // find accidental errors in production. We must still handle the nullptr in
|
| + // destruction though since this construction may come from another untrusted
|
| + // process.
|
| + DCHECK(histogram_);
|
| +}
|
| +
|
| +DefaultSingleSampleMetric::~DefaultSingleSampleMetric() {
|
| + // |histogram_| may be nullptr if bad construction parameters are given.
|
| + if (sample_ < 0 || !histogram_)
|
| + return;
|
| + histogram_->Add(sample_);
|
| +}
|
| +
|
| +void DefaultSingleSampleMetric::SetSample(HistogramBase::Sample sample) {
|
| + DCHECK_GE(sample, 0);
|
| + sample_ = sample;
|
| +}
|
| +
|
| +} // namespace base
|
|
|