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