Chromium Code Reviews| Index: components/task_scheduler_util/common/variations_util.cc |
| diff --git a/components/task_scheduler_util/common/variations_util.cc b/components/task_scheduler_util/common/variations_util.cc |
| index ad823597186ecdc151b4fa5d44ab67af63938b4b..d7fb99a8ef85e1905b4b61a7db2c6400bf75b045 100644 |
| --- a/components/task_scheduler_util/common/variations_util.cc |
| +++ b/components/task_scheduler_util/common/variations_util.cc |
| @@ -4,12 +4,15 @@ |
| #include "components/task_scheduler_util/common/variations_util.h" |
| +#include "base/command_line.h" |
| #include "base/logging.h" |
| #include "base/strings/string_number_conversions.h" |
| #include "base/strings/string_piece.h" |
| #include "base/strings/string_split.h" |
| +#include "base/strings/string_util.h" |
| #include "base/task_scheduler/initialization_util.h" |
| #include "base/time/time.h" |
| +#include "components/variations/variations_associated_data.h" |
| namespace task_scheduler_util { |
| @@ -21,6 +24,17 @@ struct SchedulerCustomizableWorkerPoolParams { |
| base::TimeDelta detach_period; |
| }; |
| +#if !defined(OS_IOS) |
| +constexpr char kTaskSchedulerVariationParamsSwitch[] = |
| + "task-scheduler-variation-params"; |
| + |
| +constexpr char kSeparator[] = "|"; |
| + |
| +bool ContainsSeparator(const std::string& str) { |
| + return str.find(kSeparator) != std::string::npos; |
| +} |
| +#endif // !defined(OS_IOS) |
| + |
| // Converts |pool_descriptor| to a SchedulerWorkerPoolVariableParams. Returns a |
| // default SchedulerWorkerPoolVariableParams on failure. |
| // |
| @@ -105,4 +119,57 @@ std::vector<base::SchedulerWorkerPoolParams> GetWorkerPoolParams( |
| return worker_pool_params_vector; |
| } |
| +#if !defined(OS_IOS) |
| +void AddVariationParamsToCommandLine(base::StringPiece key_prefix, |
| + base::CommandLine* command_line) { |
| + DCHECK(command_line); |
| + |
| + std::map<std::string, std::string> variation_params; |
| + if (!variations::GetVariationParams("BrowserScheduler", &variation_params)) |
| + return; |
| + |
| + std::vector<std::string> parts; |
| + for (const auto& key_value : variation_params) { |
| + if (base::StartsWith(key_value.first, key_prefix, |
| + base::CompareCase::SENSITIVE)) { |
| + if (ContainsSeparator(key_value.first) || |
| + ContainsSeparator(key_value.second)) { |
| + DLOG(ERROR) |
| + << "Unexpected Character in Task Scheduler Variation Params: " |
| + << key_value.first << " [" << key_value.second << "]"; |
| + return; |
| + } |
| + parts.push_back(key_value.first); |
| + parts.push_back(key_value.second); |
| + } |
| + } |
| + |
| + if (!parts.empty()) { |
| + command_line->AppendSwitchASCII(kTaskSchedulerVariationParamsSwitch, |
| + base::JoinString(parts, kSeparator)); |
| + } |
| +} |
| + |
| +std::map<std::string, std::string> GetVariationParamsFromCommandLine( |
| + const base::CommandLine& command_line) { |
| + const auto serialized_variation_params = |
| + command_line.GetSwitchValueASCII(kTaskSchedulerVariationParamsSwitch); |
| + const auto parts = |
| + base::SplitStringPiece(serialized_variation_params, kSeparator, |
| + base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); |
| + std::map<std::string, std::string> variation_params; |
| + for (auto it = parts.begin(); it != parts.end(); ++it) { |
| + base::StringPiece key = *it; |
| + ++it; |
| + if (it == parts.end()) { |
| + NOTREACHED(); |
| + return std::map<std::string, std::string>(); |
| + } |
| + base::StringPiece value = *it; |
| + variation_params[key.as_string()] = value.as_string(); |
| + } |
| + return variation_params; |
| +} |
| +#endif // !defined(OS_IOS) |
|
gab
2017/01/06 18:48:39
style nit: two spaces before //
(and elsewhere)
|
| + |
| } // namespace task_scheduler_util |