summaryrefslogtreecommitdiffstats
path: root/base/metrics
diff options
context:
space:
mode:
authorrtenneti@chromium.org <rtenneti@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-04 01:14:14 +0000
committerrtenneti@chromium.org <rtenneti@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-04 01:14:14 +0000
commit8cffde0ee3ef1f115d8e37e2c34daba3d6b06f64 (patch)
tree679bb75911426db019d798aa063cbc64e68344c2 /base/metrics
parentc7cf6fb3fd3cb9f8a70a20ddc763ac4065564299 (diff)
downloadchromium_src-8cffde0ee3ef1f115d8e37e2c34daba3d6b06f64.zip
chromium_src-8cffde0ee3ef1f115d8e37e2c34daba3d6b06f64.tar.gz
chromium_src-8cffde0ee3ef1f115d8e37e2c34daba3d6b06f64.tar.bz2
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
Diffstat (limited to 'base/metrics')
-rw-r--r--base/metrics/field_trial.cc14
-rw-r--r--base/metrics/field_trial.h6
2 files changed, 11 insertions, 9 deletions
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<Observer>::NOTIFY_EXISTING_ONLY) {
+ observer_list_(new ObserverListThreadSafe<FieldTrialList::Observer>(
+ ObserverListBase<FieldTrialList::Observer>::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> observer_list_;
+ scoped_refptr<ObserverListThreadSafe<Observer> > observer_list_;
DISALLOW_COPY_AND_ASSIGN(FieldTrialList);
};