mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-11-28 16:26:10 +03:00
89 lines
2.6 KiB
C++
89 lines
2.6 KiB
C++
|
// Copyright 2016 The Chromium Authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style license that can be
|
||
|
// found in the LICENSE file.
|
||
|
|
||
|
#include "base/metrics/field_trial_param_associator.h"
|
||
|
|
||
|
#include "base/metrics/field_trial.h"
|
||
|
|
||
|
namespace base {
|
||
|
|
||
|
FieldTrialParamAssociator::FieldTrialParamAssociator() = default;
|
||
|
FieldTrialParamAssociator::~FieldTrialParamAssociator() = default;
|
||
|
|
||
|
// static
|
||
|
FieldTrialParamAssociator* FieldTrialParamAssociator::GetInstance() {
|
||
|
return Singleton<FieldTrialParamAssociator,
|
||
|
LeakySingletonTraits<FieldTrialParamAssociator>>::get();
|
||
|
}
|
||
|
|
||
|
bool FieldTrialParamAssociator::AssociateFieldTrialParams(
|
||
|
const std::string& trial_name,
|
||
|
const std::string& group_name,
|
||
|
const FieldTrialParams& params) {
|
||
|
if (FieldTrialList::IsTrialActive(trial_name))
|
||
|
return false;
|
||
|
|
||
|
AutoLock scoped_lock(lock_);
|
||
|
const FieldTrialKey key(trial_name, group_name);
|
||
|
if (ContainsKey(field_trial_params_, key))
|
||
|
return false;
|
||
|
|
||
|
field_trial_params_[key] = params;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
bool FieldTrialParamAssociator::GetFieldTrialParams(
|
||
|
const std::string& trial_name,
|
||
|
FieldTrialParams* params) {
|
||
|
FieldTrial* field_trial = FieldTrialList::Find(trial_name);
|
||
|
if (!field_trial)
|
||
|
return false;
|
||
|
|
||
|
// First try the local map, falling back to getting it from shared memory.
|
||
|
if (GetFieldTrialParamsWithoutFallback(trial_name, field_trial->group_name(),
|
||
|
params)) {
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
// TODO(lawrencewu): add the params to field_trial_params_ for next time.
|
||
|
return FieldTrialList::GetParamsFromSharedMemory(field_trial, params);
|
||
|
}
|
||
|
|
||
|
bool FieldTrialParamAssociator::GetFieldTrialParamsWithoutFallback(
|
||
|
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;
|
||
|
|
||
|
*params = field_trial_params_[key];
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
void FieldTrialParamAssociator::ClearAllParamsForTesting() {
|
||
|
{
|
||
|
AutoLock scoped_lock(lock_);
|
||
|
field_trial_params_.clear();
|
||
|
}
|
||
|
FieldTrialList::ClearParamsFromSharedMemoryForTesting();
|
||
|
}
|
||
|
|
||
|
void FieldTrialParamAssociator::ClearParamsForTesting(
|
||
|
const std::string& trial_name,
|
||
|
const std::string& group_name) {
|
||
|
AutoLock scoped_lock(lock_);
|
||
|
const FieldTrialKey key(trial_name, group_name);
|
||
|
field_trial_params_.erase(key);
|
||
|
}
|
||
|
|
||
|
void FieldTrialParamAssociator::ClearAllCachedParamsForTesting() {
|
||
|
AutoLock scoped_lock(lock_);
|
||
|
field_trial_params_.clear();
|
||
|
}
|
||
|
|
||
|
} // namespace base
|