| Index: base/task_scheduler/scheduler_worker_thread_unittest.cc
|
| diff --git a/base/task_scheduler/scheduler_worker_thread_unittest.cc b/base/task_scheduler/scheduler_worker_thread_unittest.cc
|
| index 9b0eefe4b0af5151701866b8aaf1e70282cf7de8..279638859405eaac6b0569c8f8fabaaf9e1aaece 100644
|
| --- a/base/task_scheduler/scheduler_worker_thread_unittest.cc
|
| +++ b/base/task_scheduler/scheduler_worker_thread_unittest.cc
|
| @@ -85,9 +85,9 @@ class TaskSchedulerWorkerThreadTest : public testing::Test,
|
| num_sequences_to_create_ = num_sequences_to_create;
|
| }
|
|
|
| - size_t NumGetWork() const {
|
| + void SetMaxGetWork(size_t max_get_work) {
|
| AutoSchedulerLock auto_lock(lock_);
|
| - return num_get_work_;
|
| + max_get_work_ = max_get_work;
|
| }
|
|
|
| std::unique_ptr<SchedulerWorkerThread> worker_thread_;
|
| @@ -119,13 +119,16 @@ class TaskSchedulerWorkerThreadTest : public testing::Test,
|
| ++num_get_work_;
|
| num_get_work_cv_->Signal();
|
|
|
| + // Verify that this method isn't called more times than expected.
|
| + EXPECT_LE(num_get_work_, max_get_work_);
|
| +
|
| // Check if a Sequence should be returned.
|
| if (num_sequences_to_create_ == 0)
|
| return nullptr;
|
| --num_sequences_to_create_;
|
| }
|
|
|
| - // Create a Sequence that contains 1 Task.
|
| + // Create a Sequence that contains one Task.
|
| scoped_refptr<Sequence> sequence(new Sequence);
|
| task_tracker_.PostTask(
|
| Bind(IgnoreResult(&Sequence::PushTask), Unretained(sequence.get())),
|
| @@ -146,12 +149,14 @@ class TaskSchedulerWorkerThreadTest : public testing::Test,
|
| void RanTaskFromSequence(scoped_refptr<Sequence> sequence) override {
|
| AutoSchedulerLock auto_lock(lock_);
|
| run_sequences_.push_back(std::move(sequence));
|
| + EXPECT_LE(run_sequences_.size(), created_sequences_.size());
|
| run_sequences_cv_->Signal();
|
| }
|
|
|
| void RunTaskCallback() {
|
| AutoSchedulerLock auto_lock(lock_);
|
| ++num_run_tasks_;
|
| + EXPECT_LE(num_run_tasks_, created_sequences_.size());
|
| }
|
|
|
| TaskTracker task_tracker_;
|
| @@ -172,6 +177,9 @@ class TaskSchedulerWorkerThreadTest : public testing::Test,
|
| // Number of times that GetWork() has been called.
|
| size_t num_get_work_ = 0;
|
|
|
| + // Maximum number of times that GetWork() can be called.
|
| + size_t max_get_work_ = 0;
|
| +
|
| // Condition variable signaled when |num_get_work_| is incremented.
|
| std::unique_ptr<ConditionVariable> num_get_work_cv_;
|
|
|
| @@ -191,43 +199,43 @@ class TaskSchedulerWorkerThreadTest : public testing::Test,
|
| };
|
|
|
| // Verify that when GetWork() continuously returns Sequences, all Tasks in these
|
| -// Sequences run successfully. The SchedulerWorkerThread is woken up once.
|
| -TEST_F(TaskSchedulerWorkerThreadTest, ContinousWork) {
|
| +// Sequences run successfully. The test wakes up the SchedulerWorkerThread once.
|
| +TEST_F(TaskSchedulerWorkerThreadTest, ContinuousWork) {
|
| // Set GetWork() to return |kNumSequencesPerTest| Sequences before starting to
|
| // return nullptr.
|
| SetNumSequencesToCreate(kNumSequencesPerTest);
|
|
|
| + // Expect |kNumSequencesPerTest| calls to GetWork() in which it returns a
|
| + // Sequence and one call in which its returns nullptr.
|
| + const size_t kExpectedNumGetWork = kNumSequencesPerTest + 1;
|
| + SetMaxGetWork(kExpectedNumGetWork);
|
| +
|
| // Wake up |worker_thread_| and wait until it has run all the Tasks returned
|
| // by GetWork().
|
| worker_thread_->WakeUp();
|
| WaitForAllSequencesToRun();
|
| -
|
| - // Expect |kNumSequencesPerTest| calls to GetWork() in which it returned a
|
| - // Sequence and 1 call in which it returned nullptr.
|
| - const size_t expected_num_get_work = kNumSequencesPerTest + 1;
|
| - WaitForNumGetWork(expected_num_get_work);
|
| - EXPECT_EQ(expected_num_get_work, NumGetWork());
|
| + WaitForNumGetWork(kExpectedNumGetWork);
|
| }
|
|
|
| // Verify that when GetWork() alternates between returning a Sequence and
|
| // returning nullptr, all Tasks in the returned Sequences run successfully. The
|
| -// SchedulerWorkerThread is woken up once for each Sequence.
|
| +// test wakes up the SchedulerWorkerThread once for each Sequence.
|
| TEST_F(TaskSchedulerWorkerThreadTest, IntermittentWork) {
|
| for (size_t i = 0; i < kNumSequencesPerTest; ++i) {
|
| // Set GetWork() to return 1 Sequence before starting to return
|
| // nullptr.
|
| SetNumSequencesToCreate(1);
|
|
|
| + // Expect |i + 1| calls to GetWork() in which it returns a Sequence and
|
| + // |i + 1| calls in which it returns nullptr.
|
| + const size_t expected_num_get_work = 2 * (i + 1);
|
| + SetMaxGetWork(expected_num_get_work);
|
| +
|
| // Wake up |worker_thread_| and wait until it has run the Task returned by
|
| // GetWork().
|
| worker_thread_->WakeUp();
|
| WaitForAllSequencesToRun();
|
| -
|
| - // Expect |i| calls to GetWork() in which it returned a Sequence and
|
| - // |i| calls in which it returned nullptr.
|
| - const size_t expected_num_get_work = 2 * (i + 1);
|
| WaitForNumGetWork(expected_num_get_work);
|
| - EXPECT_EQ(expected_num_get_work, NumGetWork());
|
| }
|
| }
|
|
|
|
|