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 |
deleted file mode 100644 |
index afc70ec360ba136aee7b0e1dc719facaf678d284..0000000000000000000000000000000000000000 |
--- a/base/task_scheduler/scheduler_worker_thread.cc |
+++ /dev/null |
@@ -1,111 +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_(WaitableEvent::ResetPolicy::AUTOMATIC, |
- WaitableEvent::InitialState::NOT_SIGNALED), |
- 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 |