xref: /aosp_15_r20/external/cronet/components/metrics/delegating_provider.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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.
4 
5 #include "components/metrics/delegating_provider.h"
6 
7 #include "base/barrier_closure.h"
8 #include "base/notreached.h"
9 
10 namespace metrics {
11 
12 DelegatingProvider::DelegatingProvider() = default;
13 
14 DelegatingProvider::~DelegatingProvider() = default;
15 
RegisterMetricsProvider(std::unique_ptr<MetricsProvider> provider)16 void DelegatingProvider::RegisterMetricsProvider(
17     std::unique_ptr<MetricsProvider> provider) {
18   metrics_providers_.push_back(std::move(provider));
19 }
20 
21 const std::vector<std::unique_ptr<MetricsProvider>>&
GetProviders()22 DelegatingProvider::GetProviders() {
23   return metrics_providers_;
24 }
25 
Init()26 void DelegatingProvider::Init() {
27   for (auto& provider : metrics_providers_)
28     provider->Init();
29 }
30 
AsyncInit(base::OnceClosure done_callback)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);
36   }
37 }
38 
OnDidCreateMetricsLog()39 void DelegatingProvider::OnDidCreateMetricsLog() {
40   for (auto& provider : metrics_providers_)
41     provider->OnDidCreateMetricsLog();
42 }
43 
OnRecordingEnabled()44 void DelegatingProvider::OnRecordingEnabled() {
45   for (auto& provider : metrics_providers_)
46     provider->OnRecordingEnabled();
47 }
48 
OnRecordingDisabled()49 void DelegatingProvider::OnRecordingDisabled() {
50   for (auto& provider : metrics_providers_)
51     provider->OnRecordingDisabled();
52 }
53 
OnClientStateCleared()54 void DelegatingProvider::OnClientStateCleared() {
55   for (auto& provider : metrics_providers_)
56     provider->OnClientStateCleared();
57 }
58 
OnAppEnterBackground()59 void DelegatingProvider::OnAppEnterBackground() {
60   for (auto& provider : metrics_providers_)
61     provider->OnAppEnterBackground();
62 }
63 
OnPageLoadStarted()64 void DelegatingProvider::OnPageLoadStarted() {
65   for (auto& provider : metrics_providers_) {
66     provider->OnPageLoadStarted();
67   }
68 }
69 
HasIndependentMetrics()70 bool DelegatingProvider::HasIndependentMetrics() {
71   // These are collected seperately for each provider.
72   NOTREACHED();
73   return false;
74 }
75 
ProvideSystemProfileMetrics(SystemProfileProto * system_profile_proto)76 void DelegatingProvider::ProvideSystemProfileMetrics(
77     SystemProfileProto* system_profile_proto) {
78   // ProvideSystemProfileMetricsWithLogCreationTime() should be called instead.
79   NOTREACHED();
80 }
81 
ProvideSystemProfileMetricsWithLogCreationTime(base::TimeTicks log_creation_time,SystemProfileProto * system_profile_proto)82 void DelegatingProvider::ProvideSystemProfileMetricsWithLogCreationTime(
83     base::TimeTicks log_creation_time,
84     SystemProfileProto* system_profile_proto) {
85   for (auto& provider : metrics_providers_) {
86     provider->ProvideSystemProfileMetricsWithLogCreationTime(
87         log_creation_time, system_profile_proto);
88   }
89 }
90 
HasPreviousSessionData()91 bool DelegatingProvider::HasPreviousSessionData() {
92   // All providers are queried (rather than stopping after the first "true"
93   // response) in case they do any kind of setup work in preparation for
94   // the later call to RecordInitialHistogramSnapshots().
95   bool has_stability_metrics = false;
96   for (auto& provider : metrics_providers_)
97     has_stability_metrics |= provider->HasPreviousSessionData();
98 
99   return has_stability_metrics;
100 }
101 
ProvidePreviousSessionData(ChromeUserMetricsExtension * uma_proto)102 void DelegatingProvider::ProvidePreviousSessionData(
103     ChromeUserMetricsExtension* uma_proto) {
104   for (const auto& provider : metrics_providers_)
105     provider->ProvidePreviousSessionData(uma_proto);
106 }
107 
ProvideCurrentSessionData(ChromeUserMetricsExtension * uma_proto)108 void DelegatingProvider::ProvideCurrentSessionData(
109     ChromeUserMetricsExtension* uma_proto) {
110   for (const auto& provider : metrics_providers_)
111     provider->ProvideCurrentSessionData(uma_proto);
112 }
113 
ProvideCurrentSessionUKMData()114 void DelegatingProvider::ProvideCurrentSessionUKMData() {
115   for (const auto& provider : metrics_providers_)
116     provider->ProvideCurrentSessionUKMData();
117 }
118 
ClearSavedStabilityMetrics()119 void DelegatingProvider::ClearSavedStabilityMetrics() {
120   for (auto& provider : metrics_providers_)
121     provider->ClearSavedStabilityMetrics();
122 }
123 
RecordHistogramSnapshots(base::HistogramSnapshotManager * snapshot_manager)124 void DelegatingProvider::RecordHistogramSnapshots(
125     base::HistogramSnapshotManager* snapshot_manager) {
126   for (auto& provider : metrics_providers_)
127     provider->RecordHistogramSnapshots(snapshot_manager);
128 }
129 
RecordInitialHistogramSnapshots(base::HistogramSnapshotManager * snapshot_manager)130 void DelegatingProvider::RecordInitialHistogramSnapshots(
131     base::HistogramSnapshotManager* snapshot_manager) {
132   for (auto& provider : metrics_providers_)
133     provider->RecordInitialHistogramSnapshots(snapshot_manager);
134 }
135 
136 }  // namespace metrics
137