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

Unified Diff: base/task_scheduler/task_scheduler_impl.h

Issue 2064073003: TaskScheduler: Make the worker pools of TaskSchedulerImpl configurable (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: delegate Created 4 years, 6 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: base/task_scheduler/task_scheduler_impl.h
diff --git a/base/task_scheduler/task_scheduler_impl.h b/base/task_scheduler/task_scheduler_impl.h
index f9d789ea4c550daec7c001f591ce2068f672e936..6a5797fdd510c8bf25c01efadc1a69f70ee9821a 100644
--- a/base/task_scheduler/task_scheduler_impl.h
+++ b/base/task_scheduler/task_scheduler_impl.h
@@ -5,7 +5,11 @@
#ifndef BASE_TASK_SCHEDULER_TASK_SCHEDULER_IMPL_H_
#define BASE_TASK_SCHEDULER_TASK_SCHEDULER_IMPL_H_
+#include <stddef.h>
+
#include <memory>
+#include <string>
+#include <vector>
#include "base/base_export.h"
#include "base/logging.h"
@@ -14,10 +18,12 @@
#include "base/synchronization/waitable_event.h"
#include "base/task_runner.h"
#include "base/task_scheduler/delayed_task_manager.h"
+#include "base/task_scheduler/scheduler_thread_pool_impl.h"
#include "base/task_scheduler/sequence.h"
#include "base/task_scheduler/task_scheduler.h"
#include "base/task_scheduler/task_tracker.h"
#include "base/task_scheduler/task_traits.h"
+#include "base/threading/platform_thread.h"
namespace base {
namespace internal {
@@ -28,9 +34,40 @@ class SchedulerThreadPoolImpl;
// Default TaskScheduler implementation. This class is thread-safe.
class BASE_EXPORT TaskSchedulerImpl : public TaskScheduler {
public:
- // Creates and returns an initialized TaskSchedulerImpl. CHECKs on failure to
- // do so (never returns null).
- static std::unique_ptr<TaskSchedulerImpl> Create();
+ // Delegate interface for TaskSchedulerImpl.
+ class BASE_EXPORT Delegate {
+ public:
+ struct ThreadPoolCreationArgs {
+ // Name of the pool. Use to label the pool's threads.
+ std::string name;
+
+ // Priority of the pool's threads.
+ ThreadPriority thread_priority;
+
+ // Whether IO is allowed in the pool.
+ SchedulerThreadPoolImpl::IORestriction io_restriction;
+
+ // Maximum number of threads in the pool.
+ size_t max_threads;
+ };
+
+ virtual ~Delegate() = default;
+
+ // Returns the number of pools to create.
+ virtual size_t GetNumThreadPools() = 0;
+
+ // Returns creation arguments for the pool at index |pool_index|.
+ virtual ThreadPoolCreationArgs GetCreationArgsForThreadPool(
+ size_t pool_index) = 0;
+
+ // Returns the index of the pool in which a task with |traits| should run.
+ virtual size_t GetThreadPoolIndexForTraits(const TaskTraits& traits) = 0;
+ };
+
+ // Creates and returns an initialized TaskSchedulerImpl. CHECKs on failure
+ // (never returns null).
+ static std::unique_ptr<TaskSchedulerImpl> Create(
+ std::unique_ptr<Delegate> delegate);
// Destroying a TaskSchedulerImpl is not allowed in production; it is always
// leaked. In tests, it can only be destroyed after JoinForTesting() has
@@ -51,7 +88,7 @@ class BASE_EXPORT TaskSchedulerImpl : public TaskScheduler {
void JoinForTesting();
private:
- TaskSchedulerImpl();
+ TaskSchedulerImpl(std::unique_ptr<Delegate> delegate);
void Initialize();
@@ -66,21 +103,10 @@ class BASE_EXPORT TaskSchedulerImpl : public TaskScheduler {
// DelayedTaskManager.
void OnDelayedRunTimeUpdated();
+ std::unique_ptr<Delegate> delegate_;
TaskTracker task_tracker_;
DelayedTaskManager delayed_task_manager_;
-
- // Thread pool for BACKGROUND Tasks without file I/O.
- std::unique_ptr<SchedulerThreadPoolImpl> background_thread_pool_;
-
- // Thread pool for BACKGROUND Tasks with file I/O.
- std::unique_ptr<SchedulerThreadPoolImpl> background_file_io_thread_pool_;
-
- // Thread pool for USER_VISIBLE and USER_BLOCKING Tasks without file I/O.
- std::unique_ptr<SchedulerThreadPoolImpl> normal_thread_pool_;
-
- // Thread pool for USER_VISIBLE and USER_BLOCKING Tasks with file I/O.
- std::unique_ptr<SchedulerThreadPoolImpl> normal_file_io_thread_pool_;
-
+ std::vector<std::unique_ptr<SchedulerThreadPoolImpl>> thread_pools_;
std::unique_ptr<SchedulerServiceThread> service_thread_;
#if DCHECK_IS_ON()

Powered by Google App Engine
This is Rietveld 408576698