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/delegating_provider.h"
7 #include "base/barrier_closure.h"
8 #include "base/notreached.h"
12 DelegatingProvider::DelegatingProvider() = default;
14 DelegatingProvider::~DelegatingProvider() = default;
16 void DelegatingProvider::RegisterMetricsProvider(
17 std::unique_ptr<MetricsProvider> provider) {
18 metrics_providers_.push_back(std::move(provider));
21 const std::vector<std::unique_ptr<MetricsProvider>>&
22 DelegatingProvider::GetProviders() {
23 return metrics_providers_;
26 void DelegatingProvider::Init() {
27 for (auto& provider : metrics_providers_)
31 void DelegatingProvider::AsyncInit(base::OnceClosure done_callback) {
32 base::RepeatingClosure barrier =
33 base::BarrierClosure(metrics_providers_.size(), std::move(done_callback));
34 for (auto& provider : metrics_providers_) {
35 provider->AsyncInit(barrier);
39 void DelegatingProvider::OnDidCreateMetricsLog() {
40 for (auto& provider : metrics_providers_)
41 provider->OnDidCreateMetricsLog();
44 void DelegatingProvider::OnRecordingEnabled() {
45 for (auto& provider : metrics_providers_)
46 provider->OnRecordingEnabled();
49 void DelegatingProvider::OnRecordingDisabled() {
50 for (auto& provider : metrics_providers_)
51 provider->OnRecordingDisabled();
54 void DelegatingProvider::OnClientStateCleared() {
55 for (auto& provider : metrics_providers_)
56 provider->OnClientStateCleared();
59 void DelegatingProvider::OnAppEnterBackground() {
60 for (auto& provider : metrics_providers_)
61 provider->OnAppEnterBackground();
64 bool DelegatingProvider::HasIndependentMetrics() {
65 // These are collected seperately for each provider.
70 void DelegatingProvider::ProvideSystemProfileMetrics(
71 SystemProfileProto* system_profile_proto) {
72 // ProvideSystemProfileMetricsWithLogCreationTime() should be called instead.
76 void DelegatingProvider::ProvideSystemProfileMetricsWithLogCreationTime(
77 base::TimeTicks log_creation_time,
78 SystemProfileProto* system_profile_proto) {
79 for (auto& provider : metrics_providers_) {
80 provider->ProvideSystemProfileMetricsWithLogCreationTime(
81 log_creation_time, system_profile_proto);
85 bool DelegatingProvider::HasPreviousSessionData() {
86 // All providers are queried (rather than stopping after the first "true"
87 // response) in case they do any kind of setup work in preparation for
88 // the later call to RecordInitialHistogramSnapshots().
89 bool has_stability_metrics = false;
90 for (auto& provider : metrics_providers_)
91 has_stability_metrics |= provider->HasPreviousSessionData();
93 return has_stability_metrics;
96 void DelegatingProvider::ProvidePreviousSessionData(
97 ChromeUserMetricsExtension* uma_proto) {
98 for (const auto& provider : metrics_providers_)
99 provider->ProvidePreviousSessionData(uma_proto);
102 void DelegatingProvider::ProvideCurrentSessionData(
103 ChromeUserMetricsExtension* uma_proto) {
104 for (const auto& provider : metrics_providers_)
105 provider->ProvideCurrentSessionData(uma_proto);
108 void DelegatingProvider::ProvideCurrentSessionUKMData() {
109 for (const auto& provider : metrics_providers_)
110 provider->ProvideCurrentSessionUKMData();
113 void DelegatingProvider::ClearSavedStabilityMetrics() {
114 for (auto& provider : metrics_providers_)
115 provider->ClearSavedStabilityMetrics();
118 void DelegatingProvider::RecordHistogramSnapshots(
119 base::HistogramSnapshotManager* snapshot_manager) {
120 for (auto& provider : metrics_providers_)
121 provider->RecordHistogramSnapshots(snapshot_manager);
124 void DelegatingProvider::RecordInitialHistogramSnapshots(
125 base::HistogramSnapshotManager* snapshot_manager) {
126 for (auto& provider : metrics_providers_)
127 provider->RecordInitialHistogramSnapshots(snapshot_manager);
130 } // namespace metrics