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.
5 #ifndef COMPONENTS_METRICS_DELEGATING_PROVIDER_H_
6 #define COMPONENTS_METRICS_DELEGATING_PROVIDER_H_
11 #include "components/metrics/metrics_provider.h"
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 {
22 DelegatingProvider(const DelegatingProvider&) = delete;
23 DelegatingProvider& operator=(const DelegatingProvider&) = delete;
25 ~DelegatingProvider() override;
27 // Registers an additional MetricsProvider to forward calls to.
28 void RegisterMetricsProvider(std::unique_ptr<MetricsProvider> delegate);
30 // Gets the list of registered providers.
31 const std::vector<std::unique_ptr<MetricsProvider>>& GetProviders();
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 bool HasIndependentMetrics() override;
42 void ProvideSystemProfileMetrics(
43 SystemProfileProto* system_profile_proto) override;
44 void ProvideSystemProfileMetricsWithLogCreationTime(
45 base::TimeTicks log_creation_time,
46 SystemProfileProto* system_profile_proto) override;
47 bool HasPreviousSessionData() override;
48 void ProvidePreviousSessionData(
49 ChromeUserMetricsExtension* uma_proto) override;
50 void ProvideCurrentSessionData(
51 ChromeUserMetricsExtension* uma_proto) override;
52 void ProvideCurrentSessionUKMData() override;
53 void ClearSavedStabilityMetrics() override;
54 void RecordHistogramSnapshots(
55 base::HistogramSnapshotManager* snapshot_manager) override;
56 void RecordInitialHistogramSnapshots(
57 base::HistogramSnapshotManager* snapshot_manager) override;
60 std::vector<std::unique_ptr<MetricsProvider>> metrics_providers_;
63 } // namespace metrics
65 #endif // COMPONENTS_METRICS_DELEGATING_PROVIDER_H_