xref: /aosp_15_r20/external/cronet/components/metrics/field_trials_provider.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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_FIELD_TRIALS_PROVIDER_H_
6*6777b538SAndroid Build Coastguard Worker #define COMPONENTS_METRICS_FIELD_TRIALS_PROVIDER_H_
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker #include "base/memory/raw_ptr.h"
9*6777b538SAndroid Build Coastguard Worker #include "base/strings/string_piece.h"
10*6777b538SAndroid Build Coastguard Worker #include "base/time/time.h"
11*6777b538SAndroid Build Coastguard Worker #include "components/metrics/metrics_provider.h"
12*6777b538SAndroid Build Coastguard Worker #include "third_party/metrics_proto/chrome_user_metrics_extension.pb.h"
13*6777b538SAndroid Build Coastguard Worker 
14*6777b538SAndroid Build Coastguard Worker // TODO(crbug/507665): Once MetricsProvider/SystemProfileProto are moved into
15*6777b538SAndroid Build Coastguard Worker // //services/metrics, then //components/variations can depend on them, and
16*6777b538SAndroid Build Coastguard Worker // this should be moved there.
17*6777b538SAndroid Build Coastguard Worker namespace variations {
18*6777b538SAndroid Build Coastguard Worker 
19*6777b538SAndroid Build Coastguard Worker class SyntheticTrialRegistry;
20*6777b538SAndroid Build Coastguard Worker struct ActiveGroupId;
21*6777b538SAndroid Build Coastguard Worker 
22*6777b538SAndroid Build Coastguard Worker class FieldTrialsProvider : public metrics::MetricsProvider {
23*6777b538SAndroid Build Coastguard Worker  public:
24*6777b538SAndroid Build Coastguard Worker   // |registry| must outlive this metrics provider.
25*6777b538SAndroid Build Coastguard Worker   FieldTrialsProvider(SyntheticTrialRegistry* registry,
26*6777b538SAndroid Build Coastguard Worker                       base::StringPiece suffix);
27*6777b538SAndroid Build Coastguard Worker 
28*6777b538SAndroid Build Coastguard Worker   FieldTrialsProvider(const FieldTrialsProvider&) = delete;
29*6777b538SAndroid Build Coastguard Worker   FieldTrialsProvider& operator=(const FieldTrialsProvider&) = delete;
30*6777b538SAndroid Build Coastguard Worker 
31*6777b538SAndroid Build Coastguard Worker   ~FieldTrialsProvider() override;
32*6777b538SAndroid Build Coastguard Worker 
33*6777b538SAndroid Build Coastguard Worker   // metrics::MetricsProvider:
34*6777b538SAndroid Build Coastguard Worker   void ProvideSystemProfileMetrics(
35*6777b538SAndroid Build Coastguard Worker       metrics::SystemProfileProto* system_profile_proto) override;
36*6777b538SAndroid Build Coastguard Worker   void ProvideSystemProfileMetricsWithLogCreationTime(
37*6777b538SAndroid Build Coastguard Worker       base::TimeTicks log_creation_time,
38*6777b538SAndroid Build Coastguard Worker       metrics::SystemProfileProto* system_profile_proto) override;
39*6777b538SAndroid Build Coastguard Worker   void ProvideCurrentSessionData(
40*6777b538SAndroid Build Coastguard Worker       metrics::ChromeUserMetricsExtension* uma_proto) override;
41*6777b538SAndroid Build Coastguard Worker 
42*6777b538SAndroid Build Coastguard Worker   // Sets |log_creation_time_| to |time|.
43*6777b538SAndroid Build Coastguard Worker   void SetLogCreationTimeForTesting(base::TimeTicks time);
44*6777b538SAndroid Build Coastguard Worker 
45*6777b538SAndroid Build Coastguard Worker  private:
46*6777b538SAndroid Build Coastguard Worker   // Populates |field_trial_ids| with currently active field trials groups. The
47*6777b538SAndroid Build Coastguard Worker   // trial and group names are suffixed with |suffix_| before being hashed.
48*6777b538SAndroid Build Coastguard Worker   void GetFieldTrialIds(std::vector<ActiveGroupId>* field_trial_ids) const;
49*6777b538SAndroid Build Coastguard Worker 
50*6777b538SAndroid Build Coastguard Worker   // Gets active FieldTrials and SyntheticFieldTrials and populates
51*6777b538SAndroid Build Coastguard Worker   // |system_profile_proto| with them.
52*6777b538SAndroid Build Coastguard Worker   void GetAndWriteFieldTrials(
53*6777b538SAndroid Build Coastguard Worker       metrics::SystemProfileProto* system_profile_proto) const;
54*6777b538SAndroid Build Coastguard Worker 
55*6777b538SAndroid Build Coastguard Worker   // The most recent time passed to
56*6777b538SAndroid Build Coastguard Worker   // ProvideSystemProfileMetricsWithLogCreationTime().
57*6777b538SAndroid Build Coastguard Worker   base::TimeTicks log_creation_time_;
58*6777b538SAndroid Build Coastguard Worker 
59*6777b538SAndroid Build Coastguard Worker   raw_ptr<SyntheticTrialRegistry> registry_;
60*6777b538SAndroid Build Coastguard Worker 
61*6777b538SAndroid Build Coastguard Worker   // Suffix used for the field trial names before they are hashed for uploads.
62*6777b538SAndroid Build Coastguard Worker   std::string suffix_;
63*6777b538SAndroid Build Coastguard Worker };
64*6777b538SAndroid Build Coastguard Worker 
65*6777b538SAndroid Build Coastguard Worker }  // namespace variations
66*6777b538SAndroid Build Coastguard Worker 
67*6777b538SAndroid Build Coastguard Worker #endif  // COMPONENTS_METRICS_FIELD_TRIALS_PROVIDER_H_
68