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 |
1032 } // namespace scheduler | 1074 } // namespace scheduler |
OLD | NEW |