summaryrefslogtreecommitdiffstats
path: root/chromium/base/task_scheduler/scheduler_worker_thread.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/base/task_scheduler/scheduler_worker_thread.cc')
-rw-r--r--chromium/base/task_scheduler/scheduler_worker_thread.cc110
1 files changed, 0 insertions, 110 deletions
diff --git a/chromium/base/task_scheduler/scheduler_worker_thread.cc b/chromium/base/task_scheduler/scheduler_worker_thread.cc
deleted file mode 100644
index ca65a6d1fdc..00000000000
--- a/chromium/base/task_scheduler/scheduler_worker_thread.cc
+++ /dev/null
@@ -1,110 +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.
-
-#include "base/task_scheduler/scheduler_worker_thread.h"
-
-#include <stddef.h>
-
-#include <utility>
-
-#include "base/logging.h"
-#include "base/task_scheduler/task_tracker.h"
-
-namespace base {
-namespace internal {
-
-std::unique_ptr<SchedulerWorkerThread> SchedulerWorkerThread::Create(
- ThreadPriority thread_priority,
- std::unique_ptr<Delegate> delegate,
- TaskTracker* task_tracker) {
- std::unique_ptr<SchedulerWorkerThread> worker_thread(
- new SchedulerWorkerThread(thread_priority, std::move(delegate),
- task_tracker));
-
- if (worker_thread->thread_handle_.is_null())
- return nullptr;
- return worker_thread;
-}
-
-SchedulerWorkerThread::~SchedulerWorkerThread() {
- DCHECK(ShouldExitForTesting());
-}
-
-void SchedulerWorkerThread::WakeUp() {
- wake_up_event_.Signal();
-}
-
-void SchedulerWorkerThread::JoinForTesting() {
- {
- AutoSchedulerLock auto_lock(should_exit_for_testing_lock_);
- should_exit_for_testing_ = true;
- }
- WakeUp();
- PlatformThread::Join(thread_handle_);
-}
-
-SchedulerWorkerThread::SchedulerWorkerThread(ThreadPriority thread_priority,
- std::unique_ptr<Delegate> delegate,
- TaskTracker* task_tracker)
- : wake_up_event_(false, false),
- delegate_(std::move(delegate)),
- task_tracker_(task_tracker) {
- DCHECK(delegate_);
- DCHECK(task_tracker_);
-
- const size_t kDefaultStackSize = 0;
- PlatformThread::CreateWithPriority(kDefaultStackSize, this, &thread_handle_,
- thread_priority);
-}
-
-void SchedulerWorkerThread::ThreadMain() {
- delegate_->OnMainEntry(this);
-
- // A SchedulerWorkerThread starts out sleeping.
- wake_up_event_.Wait();
-
- while (!task_tracker_->shutdown_completed() && !ShouldExitForTesting()) {
- // Get the sequence containing the next task to execute.
- scoped_refptr<Sequence> sequence = delegate_->GetWork(this);
-
- if (!sequence) {
- TimeDelta sleep_time = delegate_->GetSleepTimeout();
- if (sleep_time.is_max()) {
- // Calling TimedWait with TimeDelta::Max is not recommended per
- // http://crbug.com/465948.
- wake_up_event_.Wait();
- } else {
- wake_up_event_.TimedWait(sleep_time);
- }
- continue;
- }
-
- task_tracker_->RunTask(sequence->PeekTask());
-
- const bool sequence_became_empty = sequence->PopTask();
-
- // If |sequence| isn't empty immediately after the pop, re-enqueue it to
- // maintain the invariant that a non-empty Sequence is always referenced by
- // either a PriorityQueue or a SchedulerWorkerThread. If it is empty and
- // there are live references to it, it will be enqueued when a Task is added
- // to it. Otherwise, it will be destroyed at the end of this scope.
- if (!sequence_became_empty)
- delegate_->ReEnqueueSequence(std::move(sequence));
-
- // Calling WakeUp() guarantees that this SchedulerWorkerThread will run
- // Tasks from Sequences returned by the GetWork() method of |delegate_|
- // until it returns nullptr. Resetting |wake_up_event_| here doesn't break
- // this invariant and avoids a useless loop iteration before going to sleep
- // if WakeUp() is called while this SchedulerWorkerThread is awake.
- wake_up_event_.Reset();
- }
-}
-
-bool SchedulerWorkerThread::ShouldExitForTesting() const {
- AutoSchedulerLock auto_lock(should_exit_for_testing_lock_);
- return should_exit_for_testing_;
-}
-
-} // namespace internal
-} // namespace base