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

Unified Diff: base/metrics/field_trial_param_associator.cc

Issue 2463223002: Store field trial parameters in shared memory (Closed)
Patch Set: address comments and write test 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..8933f48bb9a518cf5d00e7f267ff36be33ee0a1f 100644
--- a/base/metrics/field_trial_param_associator.cc
+++ b/base/metrics/field_trial_param_associator.cc
@@ -23,26 +23,27 @@ bool FieldTrialParamAssociator::AssociateFieldTrialParams(
const FieldTrialParams& params) {
AutoLock scoped_lock(lock_);
- if (FieldTrialList::IsTrialActive(trial_name))
- return false;
+ return AssociateParamsWhileLocked(trial_name, group_name, params);
+}
- const FieldTrialKey key(trial_name, group_name);
- if (ContainsKey(field_trial_params_, key))
- return false;
+bool FieldTrialParamAssociator::GetFieldTrialParams(
+ const std::string& trial_name,
+ FieldTrialParams* params) {
+ AutoLock scoped_lock(lock_);
- field_trial_params_[key] = params;
- return true;
+ const std::string group_name = FieldTrialList::FindFullName(trial_name);
+ return GetFieldTrialParams(trial_name, group_name, params);
}
bool FieldTrialParamAssociator::GetFieldTrialParams(
const std::string& trial_name,
+ const std::string& group_name,
FieldTrialParams* params) {
AutoLock scoped_lock(lock_);
- const std::string group_name = FieldTrialList::FindFullName(trial_name);
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