| 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
|
|
|