| Index: components/task_scheduler_util/browser/initialization.cc
|
| diff --git a/components/task_scheduler_util/browser/initialization.cc b/components/task_scheduler_util/browser/initialization.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..fad056118c5900ca6dcba8889cec73b49e036b0f
|
| --- /dev/null
|
| +++ b/components/task_scheduler_util/browser/initialization.cc
|
| @@ -0,0 +1,69 @@
|
| +// 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 "components/task_scheduler_util/browser/initialization.h"
|
| +
|
| +#include "base/command_line.h"
|
| +#include "base/logging.h"
|
| +#include "base/task_scheduler/switches.h"
|
| +#include "base/task_scheduler/task_traits.h"
|
| +#include "base/threading/platform_thread.h"
|
| +#include "base/threading/sequenced_worker_pool.h"
|
| +#include "components/task_scheduler_util/common/variations_util.h"
|
| +
|
| +namespace task_scheduler_util {
|
| +
|
| +namespace {
|
| +
|
| +enum WorkerPoolType : size_t {
|
| + BACKGROUND = 0,
|
| + BACKGROUND_FILE_IO,
|
| + FOREGROUND,
|
| + FOREGROUND_FILE_IO,
|
| + WORKER_POOL_COUNT // Always last.
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +std::vector<base::SchedulerWorkerPoolParams> GetBrowserWorkerPoolParams(
|
| + const std::map<std::string, std::string>& variation_params) {
|
| + using ThreadPriority = base::ThreadPriority;
|
| + std::vector<SchedulerImmutableWorkerPoolParams> constant_worker_pool_params;
|
| + DCHECK_EQ(BACKGROUND, constant_worker_pool_params.size());
|
| + constant_worker_pool_params.emplace_back("Background",
|
| + ThreadPriority::BACKGROUND);
|
| + DCHECK_EQ(BACKGROUND_FILE_IO, constant_worker_pool_params.size());
|
| + constant_worker_pool_params.emplace_back("BackgroundFileIO",
|
| + ThreadPriority::BACKGROUND);
|
| + DCHECK_EQ(FOREGROUND, constant_worker_pool_params.size());
|
| + constant_worker_pool_params.emplace_back("Foreground",
|
| + ThreadPriority::NORMAL);
|
| + DCHECK_EQ(FOREGROUND_FILE_IO, constant_worker_pool_params.size());
|
| + constant_worker_pool_params.emplace_back("ForegroundFileIO",
|
| + ThreadPriority::NORMAL);
|
| + return GetWorkerPoolParams(constant_worker_pool_params, variation_params);
|
| +}
|
| +
|
| +size_t BrowserWorkerPoolIndexForTraits(const base::TaskTraits& traits) {
|
| + const bool is_background =
|
| + traits.priority() == base::TaskPriority::BACKGROUND;
|
| + if (traits.with_file_io())
|
| + return is_background ? BACKGROUND_FILE_IO : FOREGROUND_FILE_IO;
|
| + return is_background ? BACKGROUND : FOREGROUND;
|
| +}
|
| +
|
| +void MaybePerformBrowserTaskSchedulerRedirection(
|
| + const std::map<std::string, std::string>& variation_params) {
|
| + // TODO(gab): Remove this when http://crbug.com/622400 concludes.
|
| + const auto sequenced_worker_pool_param =
|
| + variation_params.find("RedirectSequencedWorkerPools");
|
| + if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
|
| + switches::kDisableBrowserTaskScheduler) &&
|
| + sequenced_worker_pool_param != variation_params.end() &&
|
| + sequenced_worker_pool_param->second == "true") {
|
| + base::SequencedWorkerPool::EnableWithRedirectionToTaskSchedulerForProcess();
|
| + }
|
| +}
|
| +
|
| +} // namespace task_scheduler_util
|
|
|