| Index: components/scheduler/child/task_queue_manager_unittest.cc
|
| diff --git a/components/scheduler/child/task_queue_manager_unittest.cc b/components/scheduler/child/task_queue_manager_unittest.cc
|
| index d9eb15416ca36ee2dac0f1c65dfbaaf036046099..0bd2b7517ee0b64816fb34a262d83679b0b7cd23 100644
|
| --- a/components/scheduler/child/task_queue_manager_unittest.cc
|
| +++ b/components/scheduler/child/task_queue_manager_unittest.cc
|
| @@ -1029,4 +1029,46 @@ TEST_F(TaskQueueManagerTest, QuitWhileNested) {
|
| EXPECT_FALSE(was_nested);
|
| }
|
|
|
| +class SequenceNumberCapturingTaskObserver
|
| + : public base::MessageLoop::TaskObserver {
|
| + public:
|
| + // MessageLoop::TaskObserver overrides.
|
| + void WillProcessTask(const base::PendingTask& pending_task) override {}
|
| + void DidProcessTask(const base::PendingTask& pending_task) override {
|
| + sequence_numbers_.push_back(pending_task.sequence_num);
|
| + }
|
| +
|
| + const std::vector<int>& sequence_numbers() const { return sequence_numbers_; }
|
| +
|
| + private:
|
| + std::vector<int> sequence_numbers_;
|
| +};
|
| +
|
| +TEST_F(TaskQueueManagerTest, SequenceNumSetWhenTaskIsPosted) {
|
| + Initialize(1u);
|
| +
|
| + SequenceNumberCapturingTaskObserver observer;
|
| + manager_->AddTaskObserver(&observer);
|
| +
|
| + // Register four tasks that will run in reverse order.
|
| + std::vector<int> run_order;
|
| + runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order),
|
| + base::TimeDelta::FromMilliseconds(30));
|
| + runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 2, &run_order),
|
| + base::TimeDelta::FromMilliseconds(20));
|
| + runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 3, &run_order),
|
| + base::TimeDelta::FromMilliseconds(10));
|
| + runners_[0]->PostTask(FROM_HERE, base::Bind(&TestTask, 4, &run_order));
|
| +
|
| + test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(40));
|
| + ASSERT_THAT(run_order, ElementsAre(4, 3, 2, 1));
|
| +
|
| + // The sequence numbers are a zero-based monotonically incrememting counter
|
| + // which should be set when the task is posted rather than when it's enqueued
|
| + // onto the incomming queue.
|
| + EXPECT_THAT(observer.sequence_numbers(), ElementsAre(3, 2, 1, 0));
|
| +
|
| + manager_->RemoveTaskObserver(&observer);
|
| +}
|
| +
|
| } // namespace scheduler
|
|
|