| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "base/task_scheduler/sequence.h" | 5 #include "base/task_scheduler/sequence.h" |
| 6 | 6 |
| 7 #include "base/macros.h" | 7 #include "base/macros.h" |
| 8 #include "base/time/time.h" | 8 #include "base/time/time.h" |
| 9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
| 10 | 10 |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 61 const Task* task_a_; | 61 const Task* task_a_; |
| 62 const Task* task_b_; | 62 const Task* task_b_; |
| 63 const Task* task_c_; | 63 const Task* task_c_; |
| 64 const Task* task_d_; | 64 const Task* task_d_; |
| 65 const Task* task_e_; | 65 const Task* task_e_; |
| 66 | 66 |
| 67 private: | 67 private: |
| 68 DISALLOW_COPY_AND_ASSIGN(TaskSchedulerSequenceTest); | 68 DISALLOW_COPY_AND_ASSIGN(TaskSchedulerSequenceTest); |
| 69 }; | 69 }; |
| 70 | 70 |
| 71 void ExpectSortKey(TaskPriority expected_priority, | |
| 72 TimeTicks expected_sequenced_time, | |
| 73 const SequenceSortKey& actual_sort_key) { | |
| 74 EXPECT_EQ(expected_priority, actual_sort_key.priority); | |
| 75 EXPECT_EQ(expected_sequenced_time, actual_sort_key.next_task_sequenced_time); | |
| 76 } | |
| 77 | |
| 78 } // namespace | 71 } // namespace |
| 79 | 72 |
| 80 TEST_F(TaskSchedulerSequenceTest, PushPopPeek) { | 73 TEST_F(TaskSchedulerSequenceTest, PushPopPeek) { |
| 81 scoped_refptr<Sequence> sequence(new Sequence); | 74 scoped_refptr<Sequence> sequence(new Sequence); |
| 82 | 75 |
| 83 // Push task A in the sequence. Its sequenced time should be updated and it | 76 // Push task A in the sequence. Its sequenced time should be updated and it |
| 84 // should be in front of the sequence. | 77 // should be in front of the sequence. |
| 85 EXPECT_TRUE(sequence->PushTask(std::move(task_a_owned_))); | 78 EXPECT_TRUE(sequence->PushTask(std::move(task_a_owned_))); |
| 86 EXPECT_FALSE(task_a_->sequenced_time.is_null()); | 79 EXPECT_FALSE(task_a_->sequenced_time.is_null()); |
| 87 EXPECT_EQ(task_a_, sequence->PeekTask()); | 80 EXPECT_EQ(task_a_, sequence->PeekTask()); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 126 EXPECT_TRUE(sequence->PopTask()); | 119 EXPECT_TRUE(sequence->PopTask()); |
| 127 EXPECT_EQ(nullptr, sequence->PeekTask()); | 120 EXPECT_EQ(nullptr, sequence->PeekTask()); |
| 128 } | 121 } |
| 129 | 122 |
| 130 TEST_F(TaskSchedulerSequenceTest, GetSortKey) { | 123 TEST_F(TaskSchedulerSequenceTest, GetSortKey) { |
| 131 scoped_refptr<Sequence> sequence(new Sequence); | 124 scoped_refptr<Sequence> sequence(new Sequence); |
| 132 | 125 |
| 133 // Push task A in the sequence. The highest priority is from task A | 126 // Push task A in the sequence. The highest priority is from task A |
| 134 // (BACKGROUND). Task A is in front of the sequence. | 127 // (BACKGROUND). Task A is in front of the sequence. |
| 135 sequence->PushTask(std::move(task_a_owned_)); | 128 sequence->PushTask(std::move(task_a_owned_)); |
| 136 ExpectSortKey(TaskPriority::BACKGROUND, task_a_->sequenced_time, | 129 EXPECT_EQ(SequenceSortKey(TaskPriority::BACKGROUND, task_a_->sequenced_time), |
| 137 sequence->GetSortKey()); | 130 sequence->GetSortKey()); |
| 138 | 131 |
| 139 // Push task B in the sequence. The highest priority is from task B | 132 // Push task B in the sequence. The highest priority is from task B |
| 140 // (USER_VISIBLE). Task A is still in front of the sequence. | 133 // (USER_VISIBLE). Task A is still in front of the sequence. |
| 141 sequence->PushTask(std::move(task_b_owned_)); | 134 sequence->PushTask(std::move(task_b_owned_)); |
| 142 ExpectSortKey(TaskPriority::USER_VISIBLE, task_a_->sequenced_time, | 135 EXPECT_EQ( |
| 143 sequence->GetSortKey()); | 136 SequenceSortKey(TaskPriority::USER_VISIBLE, task_a_->sequenced_time), |
| 137 sequence->GetSortKey()); |
| 144 | 138 |
| 145 // Push task C in the sequence. The highest priority is from task C | 139 // Push task C in the sequence. The highest priority is from task C |
| 146 // (USER_BLOCKING). Task A is still in front of the sequence. | 140 // (USER_BLOCKING). Task A is still in front of the sequence. |
| 147 sequence->PushTask(std::move(task_c_owned_)); | 141 sequence->PushTask(std::move(task_c_owned_)); |
| 148 ExpectSortKey(TaskPriority::USER_BLOCKING, task_a_->sequenced_time, | 142 EXPECT_EQ( |
| 149 sequence->GetSortKey()); | 143 SequenceSortKey(TaskPriority::USER_BLOCKING, task_a_->sequenced_time), |
| 144 sequence->GetSortKey()); |
| 150 | 145 |
| 151 // Push task D in the sequence. The highest priority is from tasks C/D | 146 // Push task D in the sequence. The highest priority is from tasks C/D |
| 152 // (USER_BLOCKING). Task A is still in front of the sequence. | 147 // (USER_BLOCKING). Task A is still in front of the sequence. |
| 153 sequence->PushTask(std::move(task_d_owned_)); | 148 sequence->PushTask(std::move(task_d_owned_)); |
| 154 ExpectSortKey(TaskPriority::USER_BLOCKING, task_a_->sequenced_time, | 149 EXPECT_EQ( |
| 155 sequence->GetSortKey()); | 150 SequenceSortKey(TaskPriority::USER_BLOCKING, task_a_->sequenced_time), |
| 151 sequence->GetSortKey()); |
| 156 | 152 |
| 157 // Pop task A. The highest priority is still USER_BLOCKING. The task in front | 153 // Pop task A. The highest priority is still USER_BLOCKING. The task in front |
| 158 // of the sequence is now task B. | 154 // of the sequence is now task B. |
| 159 sequence->PopTask(); | 155 sequence->PopTask(); |
| 160 ExpectSortKey(TaskPriority::USER_BLOCKING, task_b_->sequenced_time, | 156 EXPECT_EQ( |
| 161 sequence->GetSortKey()); | 157 SequenceSortKey(TaskPriority::USER_BLOCKING, task_b_->sequenced_time), |
| 158 sequence->GetSortKey()); |
| 162 | 159 |
| 163 // Pop task B. The highest priority is still USER_BLOCKING. The task in front | 160 // Pop task B. The highest priority is still USER_BLOCKING. The task in front |
| 164 // of the sequence is now task C. | 161 // of the sequence is now task C. |
| 165 sequence->PopTask(); | 162 sequence->PopTask(); |
| 166 ExpectSortKey(TaskPriority::USER_BLOCKING, task_c_->sequenced_time, | 163 EXPECT_EQ( |
| 167 sequence->GetSortKey()); | 164 SequenceSortKey(TaskPriority::USER_BLOCKING, task_c_->sequenced_time), |
| 165 sequence->GetSortKey()); |
| 168 | 166 |
| 169 // Pop task C. The highest priority is still USER_BLOCKING. The task in front | 167 // Pop task C. The highest priority is still USER_BLOCKING. The task in front |
| 170 // of the sequence is now task D. | 168 // of the sequence is now task D. |
| 171 sequence->PopTask(); | 169 sequence->PopTask(); |
| 172 ExpectSortKey(TaskPriority::USER_BLOCKING, task_d_->sequenced_time, | 170 EXPECT_EQ( |
| 173 sequence->GetSortKey()); | 171 SequenceSortKey(TaskPriority::USER_BLOCKING, task_d_->sequenced_time), |
| 172 sequence->GetSortKey()); |
| 174 | 173 |
| 175 // Push task E in the sequence. The highest priority is still USER_BLOCKING. | 174 // Push task E in the sequence. The highest priority is still USER_BLOCKING. |
| 176 // The task in front of the sequence is still task D. | 175 // The task in front of the sequence is still task D. |
| 177 sequence->PushTask(std::move(task_e_owned_)); | 176 sequence->PushTask(std::move(task_e_owned_)); |
| 178 ExpectSortKey(TaskPriority::USER_BLOCKING, task_d_->sequenced_time, | 177 EXPECT_EQ( |
| 179 sequence->GetSortKey()); | 178 SequenceSortKey(TaskPriority::USER_BLOCKING, task_d_->sequenced_time), |
| 179 sequence->GetSortKey()); |
| 180 | 180 |
| 181 // Pop task D. The highest priority is now from task E (BACKGROUND). The | 181 // Pop task D. The highest priority is now from task E (BACKGROUND). The |
| 182 // task in front of the sequence is now task E. | 182 // task in front of the sequence is now task E. |
| 183 sequence->PopTask(); | 183 sequence->PopTask(); |
| 184 ExpectSortKey(TaskPriority::BACKGROUND, task_e_->sequenced_time, | 184 EXPECT_EQ(SequenceSortKey(TaskPriority::BACKGROUND, task_e_->sequenced_time), |
| 185 sequence->GetSortKey()); | 185 sequence->GetSortKey()); |
| 186 } | 186 } |
| 187 | 187 |
| 188 } // namespace internal | 188 } // namespace internal |
| 189 } // namespace base | 189 } // namespace base |
| OLD | NEW |