// Copyright 2017 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_METRICS_FIELD_TRIALS_PROVIDER_H_ #define COMPONENTS_METRICS_FIELD_TRIALS_PROVIDER_H_ #include "base/memory/raw_ptr.h" #include "base/strings/string_piece.h" #include "base/time/time.h" #include "components/metrics/metrics_provider.h" #include "third_party/metrics_proto/chrome_user_metrics_extension.pb.h" // TODO(crbug/507665): Once MetricsProvider/SystemProfileProto are moved into // //services/metrics, then //components/variations can depend on them, and // this should be moved there. namespace variations { class SyntheticTrialRegistry; struct ActiveGroupId; class FieldTrialsProvider : public metrics::MetricsProvider { public: // |registry| must outlive this metrics provider. FieldTrialsProvider(SyntheticTrialRegistry* registry, base::StringPiece suffix); FieldTrialsProvider(const FieldTrialsProvider&) = delete; FieldTrialsProvider& operator=(const FieldTrialsProvider&) = delete; ~FieldTrialsProvider() override; // metrics::MetricsProvider: void ProvideSystemProfileMetrics( metrics::SystemProfileProto* system_profile_proto) override; void ProvideSystemProfileMetricsWithLogCreationTime( base::TimeTicks log_creation_time, metrics::SystemProfileProto* system_profile_proto) override; void ProvideCurrentSessionData( metrics::ChromeUserMetricsExtension* uma_proto) override; // Sets |log_creation_time_| to |time|. void SetLogCreationTimeForTesting(base::TimeTicks time); private: // Populates |field_trial_ids| with currently active field trials groups. The // trial and group names are suffixed with |suffix_| before being hashed. void GetFieldTrialIds(std::vector* field_trial_ids) const; // Gets active FieldTrials and SyntheticFieldTrials and populates // |system_profile_proto| with them. void GetAndWriteFieldTrials( metrics::SystemProfileProto* system_profile_proto) const; // The most recent time passed to // ProvideSystemProfileMetricsWithLogCreationTime(). base::TimeTicks log_creation_time_; raw_ptr registry_; // Suffix used for the field trial names before they are hashed for uploads. std::string suffix_; }; } // namespace variations #endif // COMPONENTS_METRICS_FIELD_TRIALS_PROVIDER_H_