• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 }
74 
ProvideSystemProfileMetrics(SystemProfileProto * system_profile_proto)75 void DelegatingProvider::ProvideSystemProfileMetrics(
76     SystemProfileProto* system_profile_proto) {
77   // ProvideSystemProfileMetricsWithLogCreationTime() should be called instead.
78   NOTREACHED();
79 }
80 
ProvideSystemProfileMetricsWithLogCreationTime(base::TimeTicks log_creation_time,SystemProfileProto * system_profile_proto)81 void DelegatingProvider::ProvideSystemProfileMetricsWithLogCreationTime(
82     base::TimeTicks log_creation_time,
83     SystemProfileProto* system_profile_proto) {
84   for (auto& provider : metrics_providers_) {
85     provider->ProvideSystemProfileMetricsWithLogCreationTime(
86         log_creation_time, system_profile_proto);
87   }
88 }
89 
HasPreviousSessionData()90 bool DelegatingProvider::HasPreviousSessionData() {
91   // All providers are queried (rather than stopping after the first "true"
92   // response) in case they do any kind of setup work in preparation for
93   // the later call to RecordInitialHistogramSnapshots().
94   bool has_stability_metrics = false;
95   for (auto& provider : metrics_providers_)
96     has_stability_metrics |= provider->HasPreviousSessionData();
97 
98   return has_stability_metrics;
99 }
100 
ProvidePreviousSessionData(ChromeUserMetricsExtension * uma_proto)101 void DelegatingProvider::ProvidePreviousSessionData(
102     ChromeUserMetricsExtension* uma_proto) {
103   for (const auto& provider : metrics_providers_)
104     provider->ProvidePreviousSessionData(uma_proto);
105 }
106 
ProvideCurrentSessionData(ChromeUserMetricsExtension * uma_proto)107 void DelegatingProvider::ProvideCurrentSessionData(
108     ChromeUserMetricsExtension* uma_proto) {
109   for (const auto& provider : metrics_providers_)
110     provider->ProvideCurrentSessionData(uma_proto);
111 }
112 
ProvideCurrentSessionUKMData()113 void DelegatingProvider::ProvideCurrentSessionUKMData() {
114   for (const auto& provider : metrics_providers_)
115     provider->ProvideCurrentSessionUKMData();
116 }
117 
ClearSavedStabilityMetrics()118 void DelegatingProvider::ClearSavedStabilityMetrics() {
119   for (auto& provider : metrics_providers_)
120     provider->ClearSavedStabilityMetrics();
121 }
122 
RecordHistogramSnapshots(base::HistogramSnapshotManager * snapshot_manager)123 void DelegatingProvider::RecordHistogramSnapshots(
124     base::HistogramSnapshotManager* snapshot_manager) {
125   for (auto& provider : metrics_providers_)
126     provider->RecordHistogramSnapshots(snapshot_manager);
127 }
128 
RecordInitialHistogramSnapshots(base::HistogramSnapshotManager * snapshot_manager)129 void DelegatingProvider::RecordInitialHistogramSnapshots(
130     base::HistogramSnapshotManager* snapshot_manager) {
131   for (auto& provider : metrics_providers_)
132     provider->RecordInitialHistogramSnapshots(snapshot_manager);
133 }
134 
135 }  // namespace metrics
136