| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/scheduler/child/task_queue_manager.h" | 5 #include "components/scheduler/child/task_queue_manager.h" |
| 6 | 6 |
| 7 #include "base/location.h" | 7 #include "base/location.h" |
| 8 #include "base/run_loop.h" | 8 #include "base/run_loop.h" |
| 9 #include "base/single_thread_task_runner.h" | 9 #include "base/single_thread_task_runner.h" |
| 10 #include "base/test/simple_test_tick_clock.h" | 10 #include "base/test/simple_test_tick_clock.h" |
| (...skipping 1011 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1022 base::RunLoop run_loop; | 1022 base::RunLoop run_loop; |
| 1023 runners_[0]->PostTask( | 1023 runners_[0]->PostTask( |
| 1024 FROM_HERE, | 1024 FROM_HERE, |
| 1025 base::Bind(&PostAndQuitFromNestedRunloop, base::Unretained(&run_loop), | 1025 base::Bind(&PostAndQuitFromNestedRunloop, base::Unretained(&run_loop), |
| 1026 runners_[0], base::Unretained(&was_nested))); | 1026 runners_[0], base::Unretained(&was_nested))); |
| 1027 | 1027 |
| 1028 message_loop_->RunUntilIdle(); | 1028 message_loop_->RunUntilIdle(); |
| 1029 EXPECT_FALSE(was_nested); | 1029 EXPECT_FALSE(was_nested); |
| 1030 } | 1030 } |
| 1031 | 1031 |
| 1032 class SequenceNumberCapturingTaskObserver | |
| 1033 : public base::MessageLoop::TaskObserver { | |
| 1034 public: | |
| 1035 // MessageLoop::TaskObserver overrides. | |
| 1036 void WillProcessTask(const base::PendingTask& pending_task) override {} | |
| 1037 void DidProcessTask(const base::PendingTask& pending_task) override { | |
| 1038 sequence_numbers_.push_back(pending_task.sequence_num); | |
| 1039 } | |
| 1040 | |
| 1041 const std::vector<int>& sequence_numbers() const { return sequence_numbers_; } | |
| 1042 | |
| 1043 private: | |
| 1044 std::vector<int> sequence_numbers_; | |
| 1045 }; | |
| 1046 | |
| 1047 TEST_F(TaskQueueManagerTest, SequenceNumSetWhenTaskIsPosted) { | |
| 1048 Initialize(1u); | |
| 1049 | |
| 1050 SequenceNumberCapturingTaskObserver observer; | |
| 1051 manager_->AddTaskObserver(&observer); | |
| 1052 | |
| 1053 // Register four tasks that will run in reverse order. | |
| 1054 std::vector<int> run_order; | |
| 1055 runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order), | |
| 1056 base::TimeDelta::FromMilliseconds(30)); | |
| 1057 runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 2, &run_order), | |
| 1058 base::TimeDelta::FromMilliseconds(20)); | |
| 1059 runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&TestTask, 3, &run_order), | |
| 1060 base::TimeDelta::FromMilliseconds(10)); | |
| 1061 runners_[0]->PostTask(FROM_HERE, base::Bind(&TestTask, 4, &run_order)); | |
| 1062 | |
| 1063 test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(40)); | |
| 1064 ASSERT_THAT(run_order, ElementsAre(4, 3, 2, 1)); | |
| 1065 | |
| 1066 // The sequence numbers are a zero-based monotonically incrememting counter | |
| 1067 // which should be set when the task is posted rather than when it's enqueued | |
| 1068 // onto the incomming queue. | |
| 1069 EXPECT_THAT(observer.sequence_numbers(), ElementsAre(3, 2, 1, 0)); | |
| 1070 | |
| 1071 manager_->RemoveTaskObserver(&observer); | |
| 1072 } | |
| 1073 | |
| 1074 } // namespace scheduler | 1032 } // namespace scheduler |
| OLD | NEW |