summaryrefslogtreecommitdiffstats
path: root/chromium/base/task_scheduler/scheduler_thread_pool_impl.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/base/task_scheduler/scheduler_thread_pool_impl.h')
-rw-r--r--chromium/base/task_scheduler/scheduler_thread_pool_impl.h164
1 files changed, 0 insertions, 164 deletions
diff --git a/chromium/base/task_scheduler/scheduler_thread_pool_impl.h b/chromium/base/task_scheduler/scheduler_thread_pool_impl.h
deleted file mode 100644
index 1c1f1869e4f..00000000000
--- a/chromium/base/task_scheduler/scheduler_thread_pool_impl.h
+++ /dev/null
@@ -1,164 +0,0 @@
-// 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.
-
-#ifndef BASE_TASK_SCHEDULER_SCHEDULER_THREAD_POOL_IMPL_H_
-#define BASE_TASK_SCHEDULER_SCHEDULER_THREAD_POOL_IMPL_H_
-
-#include <stddef.h>
-
-#include <memory>
-#include <string>
-#include <vector>
-
-#include "base/base_export.h"
-#include "base/callback.h"
-#include "base/logging.h"
-#include "base/macros.h"
-#include "base/memory/ref_counted.h"
-#include "base/strings/string_piece.h"
-#include "base/synchronization/condition_variable.h"
-#include "base/task_runner.h"
-#include "base/task_scheduler/priority_queue.h"
-#include "base/task_scheduler/scheduler_lock.h"
-#include "base/task_scheduler/scheduler_thread_pool.h"
-#include "base/task_scheduler/scheduler_worker_thread.h"
-#include "base/task_scheduler/scheduler_worker_thread_stack.h"
-#include "base/task_scheduler/sequence.h"
-#include "base/task_scheduler/task.h"
-#include "base/task_scheduler/task_traits.h"
-#include "base/threading/platform_thread.h"
-
-namespace base {
-namespace internal {
-
-class DelayedTaskManager;
-class TaskTracker;
-
-// A pool of threads that run Tasks. This class is thread-safe.
-class BASE_EXPORT SchedulerThreadPoolImpl : public SchedulerThreadPool {
- public:
- enum class IORestriction {
- ALLOWED,
- DISALLOWED,
- };
-
- // Callback invoked when a Sequence isn't empty after a worker thread pops a
- // Task from it.
- using ReEnqueueSequenceCallback = Callback<void(scoped_refptr<Sequence>)>;
-
- // Destroying a SchedulerThreadPool returned by CreateThreadPool() is not
- // allowed in production; it is always leaked. In tests, it can only be
- // destroyed after JoinForTesting() has returned.
- ~SchedulerThreadPoolImpl() override;
-
- // Creates a SchedulerThreadPool labeled |name| with up to |max_threads|
- // threads of priority |thread_priority|. |io_restriction| indicates whether
- // Tasks on the constructed thread pool are allowed to make I/O calls.
- // |re_enqueue_sequence_callback| will be invoked after a thread of this
- // thread pool tries to run a Task. |task_tracker| is used to handle shutdown
- // behavior of Tasks. |delayed_task_manager| handles Tasks posted with a
- // delay. Returns nullptr on failure to create a thread pool with at least one
- // thread.
- static std::unique_ptr<SchedulerThreadPoolImpl> Create(
- StringPiece name,
- ThreadPriority thread_priority,
- size_t max_threads,
- IORestriction io_restriction,
- const ReEnqueueSequenceCallback& re_enqueue_sequence_callback,
- TaskTracker* task_tracker,
- DelayedTaskManager* delayed_task_manager);
-
- // Waits until all threads are idle.
- void WaitForAllWorkerThreadsIdleForTesting();
-
- // Joins all threads of this thread pool. Tasks that are already running are
- // allowed to complete their execution. This can only be called once.
- void JoinForTesting();
-
- // SchedulerThreadPool:
- scoped_refptr<TaskRunner> CreateTaskRunnerWithTraits(
- const TaskTraits& traits,
- ExecutionMode execution_mode) override;
- void ReEnqueueSequence(scoped_refptr<Sequence> sequence,
- const SequenceSortKey& sequence_sort_key) override;
- bool PostTaskWithSequence(std::unique_ptr<Task> task,
- scoped_refptr<Sequence> sequence,
- SchedulerWorkerThread* worker_thread) override;
- void PostTaskWithSequenceNow(std::unique_ptr<Task> task,
- scoped_refptr<Sequence> sequence,
- SchedulerWorkerThread* worker_thread) override;
-
- private:
- class SchedulerWorkerThreadDelegateImpl;
-
- SchedulerThreadPoolImpl(StringPiece name,
- IORestriction io_restriction,
- TaskTracker* task_tracker,
- DelayedTaskManager* delayed_task_manager);
-
- bool Initialize(
- ThreadPriority thread_priority,
- size_t max_threads,
- const ReEnqueueSequenceCallback& re_enqueue_sequence_callback);
-
- // Wakes up the last thread from this thread pool to go idle, if any.
- void WakeUpOneThread();
-
- // Adds |worker_thread| to |idle_worker_threads_stack_|.
- void AddToIdleWorkerThreadsStack(SchedulerWorkerThread* worker_thread);
-
- // Removes |worker_thread| from |idle_worker_threads_stack_|.
- void RemoveFromIdleWorkerThreadsStack(SchedulerWorkerThread* worker_thread);
-
- // The name of this thread pool, used to label its worker threads.
- const std::string name_;
-
- // All worker threads owned by this thread pool. Only modified during
- // initialization of the thread pool.
- std::vector<std::unique_ptr<SchedulerWorkerThread>> worker_threads_;
-
- // Synchronizes access to |next_worker_thread_index_|.
- SchedulerLock next_worker_thread_index_lock_;
-
- // Index of the worker thread that will be assigned to the next single-
- // threaded TaskRunner returned by this pool.
- size_t next_worker_thread_index_ = 0;
-
- // PriorityQueue from which all threads of this thread pool get work.
- PriorityQueue shared_priority_queue_;
-
- // Indicates whether Tasks on this thread pool are allowed to make I/O calls.
- const IORestriction io_restriction_;
-
- // Synchronizes access to |idle_worker_threads_stack_| and
- // |idle_worker_threads_stack_cv_for_testing_|. Has |shared_priority_queue_|'s
- // lock as its predecessor so that a thread can be pushed to
- // |idle_worker_threads_stack_| within the scope of a Transaction (more
- // details in GetWork()).
- SchedulerLock idle_worker_threads_stack_lock_;
-
- // Stack of idle worker threads.
- SchedulerWorkerThreadStack idle_worker_threads_stack_;
-
- // Signaled when all worker threads become idle.
- std::unique_ptr<ConditionVariable> idle_worker_threads_stack_cv_for_testing_;
-
- // Signaled once JoinForTesting() has returned.
- WaitableEvent join_for_testing_returned_;
-
-#if DCHECK_IS_ON()
- // Signaled when all threads have been created.
- WaitableEvent threads_created_;
-#endif
-
- TaskTracker* const task_tracker_;
- DelayedTaskManager* const delayed_task_manager_;
-
- DISALLOW_COPY_AND_ASSIGN(SchedulerThreadPoolImpl);
-};
-
-} // namespace internal
-} // namespace base
-
-#endif // BASE_TASK_SCHEDULER_SCHEDULER_THREAD_POOL_IMPL_H_