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 } 74 ProvideSystemProfileMetrics(SystemProfileProto * system_profile_proto)75void 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)81void 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()90bool 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)101void DelegatingProvider::ProvidePreviousSessionData( 102 ChromeUserMetricsExtension* uma_proto) { 103 for (const auto& provider : metrics_providers_) 104 provider->ProvidePreviousSessionData(uma_proto); 105 } 106 ProvideCurrentSessionData(ChromeUserMetricsExtension * uma_proto)107void DelegatingProvider::ProvideCurrentSessionData( 108 ChromeUserMetricsExtension* uma_proto) { 109 for (const auto& provider : metrics_providers_) 110 provider->ProvideCurrentSessionData(uma_proto); 111 } 112 ProvideCurrentSessionUKMData()113void DelegatingProvider::ProvideCurrentSessionUKMData() { 114 for (const auto& provider : metrics_providers_) 115 provider->ProvideCurrentSessionUKMData(); 116 } 117 ClearSavedStabilityMetrics()118void DelegatingProvider::ClearSavedStabilityMetrics() { 119 for (auto& provider : metrics_providers_) 120 provider->ClearSavedStabilityMetrics(); 121 } 122 RecordHistogramSnapshots(base::HistogramSnapshotManager * snapshot_manager)123void 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)129void DelegatingProvider::RecordInitialHistogramSnapshots( 130 base::HistogramSnapshotManager* snapshot_manager) { 131 for (auto& provider : metrics_providers_) 132 provider->RecordInitialHistogramSnapshots(snapshot_manager); 133 } 134 135 } // namespace metrics 136