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)16void 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()22DelegatingProvider::GetProviders() { 23 return metrics_providers_; 24 } 25 Init()26void DelegatingProvider::Init() { 27 for (auto& provider : metrics_providers_) 28 provider->Init(); 29 } 30 AsyncInit(base::OnceClosure done_callback)31void 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()39void DelegatingProvider::OnDidCreateMetricsLog() { 40 for (auto& provider : metrics_providers_) 41 provider->OnDidCreateMetricsLog(); 42 } 43 OnRecordingEnabled()44void DelegatingProvider::OnRecordingEnabled() { 45 for (auto& provider : metrics_providers_) 46 provider->OnRecordingEnabled(); 47 } 48 OnRecordingDisabled()49void DelegatingProvider::OnRecordingDisabled() { 50 for (auto& provider : metrics_providers_) 51 provider->OnRecordingDisabled(); 52 } 53 OnClientStateCleared()54void DelegatingProvider::OnClientStateCleared() { 55 for (auto& provider : metrics_providers_) 56 provider->OnClientStateCleared(); 57 } 58 OnAppEnterBackground()59void DelegatingProvider::OnAppEnterBackground() { 60 for (auto& provider : metrics_providers_) 61 provider->OnAppEnterBackground(); 62 } 63 OnPageLoadStarted()64void DelegatingProvider::OnPageLoadStarted() { 65 for (auto& provider : metrics_providers_) { 66 provider->OnPageLoadStarted(); 67 } 68 } 69 HasIndependentMetrics()70bool DelegatingProvider::HasIndependentMetrics() { 71 // These are collected seperately for each provider. 72 NOTREACHED(); 73 return false; 74 } 75 ProvideSystemProfileMetrics(SystemProfileProto * system_profile_proto)76void 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)82void 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()91bool 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)102void DelegatingProvider::ProvidePreviousSessionData( 103 ChromeUserMetricsExtension* uma_proto) { 104 for (const auto& provider : metrics_providers_) 105 provider->ProvidePreviousSessionData(uma_proto); 106 } 107 ProvideCurrentSessionData(ChromeUserMetricsExtension * uma_proto)108void DelegatingProvider::ProvideCurrentSessionData( 109 ChromeUserMetricsExtension* uma_proto) { 110 for (const auto& provider : metrics_providers_) 111 provider->ProvideCurrentSessionData(uma_proto); 112 } 113 ProvideCurrentSessionUKMData()114void DelegatingProvider::ProvideCurrentSessionUKMData() { 115 for (const auto& provider : metrics_providers_) 116 provider->ProvideCurrentSessionUKMData(); 117 } 118 ClearSavedStabilityMetrics()119void DelegatingProvider::ClearSavedStabilityMetrics() { 120 for (auto& provider : metrics_providers_) 121 provider->ClearSavedStabilityMetrics(); 122 } 123 RecordHistogramSnapshots(base::HistogramSnapshotManager * snapshot_manager)124void 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)130void DelegatingProvider::RecordInitialHistogramSnapshots( 131 base::HistogramSnapshotManager* snapshot_manager) { 132 for (auto& provider : metrics_providers_) 133 provider->RecordInitialHistogramSnapshots(snapshot_manager); 134 } 135 136 } // namespace metrics 137