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 |