Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(281)

Unified Diff: components/scheduler/child/task_queue_manager_unittest.cc

Issue 1259583006: Reland: Explicitly track the scheduler task enqueueing order in a new field (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix the DCHECK Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
« no previous file with comments | « components/scheduler/child/task_queue_manager.cc ('k') | components/scheduler/child/task_queue_selector_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698