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 Workervoid 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 WorkerDelegatingProvider::GetProviders() { 23*6777b538SAndroid Build Coastguard Worker return metrics_providers_; 24*6777b538SAndroid Build Coastguard Worker } 25*6777b538SAndroid Build Coastguard Worker Init()26*6777b538SAndroid Build Coastguard Workervoid 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 Workervoid 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 Workervoid 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 Workervoid 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 Workervoid 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 Workervoid 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 Workervoid 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 Workervoid 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 Workerbool 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 Workervoid 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 Workervoid 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 Workerbool 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 Workervoid 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 Workervoid 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 Workervoid 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 Workervoid 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 Workervoid 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 Workervoid 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