summaryrefslogtreecommitdiffstats
path: root/base/field_trial.cc
diff options
context:
space:
mode:
authorjar@chromium.org <jar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-03-23 02:45:11 +0000
committerjar@chromium.org <jar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-03-23 02:45:11 +0000
commit0b48db4400f9a20de3c9f5bea099c1a3cbcf5015 (patch)
treec7149e77252a1fe846a87cf93c1b98a02fe53296 /base/field_trial.cc
parent202dee0077b3756f5fad43c521ceec4f7349c91e (diff)
downloadchromium_src-0b48db4400f9a20de3c9f5bea099c1a3cbcf5015.zip
chromium_src-0b48db4400f9a20de3c9f5bea099c1a3cbcf5015.tar.gz
chromium_src-0b48db4400f9a20de3c9f5bea099c1a3cbcf5015.tar.bz2
Attempt to detect impact of disabling dns prefetching on transaction latency
This is also meant to exercise the field trial infrastructure. r=mbelshe Review URL: http://codereview.chromium.org/50084 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@12271 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/field_trial.cc')
-rw-r--r--base/field_trial.cc19
1 files changed, 13 insertions, 6 deletions
diff --git a/base/field_trial.cc b/base/field_trial.cc
index 901ba16..d0085e6 100644
--- a/base/field_trial.cc
+++ b/base/field_trial.cc
@@ -63,6 +63,7 @@ FieldTrialList::FieldTrialList()
}
FieldTrialList::~FieldTrialList() {
+ AutoLock auto_lock(lock_);
while (!registered_.empty()) {
RegistrationList::iterator it = registered_.begin();
it->second->Release();
@@ -74,8 +75,8 @@ FieldTrialList::~FieldTrialList() {
// static
void FieldTrialList::Register(FieldTrial* trial) {
- DCHECK(global_->CalledOnValidThread());
- DCHECK(!Find(trial->name()));
+ AutoLock auto_lock(global_->lock_);
+ DCHECK(!global_->PreLockedFind(trial->name()));
trial->AddRef();
global_->registered_[trial->name()] = trial;
}
@@ -96,11 +97,17 @@ std::string FieldTrialList::FindFullName(const std::string& name) {
return "";
}
- // static
+// static
FieldTrial* FieldTrialList::Find(const std::string& name) {
- DCHECK(global_->CalledOnValidThread());
- RegistrationList::iterator it = global_->registered_.find(name);
- if (global_->registered_.end() == it)
+ if (!global_)
+ return NULL;
+ AutoLock auto_lock(global_->lock_);
+ return global_->PreLockedFind(name);
+}
+
+FieldTrial* FieldTrialList::PreLockedFind(const std::string& name) {
+ RegistrationList::iterator it = registered_.find(name);
+ if (registered_.end() == it)
return NULL;
return it->second;
}