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

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

Issue 2788223002: Generate TaskScheduler::InitParams from components/task_scheduler_util/. (Closed)
Patch Set: fix-build-error Created 3 years, 8 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 2b3a2194a6d40b0b5d576a2470bcf3348bd8f92f..04ef1dfa1bf184ad1cdbf1727ef8424718bff279 100644
--- a/components/task_scheduler_util/common/variations_util.cc
+++ b/components/task_scheduler_util/common/variations_util.cc
@@ -6,6 +6,7 @@
#include "base/command_line.h"
#include "base/logging.h"
+#include "base/memory/ptr_util.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_split.h"
#include "base/strings/string_util.h"
@@ -17,12 +18,6 @@ namespace task_scheduler_util {
namespace {
-struct SchedulerCustomizableWorkerPoolParams {
- base::SchedulerWorkerPoolParams::StandbyThreadPolicy standby_thread_policy;
- int max_threads = 0;
- base::TimeDelta detach_period;
-};
-
#if !defined(OS_IOS)
constexpr char kTaskSchedulerVariationParamsSwitch[] =
"task-scheduler-variation-params";
@@ -34,10 +29,12 @@ bool ContainsSeparator(const std::string& str) {
}
#endif // !defined(OS_IOS)
-// Converts |pool_descriptor| to a SchedulerWorkerPoolVariableParams. Returns a
-// default SchedulerWorkerPoolVariableParams on failure.
+// Builds a SchedulerWorkerPoolParams from the pool descriptor in
+// |variation_params[variation_param_prefix + pool_name]| and
+// |backward_compatibility|. Returns an invalid SchedulerWorkerPoolParams on
+// failure.
//
-// |pool_descriptor| is a semi-colon separated value string with the following
+// The pool descriptor is a semi-colon separated value string with the following
// items:
// 0. Minimum Thread Count (int)
// 1. Maximum Thread Count (int)
@@ -46,10 +43,21 @@ bool ContainsSeparator(const std::string& str) {
// 4. Detach Time in Milliseconds (int)
// 5. Standby Thread Policy (string)
// Additional values may appear as necessary and will be ignored.
-SchedulerCustomizableWorkerPoolParams StringToVariableWorkerPoolParams(
- const base::StringPiece pool_descriptor) {
+std::unique_ptr<base::SchedulerWorkerPoolParams> GetWorkerPoolParams(
+ base::StringPiece variation_param_prefix,
+ base::StringPiece pool_name,
+ const std::map<std::string, std::string>& variation_params,
+ base::SchedulerBackwardCompatibility backward_compatibility =
+ base::SchedulerBackwardCompatibility::DISABLED) {
using StandbyThreadPolicy =
base::SchedulerWorkerPoolParams::StandbyThreadPolicy;
+
+ auto pool_descriptor_it = variation_params.find(
+ base::JoinString({variation_param_prefix, pool_name}, ""));
+ if (pool_descriptor_it == variation_params.end())
+ return nullptr;
+ const auto& pool_descriptor = pool_descriptor_it->second;
+
const std::vector<base::StringPiece> tokens = SplitStringPiece(
pool_descriptor, ";", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
// Normally, we wouldn't initialize the values below because we don't read
@@ -62,65 +70,66 @@ SchedulerCustomizableWorkerPoolParams StringToVariableWorkerPoolParams(
int detach_milliseconds = 0;
// Checking for a size greater than the expected amount allows us to be
// forward compatible if we add more variation values.
- if (tokens.size() >= 5 && base::StringToInt(tokens[0], &min) &&
- base::StringToInt(tokens[1], &max) &&
- base::StringToDouble(tokens[2].as_string(), &cores_multiplier) &&
- base::StringToInt(tokens[3], &offset) &&
- base::StringToInt(tokens[4], &detach_milliseconds)) {
- SchedulerCustomizableWorkerPoolParams params;
- params.max_threads = base::RecommendedMaxNumberOfThreadsInPool(
- min, max, cores_multiplier, offset);
- params.detach_period =
- base::TimeDelta::FromMilliseconds(detach_milliseconds);
- params.standby_thread_policy = (tokens.size() >= 6 && tokens[5] == "lazy")
- ? StandbyThreadPolicy::LAZY
- : StandbyThreadPolicy::ONE;
- return params;
+ if (tokens.size() < 5 || !base::StringToInt(tokens[0], &min) ||
+ !base::StringToInt(tokens[1], &max) ||
+ !base::StringToDouble(tokens[2].as_string(), &cores_multiplier) ||
+ !base::StringToInt(tokens[3], &offset) ||
+ !base::StringToInt(tokens[4], &detach_milliseconds)) {
+ DLOG(ERROR) << "Invalid Worker Pool Descriptor Format: " << pool_descriptor;
+ return nullptr;
}
- DLOG(ERROR) << "Invalid Worker Pool Descriptor: " << pool_descriptor;
- return SchedulerCustomizableWorkerPoolParams();
+
+ auto params = base::MakeUnique<base::SchedulerWorkerPoolParams>(
+ (tokens.size() >= 6 && tokens[5] == "lazy") ? StandbyThreadPolicy::LAZY
+ : StandbyThreadPolicy::ONE,
+ base::RecommendedMaxNumberOfThreadsInPool(min, max, cores_multiplier,
+ offset),
+ base::TimeDelta::FromMilliseconds(detach_milliseconds),
+ backward_compatibility);
+
+ if (params->max_threads() <= 0) {
+ DLOG(ERROR) << "Invalid max threads in the Worker Pool Descriptor: "
+ << params->max_threads();
+ return nullptr;
+ }
+
+ if (params->suggested_reclaim_time() < base::TimeDelta()) {
+ DLOG(ERROR)
+ << "Invalid suggested reclaim time in the Worker Pool Descriptor:"
+ << params->suggested_reclaim_time();
+ return nullptr;
+ }
+
+ return params;
}
} // namespace
-SchedulerImmutableWorkerPoolParams::SchedulerImmutableWorkerPoolParams(
- const char* name,
- base::ThreadPriority priority_hint,
- base::SchedulerBackwardCompatibility backward_compatibility)
- : name_(name),
- priority_hint_(priority_hint),
- backward_compatibility_(backward_compatibility) {}
-
-std::vector<base::SchedulerWorkerPoolParams> GetWorkerPoolParams(
- const std::vector<SchedulerImmutableWorkerPoolParams>&
- constant_worker_pool_params_vector,
- const std::map<std::string, std::string>& variation_params) {
- std::vector<base::SchedulerWorkerPoolParams> worker_pool_params_vector;
- for (const auto& constant_worker_pool_params :
- constant_worker_pool_params_vector) {
- const char* const worker_pool_name = constant_worker_pool_params.name();
- auto it = variation_params.find(worker_pool_name);
- if (it == variation_params.end()) {
- // Non-branded builds don't have access to external worker pool
- // configurations.
- return std::vector<base::SchedulerWorkerPoolParams>();
- }
- const auto variable_worker_pool_params =
- StringToVariableWorkerPoolParams(it->second);
- if (variable_worker_pool_params.max_threads <= 0 ||
- variable_worker_pool_params.detach_period <= base::TimeDelta()) {
- DLOG(ERROR) << "Invalid Worker Pool Configuration: " << worker_pool_name
- << " [" << it->second << "]";
- return std::vector<base::SchedulerWorkerPoolParams>();
- }
- worker_pool_params_vector.emplace_back(
- worker_pool_name, constant_worker_pool_params.priority_hint(),
- variable_worker_pool_params.standby_thread_policy,
- variable_worker_pool_params.max_threads,
- variable_worker_pool_params.detach_period,
- constant_worker_pool_params.backward_compatibility());
+std::unique_ptr<base::TaskScheduler::InitParams> GetTaskSchedulerInitParams(
+ base::StringPiece variation_param_prefix,
+ const std::map<std::string, std::string>& variation_params,
+ base::SchedulerBackwardCompatibility
+ foreground_blocking_backward_compatibility) {
+ const auto background_worker_pool_params = GetWorkerPoolParams(
+ variation_param_prefix, "Background", variation_params);
+ const auto background_blocking_worker_pool_params = GetWorkerPoolParams(
+ variation_param_prefix, "BackgroundBlocking", variation_params);
+ const auto foreground_worker_pool_params = GetWorkerPoolParams(
+ variation_param_prefix, "Foreground", variation_params);
+ const auto foreground_blocking_worker_pool_params = GetWorkerPoolParams(
+ variation_param_prefix, "ForegroundBlocking", variation_params,
+ foreground_blocking_backward_compatibility);
+
+ if (!background_worker_pool_params ||
+ !background_blocking_worker_pool_params ||
+ !foreground_worker_pool_params ||
+ !foreground_blocking_worker_pool_params) {
+ return nullptr;
}
- return worker_pool_params_vector;
+
+ return base::MakeUnique<base::TaskScheduler::InitParams>(
+ *background_worker_pool_params, *background_blocking_worker_pool_params,
+ *foreground_worker_pool_params, *foreground_blocking_worker_pool_params);
}
#if !defined(OS_IOS)

Powered by Google App Engine
This is Rietveld 408576698