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 |