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