summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--base/metrics/field_trial.cc25
-rw-r--r--base/metrics/field_trial.h5
2 files changed, 17 insertions, 13 deletions
diff --git a/base/metrics/field_trial.cc b/base/metrics/field_trial.cc
index aa3427a..14e16ea 100644
--- a/base/metrics/field_trial.cc
+++ b/base/metrics/field_trial.cc
@@ -144,11 +144,7 @@ int FieldTrial::AppendGroup(const std::string& name,
int FieldTrial::group() {
FinalizeGroupChoice();
- if (!group_reported_) {
- if (enable_field_trial_)
- FieldTrialList::NotifyFieldTrialGroupSelection(trial_name_, group_name_);
- group_reported_ = true;
- }
+ FieldTrialList::NotifyFieldTrialGroupSelection(this);
return group_;
}
@@ -438,15 +434,24 @@ void FieldTrialList::RemoveObserver(Observer* observer) {
}
// static
-void FieldTrialList::NotifyFieldTrialGroupSelection(
- const std::string& trial_name,
- const std::string& group_name) {
+void FieldTrialList::NotifyFieldTrialGroupSelection(FieldTrial* field_trial) {
if (!global_)
return;
+
+ {
+ AutoLock auto_lock(global_->lock_);
+ if (field_trial->group_reported_)
+ return;
+ field_trial->group_reported_ = true;
+ }
+
+ if (!field_trial->enable_field_trial_)
+ return;
+
global_->observer_list_->Notify(
&FieldTrialList::Observer::OnFieldTrialGroupFinalized,
- trial_name,
- group_name);
+ field_trial->trial_name(),
+ field_trial->group_name_internal());
}
// static
diff --git a/base/metrics/field_trial.h b/base/metrics/field_trial.h
index 556ee40..007c1da 100644
--- a/base/metrics/field_trial.h
+++ b/base/metrics/field_trial.h
@@ -394,9 +394,8 @@ class BASE_EXPORT FieldTrialList {
// Remove an observer.
static void RemoveObserver(Observer* observer);
- // Notify all observers that a group is finalized for the named Trial.
- static void NotifyFieldTrialGroupSelection(const std::string& trial_name,
- const std::string& group_name);
+ // Notify all observers that a group has been finalized for |field_trial|.
+ static void NotifyFieldTrialGroupSelection(FieldTrial* field_trial);
// Return the number of active field trials.
static size_t GetFieldTrialCount();