1 // Copyright 2017 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "components/metrics/single_sample_metrics.h"
10 #include "base/metrics/single_sample_metrics.h"
11 #include "base/threading/thread_checker.h"
12 #include "components/metrics/single_sample_metrics_factory_impl.h"
13 #include "mojo/public/cpp/bindings/pending_receiver.h"
14 #include "mojo/public/cpp/bindings/self_owned_receiver.h"
19 class MojoSingleSampleMetric : public mojom::SingleSampleMetric {
21 MojoSingleSampleMetric(const std::string& histogram_name,
22 base::HistogramBase::Sample min,
23 base::HistogramBase::Sample max,
24 uint32_t bucket_count,
26 : metric_(histogram_name, min, max, bucket_count, flags) {}
28 MojoSingleSampleMetric(const MojoSingleSampleMetric&) = delete;
29 MojoSingleSampleMetric& operator=(const MojoSingleSampleMetric&) = delete;
31 ~MojoSingleSampleMetric() override {}
34 // mojom::SingleSampleMetric:
35 void SetSample(base::HistogramBase::Sample sample) override {
36 metric_.SetSample(sample);
39 base::DefaultSingleSampleMetric metric_;
42 class MojoSingleSampleMetricsProvider
43 : public mojom::SingleSampleMetricsProvider {
45 MojoSingleSampleMetricsProvider() {}
47 MojoSingleSampleMetricsProvider(const MojoSingleSampleMetricsProvider&) =
49 MojoSingleSampleMetricsProvider& operator=(
50 const MojoSingleSampleMetricsProvider&) = delete;
52 ~MojoSingleSampleMetricsProvider() override {
53 DCHECK(thread_checker_.CalledOnValidThread());
57 // mojom::SingleSampleMetricsProvider:
58 void AcquireSingleSampleMetric(
59 const std::string& histogram_name,
60 base::HistogramBase::Sample min,
61 base::HistogramBase::Sample max,
62 uint32_t bucket_count,
64 mojo::PendingReceiver<mojom::SingleSampleMetric> receiver) override {
65 DCHECK(thread_checker_.CalledOnValidThread());
66 mojo::MakeSelfOwnedReceiver(
67 std::make_unique<MojoSingleSampleMetric>(histogram_name, min, max,
72 // Providers must be created, used on, and destroyed on the same thread.
73 base::ThreadChecker thread_checker_;
79 void InitializeSingleSampleMetricsFactory(CreateProviderCB create_provider_cb) {
80 base::SingleSampleMetricsFactory::SetFactory(
81 std::make_unique<SingleSampleMetricsFactoryImpl>(
82 std::move(create_provider_cb)));
86 void CreateSingleSampleMetricsProvider(
87 mojo::PendingReceiver<mojom::SingleSampleMetricsProvider> receiver) {
88 mojo::MakeSelfOwnedReceiver(
89 std::make_unique<MojoSingleSampleMetricsProvider>(), std::move(receiver));
92 } // namespace metrics