Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1446)

Unified Diff: base/metrics/field_trial_param_associator.cc

Issue 2463223002: Store field trial parameters in shared memory (Closed)
Patch Set: address comments Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: base/metrics/field_trial_param_associator.cc
diff --git a/base/metrics/field_trial_param_associator.cc b/base/metrics/field_trial_param_associator.cc
index b96cc396df874689af034691d9479a780ae78417..a55a079507af9158ba18d4f7a483b6443d354bec 100644
--- a/base/metrics/field_trial_param_associator.cc
+++ b/base/metrics/field_trial_param_associator.cc
@@ -23,15 +23,7 @@ bool FieldTrialParamAssociator::AssociateFieldTrialParams(
const FieldTrialParams& params) {
AutoLock scoped_lock(lock_);
- if (FieldTrialList::IsTrialActive(trial_name))
- return false;
-
- const FieldTrialKey key(trial_name, group_name);
- if (ContainsKey(field_trial_params_, key))
- return false;
-
- field_trial_params_[key] = params;
- return true;
+ return AssociateParamsWhileLocked(trial_name, group_name, params);
}
bool FieldTrialParamAssociator::GetFieldTrialParams(
@@ -40,9 +32,18 @@ bool FieldTrialParamAssociator::GetFieldTrialParams(
AutoLock scoped_lock(lock_);
const std::string group_name = FieldTrialList::FindFullName(trial_name);
+ return GetFieldTrialParamsWithGroupName(trial_name, group_name, params);
+}
+
+bool FieldTrialParamAssociator::GetFieldTrialParamsWithGroupName(
+ const std::string& trial_name,
+ const std::string& group_name,
+ FieldTrialParams* params) {
+ AutoLock scoped_lock(lock_);
+
const FieldTrialKey key(trial_name, group_name);
if (!ContainsKey(field_trial_params_, key))
- return false;
+ return GetParamsFromSharedMemory(trial_name, group_name, params);
*params = field_trial_params_[key];
return true;
@@ -53,4 +54,29 @@ void FieldTrialParamAssociator::ClearAllParamsForTesting() {
field_trial_params_.clear();
}
+bool FieldTrialParamAssociator::GetParamsFromSharedMemory(
+ const std::string& trial_name,
+ const std::string& group_name,
+ FieldTrialParams* params) {
+ bool result = FieldTrialList::FindParams(trial_name, params);
+ if (result)
+ AssociateParamsWhileLocked(trial_name, group_name, *params);
+ return result;
+}
+
+bool FieldTrialParamAssociator::AssociateParamsWhileLocked(
+ const std::string& trial_name,
+ const std::string& group_name,
+ const FieldTrialParams& params) {
+ if (FieldTrialList::IsTrialActive(trial_name))
+ return false;
+
+ const FieldTrialKey key(trial_name, group_name);
+ if (ContainsKey(field_trial_params_, key))
+ return false;
+
+ field_trial_params_[key] = params;
+ return true;
+}
+
} // namespace base

Powered by Google App Engine
This is Rietveld 408576698