From 8cffde0ee3ef1f115d8e37e2c34daba3d6b06f64 Mon Sep 17 00:00:00 2001 From: "rtenneti@chromium.org" Date: Fri, 4 May 2012 01:14:14 +0000 Subject: FieldTrial - Use ObserverListThreadSafe instead of ObserverList. R=jar TEST=base unit tests BUG=126027 Review URL: http://codereview.chromium.org/10342021 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@135263 0039d316-1c4b-4281-b951-d872f2087c98 --- base/metrics/field_trial.cc | 14 ++++++++------ base/metrics/field_trial.h | 6 +++--- 2 files changed, 11 insertions(+), 9 deletions(-) (limited to 'base/metrics') diff --git a/base/metrics/field_trial.cc b/base/metrics/field_trial.cc index f447c1f..245f2bf 100644 --- a/base/metrics/field_trial.cc +++ b/base/metrics/field_trial.cc @@ -213,7 +213,8 @@ bool FieldTrialList::used_without_global_ = false; FieldTrialList::FieldTrialList(const std::string& client_id) : application_start_time_(TimeTicks::Now()), client_id_(client_id), - observer_list_(ObserverList::NOTIFY_EXISTING_ONLY) { + observer_list_(new ObserverListThreadSafe( + ObserverListBase::NOTIFY_EXISTING_ONLY)) { DCHECK(!global_); DCHECK(!used_without_global_); global_ = this; @@ -393,7 +394,7 @@ void FieldTrialList::AddObserver(Observer* observer) { if (!global_) return; DCHECK(global_); - global_->observer_list_.AddObserver(observer); + global_->observer_list_->AddObserver(observer); } // static @@ -401,7 +402,7 @@ void FieldTrialList::RemoveObserver(Observer* observer) { if (!global_) return; DCHECK(global_); - global_->observer_list_.RemoveObserver(observer); + global_->observer_list_->RemoveObserver(observer); } // static @@ -411,9 +412,10 @@ void FieldTrialList::NotifyFieldTrialGroupSelection( if (!global_) return; DCHECK(global_); - FOR_EACH_OBSERVER(Observer, - global_->observer_list_, - OnFieldTrialGroupFinalized(name, group_name)); + global_->observer_list_->Notify( + &FieldTrialList::Observer::OnFieldTrialGroupFinalized, + name, + group_name); } // static diff --git a/base/metrics/field_trial.h b/base/metrics/field_trial.h index e1b30b9..87683a1 100644 --- a/base/metrics/field_trial.h +++ b/base/metrics/field_trial.h @@ -82,7 +82,7 @@ #include "base/base_export.h" #include "base/gtest_prod_util.h" #include "base/memory/ref_counted.h" -#include "base/observer_list.h" +#include "base/observer_list_threadsafe.h" #include "base/synchronization/lock.h" #include "base/time.h" @@ -256,7 +256,7 @@ class BASE_EXPORT FieldTrialList { static int kExpirationYearInFuture; // Observer is notified when a FieldTrial's group is selected. - class Observer { + class BASE_EXPORT Observer { public: // Notify observers when FieldTrials's group is selected. virtual void OnFieldTrialGroupFinalized(const std::string& trial_name, @@ -423,7 +423,7 @@ class BASE_EXPORT FieldTrialList { std::string client_id_; // List of observers to be notified when a group is selected for a FieldTrial. - ObserverList observer_list_; + scoped_refptr > observer_list_; DISALLOW_COPY_AND_ASSIGN(FieldTrialList); }; -- cgit v1.1