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

Unified Diff: components/task_scheduler_util/common/variations_util.cc

Issue 2568793003: Control TaskScheduler initialization params in renderers via field trial. (Closed)
Patch Set: fix ios build error Created 3 years, 11 months 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: 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..385b83bc94045d4459308e982daaf0a86323c7e9 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)
+
} // namespace task_scheduler_util

Powered by Google App Engine
This is Rietveld 408576698