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

Unified Diff: base/task_scheduler/scheduler_worker_thread.cc

Issue 1895513002: TaskScheduler [12] Support SINGLE_THREADED in SchedulerThreadPool DO NOT SUBMIT (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@10_superstack
Patch Set: Created 4 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: base/task_scheduler/scheduler_worker_thread.cc
diff --git a/base/task_scheduler/scheduler_worker_thread.cc b/base/task_scheduler/scheduler_worker_thread.cc
index 3565bd5e6b9f816cb1cf1d33074aea606e2255e0..54169499c2e173927495e0742328d96b928e5788 100644
--- a/base/task_scheduler/scheduler_worker_thread.cc
+++ b/base/task_scheduler/scheduler_worker_thread.cc
@@ -28,14 +28,24 @@ LazyInstance<ThreadLocalPointer<const SchedulerTaskExecutor>>::Leaky
// A task runner that runs tasks on a single SchedulerWorkerThread.
class SchedulerSingleThreadTaskRunner : public SingleThreadTaskRunner {
public:
- SchedulerSingleThreadTaskRunner(const TaskTraits& traits,
- SchedulerTaskExecutor* executor,
- TaskTracker* task_tracker,
- DelayedTaskManager* delayed_task_manager)
+ SchedulerSingleThreadTaskRunner(
+ const TaskTraits& traits,
+ SchedulerTaskExecutor* executor,
+ TaskTracker* task_tracker,
+ DelayedTaskManager* delayed_task_manager,
+ base::subtle::Atomic32* num_single_thread_task_runners)
: traits_(traits),
executor_(executor),
task_tracker_(task_tracker),
- delayed_task_manager_(delayed_task_manager) {}
+ delayed_task_manager_(delayed_task_manager),
+ num_single_thread_task_runners_(num_single_thread_task_runners) {
+ DCHECK(executor_);
+ DCHECK(task_tracker_);
+ DCHECK(delayed_task_manager_);
+ DCHECK(num_single_thread_task_runners_);
+
+ base::subtle::NoBarrier_AtomicIncrement(num_single_thread_task_runners_, 1);
+ }
// SingleThreadTaskRunner:
bool PostDelayedTask(const tracked_objects::Location& from_here,
@@ -58,7 +68,10 @@ class SchedulerSingleThreadTaskRunner : public SingleThreadTaskRunner {
}
private:
- ~SchedulerSingleThreadTaskRunner() override = default;
+ ~SchedulerSingleThreadTaskRunner() override {
+ base::subtle::NoBarrier_AtomicIncrement(num_single_thread_task_runners_,
+ -1);
+ }
// Sequence for all Tasks posted through this TaskRunner.
const scoped_refptr<Sequence> sequence_ = new Sequence;
@@ -68,6 +81,10 @@ class SchedulerSingleThreadTaskRunner : public SingleThreadTaskRunner {
TaskTracker* const task_tracker_;
DelayedTaskManager* const delayed_task_manager_;
+ // Number of single-thread TaskRunners associated with |executor_|.
+ // Incremented by the constructor and decremented by the destructor.
+ base::subtle::Atomic32* const num_single_thread_task_runners_;
+
DISALLOW_COPY_AND_ASSIGN(SchedulerSingleThreadTaskRunner);
};
@@ -97,7 +114,12 @@ SchedulerWorkerThread::~SchedulerWorkerThread() {
scoped_refptr<SingleThreadTaskRunner>
SchedulerWorkerThread::CreateTaskRunnerWithTraits(const TaskTraits& traits) {
return make_scoped_refptr(new SchedulerSingleThreadTaskRunner(
- traits, this, task_tracker_, delayed_task_manager_));
+ traits, this, task_tracker_, delayed_task_manager_,
+ &num_single_thread_task_runners_));
+}
+
+size_t SchedulerWorkerThread::GetNumSingleThreadTaskRunners() const {
+ return base::subtle::NoBarrier_Load(&num_single_thread_task_runners_);
}
void SchedulerWorkerThread::WakeUp() {
@@ -144,6 +166,8 @@ SchedulerWorkerThread::SchedulerWorkerThread(
DCHECK(delayed_task_manager_);
DCHECK(predecessor_priority_queue);
+ base::subtle::NoBarrier_Store(&num_single_thread_task_runners_, 0);
+
const size_t kDefaultStackSize = 0;
PlatformThread::CreateWithPriority(kDefaultStackSize, this, &thread_handle_,
thread_priority);
« base/task_scheduler/scheduler_thread_pool.cc ('K') | « base/task_scheduler/scheduler_worker_thread.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698