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 #ifndef COMPONENTS_METRICS_DELEGATING_PROVIDER_H_ 6*6777b538SAndroid Build Coastguard Worker #define COMPONENTS_METRICS_DELEGATING_PROVIDER_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <memory> 9*6777b538SAndroid Build Coastguard Worker #include <vector> 10*6777b538SAndroid Build Coastguard Worker 11*6777b538SAndroid Build Coastguard Worker #include "components/metrics/metrics_provider.h" 12*6777b538SAndroid Build Coastguard Worker 13*6777b538SAndroid Build Coastguard Worker namespace metrics { 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Worker // A MetricsProvider which manages a set of other MetricsProviders. 16*6777b538SAndroid Build Coastguard Worker // Calls to this providers methods are forwarded to all of the registered 17*6777b538SAndroid Build Coastguard Worker // metrics providers, allowing the group to be handled as a single provider. 18*6777b538SAndroid Build Coastguard Worker class DelegatingProvider final : public MetricsProvider { 19*6777b538SAndroid Build Coastguard Worker public: 20*6777b538SAndroid Build Coastguard Worker DelegatingProvider(); 21*6777b538SAndroid Build Coastguard Worker 22*6777b538SAndroid Build Coastguard Worker DelegatingProvider(const DelegatingProvider&) = delete; 23*6777b538SAndroid Build Coastguard Worker DelegatingProvider& operator=(const DelegatingProvider&) = delete; 24*6777b538SAndroid Build Coastguard Worker 25*6777b538SAndroid Build Coastguard Worker ~DelegatingProvider() override; 26*6777b538SAndroid Build Coastguard Worker 27*6777b538SAndroid Build Coastguard Worker // Registers an additional MetricsProvider to forward calls to. 28*6777b538SAndroid Build Coastguard Worker void RegisterMetricsProvider(std::unique_ptr<MetricsProvider> delegate); 29*6777b538SAndroid Build Coastguard Worker 30*6777b538SAndroid Build Coastguard Worker // Gets the list of registered providers. 31*6777b538SAndroid Build Coastguard Worker const std::vector<std::unique_ptr<MetricsProvider>>& GetProviders(); 32*6777b538SAndroid Build Coastguard Worker 33*6777b538SAndroid Build Coastguard Worker // MetricsProvider: 34*6777b538SAndroid Build Coastguard Worker void Init() override; 35*6777b538SAndroid Build Coastguard Worker void AsyncInit(base::OnceClosure done_callback) override; 36*6777b538SAndroid Build Coastguard Worker void OnDidCreateMetricsLog() override; 37*6777b538SAndroid Build Coastguard Worker void OnRecordingEnabled() override; 38*6777b538SAndroid Build Coastguard Worker void OnRecordingDisabled() override; 39*6777b538SAndroid Build Coastguard Worker void OnClientStateCleared() override; 40*6777b538SAndroid Build Coastguard Worker void OnAppEnterBackground() override; 41*6777b538SAndroid Build Coastguard Worker void OnPageLoadStarted() override; 42*6777b538SAndroid Build Coastguard Worker bool HasIndependentMetrics() override; 43*6777b538SAndroid Build Coastguard Worker void ProvideSystemProfileMetrics( 44*6777b538SAndroid Build Coastguard Worker SystemProfileProto* system_profile_proto) override; 45*6777b538SAndroid Build Coastguard Worker void ProvideSystemProfileMetricsWithLogCreationTime( 46*6777b538SAndroid Build Coastguard Worker base::TimeTicks log_creation_time, 47*6777b538SAndroid Build Coastguard Worker SystemProfileProto* system_profile_proto) override; 48*6777b538SAndroid Build Coastguard Worker bool HasPreviousSessionData() override; 49*6777b538SAndroid Build Coastguard Worker void ProvidePreviousSessionData( 50*6777b538SAndroid Build Coastguard Worker ChromeUserMetricsExtension* uma_proto) override; 51*6777b538SAndroid Build Coastguard Worker void ProvideCurrentSessionData( 52*6777b538SAndroid Build Coastguard Worker ChromeUserMetricsExtension* uma_proto) override; 53*6777b538SAndroid Build Coastguard Worker void ProvideCurrentSessionUKMData() override; 54*6777b538SAndroid Build Coastguard Worker void ClearSavedStabilityMetrics() override; 55*6777b538SAndroid Build Coastguard Worker void RecordHistogramSnapshots( 56*6777b538SAndroid Build Coastguard Worker base::HistogramSnapshotManager* snapshot_manager) override; 57*6777b538SAndroid Build Coastguard Worker void RecordInitialHistogramSnapshots( 58*6777b538SAndroid Build Coastguard Worker base::HistogramSnapshotManager* snapshot_manager) override; 59*6777b538SAndroid Build Coastguard Worker 60*6777b538SAndroid Build Coastguard Worker private: 61*6777b538SAndroid Build Coastguard Worker std::vector<std::unique_ptr<MetricsProvider>> metrics_providers_; 62*6777b538SAndroid Build Coastguard Worker }; 63*6777b538SAndroid Build Coastguard Worker 64*6777b538SAndroid Build Coastguard Worker } // namespace metrics 65*6777b538SAndroid Build Coastguard Worker 66*6777b538SAndroid Build Coastguard Worker #endif // COMPONENTS_METRICS_DELEGATING_PROVIDER_H_ 67