xref: /aosp_15_r20/external/cronet/components/metrics/delegating_provider.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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