Chromium Code Reviews| Index: base/task_scheduler/scheduler_worker_unittest.cc |
| diff --git a/base/task_scheduler/scheduler_worker_unittest.cc b/base/task_scheduler/scheduler_worker_unittest.cc |
| index 437bbedfdb5472dd74a6e45def138c4667dee6b9..3b54f51d08c275bc356884754077cb7c32caa400 100644 |
| --- a/base/task_scheduler/scheduler_worker_unittest.cc |
| +++ b/base/task_scheduler/scheduler_worker_unittest.cc |
| @@ -14,10 +14,12 @@ |
| #include "base/macros.h" |
| #include "base/memory/ptr_util.h" |
| #include "base/synchronization/condition_variable.h" |
| +#include "base/synchronization/waitable_event.h" |
| #include "base/task_scheduler/scheduler_lock.h" |
| #include "base/task_scheduler/sequence.h" |
| #include "base/task_scheduler/task.h" |
| #include "base/task_scheduler/task_tracker.h" |
| +#include "base/threading/platform_thread.h" |
| #include "base/time/time.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| @@ -421,6 +423,49 @@ TEST(TaskSchedulerWorkerTest, CreateDetached) { |
| worker->JoinForTesting(); |
| } |
| +namespace { |
| + |
| +class ExpectNormalPriorityDelegate : public SchedulerWorker::Delegate { |
| + public: |
| + ExpectNormalPriorityDelegate() |
| + : done_(WaitableEvent::ResetPolicy::MANUAL, |
| + WaitableEvent::InitialState::NOT_SIGNALED) {} |
| + |
| + void WaitDone() { done_.Wait(); } |
|
robliao
2016/07/19 22:41:28
Nit: Maybe WaitForGetWork
fdoray
2016/07/20 18:22:21
Done.
|
| + |
| + // SchedulerWorker::Delegate: |
| + void OnMainEntry(SchedulerWorker* worker) override {} |
| + scoped_refptr<Sequence> GetWork(SchedulerWorker* worker) override { |
| + EXPECT_EQ(ThreadPriority::NORMAL, |
| + PlatformThread::GetCurrentThreadPriority()); |
| + done_.Signal(); |
| + return nullptr; |
| + } |
| + void ReEnqueueSequence(scoped_refptr<Sequence> sequence) override {} |
| + TimeDelta GetSleepTimeout() override { return TimeDelta(); } |
|
robliao
2016/07/19 22:41:28
Would be safer to return TimeDelta::Max()
fdoray
2016/07/20 18:22:21
Done.
|
| + bool CanDetach(SchedulerWorker* worker) override { return false; } |
| + |
| + private: |
| + WaitableEvent done_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(ExpectNormalPriorityDelegate); |
| +}; |
| + |
| +} // namespace |
| + |
| +TEST(TaskSchedulerWorkerTest, BumpPriorityDuringShutdown) { |
| + TaskTracker task_tracker; |
| + task_tracker.SetIsShutdownInProgressForTesting(); |
| + |
| + ExpectNormalPriorityDelegate* delegate = new ExpectNormalPriorityDelegate; |
| + std::unique_ptr<SchedulerWorker> worker = SchedulerWorker::Create( |
| + ThreadPriority::BACKGROUND, WrapUnique(delegate), &task_tracker, |
| + SchedulerWorker::InitialState::ALIVE); |
| + worker->WakeUp(); |
| + delegate->WaitDone(); |
| + worker->JoinForTesting(); |
| +} |
| + |
| } // namespace |
| } // namespace internal |
| } // namespace base |