// 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 "net/disk_cache/simple/simple_experiment.h" #include #include #include "base/metrics/field_trial.h" #include "base/metrics/field_trial_param_associator.h" #include "base/strings/string_number_conversions.h" namespace disk_cache { const base::Feature kSimpleSizeExperiment = {"SimpleSizeExperiment", base::FEATURE_DISABLED_BY_DEFAULT}; const char kSizeMultiplierParam[] = "SizeMultiplier"; namespace { struct ExperimentDescription { disk_cache::SimpleExperimentType experiment_type; const base::Feature* feature; const char* param_name; }; // List of experimens to be checked for. const ExperimentDescription experiments[] = { {disk_cache::SimpleExperimentType::SIZE, &kSimpleSizeExperiment, kSizeMultiplierParam}, }; } // namespace // Returns the experiment for the given |cache_type|. SimpleExperiment GetSimpleExperiment(net::CacheType cache_type) { SimpleExperiment experiment; if (cache_type != net::DISK_CACHE) return experiment; for (size_t i = 0; i < arraysize(experiments); i++) { if (!base::FeatureList::IsEnabled(*experiments[i].feature)) continue; base::FieldTrial* trial = base::FeatureList::GetFieldTrial(*experiments[i].feature); if (!trial) continue; std::map params; base::FieldTrialParamAssociator::GetInstance()->GetFieldTrialParams( trial->trial_name(), ¶ms); auto iter = params.find(experiments[i].param_name); if (iter == params.end()) continue; uint32_t param; if (!base::StringToUint(iter->second, ¶m)) continue; experiment.type = experiments[i].experiment_type; experiment.param = param; return experiment; } return experiment; } } // namespace disk_cache