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