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

Unified Diff: content/browser/browser_main_loop.cc

Issue 2539263003: Move Task Scheduler Initialization From chrome/browser to Content (Closed)
Patch Set: Rebase to bf8e2f1 Created 4 years 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: content/browser/browser_main_loop.cc
diff --git a/content/browser/browser_main_loop.cc b/content/browser/browser_main_loop.cc
index d6b6f98a3ea2427082b0d96fc5b40988cc6608fe..cae028f6ab8e0e9cc5bfc8d5b5573372b5c32aaa 100644
--- a/content/browser/browser_main_loop.cc
+++ b/content/browser/browser_main_loop.cc
@@ -31,9 +31,14 @@
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_split.h"
#include "base/system_monitor/system_monitor.h"
+#include "base/task_scheduler/initialization_util.h"
+#include "base/task_scheduler/scheduler_worker_pool_params.h"
+#include "base/task_scheduler/task_scheduler.h"
+#include "base/task_scheduler/task_traits.h"
#include "base/threading/sequenced_worker_pool.h"
#include "base/threading/thread_restrictions.h"
#include "base/threading/thread_task_runner_handle.h"
+#include "base/time/time.h"
#include "base/timer/hi_res_timer_manager.h"
#include "base/trace_event/memory_dump_manager.h"
#include "base/trace_event/trace_event.h"
@@ -375,6 +380,71 @@ CreateWinMemoryPressureMonitor(const base::CommandLine& parsed_command_line) {
}
#endif // defined(OS_WIN)
+enum WorkerPoolType : size_t {
+ BACKGROUND = 0,
+ BACKGROUND_FILE_IO,
+ FOREGROUND,
+ FOREGROUND_FILE_IO,
+ WORKER_POOL_COUNT // Always last.
+};
+
+std::vector<base::SchedulerWorkerPoolParams>
+GetDefaultSchedulerWorkerPoolParams() {
+ using StandbyThreadPolicy =
+ base::SchedulerWorkerPoolParams::StandbyThreadPolicy;
+ using ThreadPriority = base::ThreadPriority;
+ std::vector<base::SchedulerWorkerPoolParams> params_vector;
+#if defined(OS_ANDROID)
+ params_vector.emplace_back(
+ "Background", ThreadPriority::BACKGROUND, StandbyThreadPolicy::ONE,
+ base::RecommendedMaxNumberOfThreadsInPool(2, 8, 0.1, 0),
+ base::TimeDelta::FromSeconds(30));
+ params_vector.emplace_back(
+ "BackgroundFileIO", ThreadPriority::BACKGROUND, StandbyThreadPolicy::ONE,
+ base::RecommendedMaxNumberOfThreadsInPool(2, 8, 0.1, 0),
+ base::TimeDelta::FromSeconds(30));
+ params_vector.emplace_back(
+ "Foreground", ThreadPriority::NORMAL, StandbyThreadPolicy::ONE,
+ base::RecommendedMaxNumberOfThreadsInPool(3, 8, 0.3, 0),
+ base::TimeDelta::FromSeconds(30));
+ params_vector.emplace_back(
+ "ForegroundFileIO", ThreadPriority::NORMAL, StandbyThreadPolicy::ONE,
+ base::RecommendedMaxNumberOfThreadsInPool(3, 8, 0.1, 0),
+ base::TimeDelta::FromSeconds(30));
+#else
+ params_vector.emplace_back(
+ "Background", ThreadPriority::BACKGROUND, StandbyThreadPolicy::ONE,
+ base::RecommendedMaxNumberOfThreadsInPool(3, 8, 0.1, 0),
+ base::TimeDelta::FromSeconds(30));
+ params_vector.emplace_back(
+ "BackgroundFileIO", ThreadPriority::BACKGROUND, StandbyThreadPolicy::ONE,
+ base::RecommendedMaxNumberOfThreadsInPool(3, 8, 0.1, 0),
+ base::TimeDelta::FromSeconds(30));
+ params_vector.emplace_back(
+ "Foreground", ThreadPriority::NORMAL, StandbyThreadPolicy::ONE,
+ base::RecommendedMaxNumberOfThreadsInPool(8, 32, 0.3, 0),
+ base::TimeDelta::FromSeconds(30));
+ params_vector.emplace_back(
+ "ForegroundFileIO", ThreadPriority::NORMAL, StandbyThreadPolicy::ONE,
+ base::RecommendedMaxNumberOfThreadsInPool(8, 32, 0.3, 0),
+ base::TimeDelta::FromSeconds(30));
+#endif
+ DCHECK_EQ(WORKER_POOL_COUNT, params_vector.size());
+ return params_vector;
+}
+
+// Returns the worker pool index for |traits| defaulting to FOREGROUND or
+// FOREGROUND_FILE_IO on any other priorities based off of worker pools defined
+// in GetDefaultSchedulerWorkerPoolParams().
+size_t DefaultBrowserWorkerPoolIndexForTraits(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;
+}
+
} // namespace
#if defined(USE_X11) && !defined(OS_CHROMEOS)
@@ -868,6 +938,23 @@ void BrowserMainLoop::CreateStartupTasks() {
int BrowserMainLoop::CreateThreads() {
TRACE_EVENT0("startup,rail", "BrowserMainLoop::CreateThreads");
+ std::vector<base::SchedulerWorkerPoolParams> params_vector;
+ base::TaskScheduler::WorkerPoolIndexForTraitsCallback
+ index_to_traits_callback;
+ GetContentClient()->browser()->GetTaskSchedulerInitializationParams(
+ &params_vector, &index_to_traits_callback);
+
+ if (params_vector.empty() || index_to_traits_callback.is_null()) {
+ params_vector = GetDefaultSchedulerWorkerPoolParams();
+ index_to_traits_callback =
+ base::Bind(&DefaultBrowserWorkerPoolIndexForTraits);
+ }
+
+ base::TaskScheduler::CreateAndSetDefaultTaskScheduler(
+ params_vector, index_to_traits_callback);
+
+ GetContentClient()->browser()->PerformExperimentalTaskSchedulerRedirections();
+
base::Thread::Options io_message_loop_options;
io_message_loop_options.message_loop_type = base::MessageLoop::TYPE_IO;
base::Thread::Options ui_message_loop_options;
@@ -1162,6 +1249,11 @@ void BrowserMainLoop::ShutdownThreadsAndCleanUp() {
TRACE_EVENT0("shutdown", "BrowserMainLoop::Subsystem:ThreadPool");
BrowserThreadImpl::ShutdownThreadPool();
}
+ {
+ TRACE_EVENT0("shutdown", "BrowserMainLoop::Subsystem:TaskScheduler");
+ base::TaskScheduler::GetInstance()->Shutdown();
+ }
+
// Must happen after the IO thread is shutdown since this may be accessed from
// it.
{
« no previous file with comments | « components/task_scheduler_util/initialization_util.cc ('k') | content/public/browser/content_browser_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698