Index: base/metrics/field_trial.cc |
diff --git a/base/metrics/field_trial.cc b/base/metrics/field_trial.cc |
index 7efca7a3ef53cdaa8093b880b44d7e469bebc27d..e03c94c5969950bc7a82122b2f7602d540aeccb8 100644 |
--- a/base/metrics/field_trial.cc |
+++ b/base/metrics/field_trial.cc |
@@ -223,6 +223,20 @@ bool FieldTrial::GetActiveGroup(ActiveGroup* active_group) const { |
return true; |
} |
+bool FieldTrial::GetState(FieldTrialState* field_trial_state) const { |
+ if (!enable_field_trial_) |
+ return false; |
+ field_trial_state->trial_name = trial_name_; |
+ // If the group name is empty (hasn't been finalized yet), use the default |
+ // group name instead. |
+ if (!group_name_.empty()) |
+ field_trial_state->group_name = group_name_; |
+ else |
+ field_trial_state->group_name = default_group_name_; |
+ field_trial_state->activated = group_reported_; |
+ return true; |
+} |
+ |
//------------------------------------------------------------------------------ |
// FieldTrialList methods and members. |
@@ -387,6 +401,29 @@ void FieldTrialList::StatesToString(std::string* output) { |
} |
// static |
+void FieldTrialList::AllStatesToString(std::string* output) { |
+ if (!global_) |
+ return; |
+ AutoLock auto_lock(global_->lock_); |
+ |
+ for (const auto& registered : global_->registered_) { |
+ FieldTrial::FieldTrialState trial; |
+ if (!registered.second->GetState(&trial)) |
+ continue; |
+ DCHECK_EQ(std::string::npos, |
+ trial.trial_name.find(kPersistentStringSeparator)); |
+ DCHECK_EQ(std::string::npos, |
+ trial.group_name.find(kPersistentStringSeparator)); |
+ if (trial.activated) |
+ output->append(1, kActivationMarker); |
+ output->append(trial.trial_name); |
+ output->append(1, kPersistentStringSeparator); |
+ output->append(trial.group_name); |
+ output->append(1, kPersistentStringSeparator); |
+ } |
+} |
+ |
+// static |
void FieldTrialList::GetActiveFieldTrialGroups( |
FieldTrial::ActiveGroups* active_groups) { |
DCHECK(active_groups->empty()); |