Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "platform/scheduler/base/time_domain.h" | 5 #include "platform/scheduler/base/time_domain.h" |
| 6 | 6 |
| 7 #include "base/macros.h" | 7 #include "base/macros.h" |
| 8 #include "base/memory/ptr_util.h" | 8 #include "base/memory/ptr_util.h" |
| 9 #include "base/test/simple_test_tick_clock.h" | 9 #include "base/test/simple_test_tick_clock.h" |
| 10 #include "cc/test/ordered_simple_task_runner.h" | 10 #include "cc/test/ordered_simple_task_runner.h" |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 87 | 87 |
| 88 std::unique_ptr<MockTimeDomain> time_domain_; | 88 std::unique_ptr<MockTimeDomain> time_domain_; |
| 89 scoped_refptr<internal::TaskQueueImpl> task_queue_; | 89 scoped_refptr<internal::TaskQueueImpl> task_queue_; |
| 90 }; | 90 }; |
| 91 | 91 |
| 92 TEST_F(TimeDomainTest, ScheduleDelayedWork) { | 92 TEST_F(TimeDomainTest, ScheduleDelayedWork) { |
| 93 base::TimeDelta delay = base::TimeDelta::FromMilliseconds(10); | 93 base::TimeDelta delay = base::TimeDelta::FromMilliseconds(10); |
| 94 base::TimeTicks delayed_runtime = time_domain_->Now() + delay; | 94 base::TimeTicks delayed_runtime = time_domain_->Now() + delay; |
| 95 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, delayed_runtime)); | 95 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, delayed_runtime)); |
| 96 base::TimeTicks now = time_domain_->Now(); | 96 base::TimeTicks now = time_domain_->Now(); |
| 97 time_domain_->ScheduleDelayedWork(task_queue_.get(), now + delay, now); | 97 time_domain_->ScheduleDelayedWork(task_queue_.get(), now + delay, 0, now); |
| 98 | 98 |
| 99 base::TimeTicks next_scheduled_runtime; | 99 base::TimeTicks next_scheduled_runtime; |
| 100 EXPECT_TRUE(time_domain_->NextScheduledRunTime(&next_scheduled_runtime)); | 100 EXPECT_TRUE(time_domain_->NextScheduledRunTime(&next_scheduled_runtime)); |
| 101 EXPECT_EQ(delayed_runtime, next_scheduled_runtime); | 101 EXPECT_EQ(delayed_runtime, next_scheduled_runtime); |
| 102 | 102 |
| 103 TaskQueue* next_task_queue; | 103 TaskQueue* next_task_queue; |
| 104 EXPECT_TRUE(time_domain_->NextScheduledTaskQueue(&next_task_queue)); | 104 EXPECT_TRUE(time_domain_->NextScheduledTaskQueue(&next_task_queue)); |
| 105 EXPECT_EQ(task_queue_.get(), next_task_queue); | 105 EXPECT_EQ(task_queue_.get(), next_task_queue); |
| 106 Mock::VerifyAndClearExpectations(time_domain_.get()); | 106 Mock::VerifyAndClearExpectations(time_domain_.get()); |
| 107 | 107 |
| 108 EXPECT_CALL(*time_domain_.get(), CancelWakeupAt(_)).Times(AnyNumber()); | 108 EXPECT_CALL(*time_domain_.get(), CancelWakeupAt(_)).Times(AnyNumber()); |
| 109 } | 109 } |
| 110 | 110 |
| 111 TEST_F(TimeDomainTest, ScheduleDelayedWorkSupersedesPreviousWakeup) { | 111 TEST_F(TimeDomainTest, ScheduleDelayedWorkSupersedesPreviousWakeup) { |
| 112 base::TimeDelta delay1 = base::TimeDelta::FromMilliseconds(10); | 112 base::TimeDelta delay1 = base::TimeDelta::FromMilliseconds(10); |
| 113 base::TimeDelta delay2 = base::TimeDelta::FromMilliseconds(100); | 113 base::TimeDelta delay2 = base::TimeDelta::FromMilliseconds(100); |
| 114 base::TimeTicks delayed_runtime1 = time_domain_->Now() + delay1; | 114 base::TimeTicks delayed_runtime1 = time_domain_->Now() + delay1; |
| 115 base::TimeTicks delayed_runtime2 = time_domain_->Now() + delay2; | 115 base::TimeTicks delayed_runtime2 = time_domain_->Now() + delay2; |
| 116 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, delayed_runtime1)); | 116 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, delayed_runtime1)); |
| 117 base::TimeTicks now = time_domain_->Now(); | 117 base::TimeTicks now = time_domain_->Now(); |
| 118 time_domain_->ScheduleDelayedWork(task_queue_.get(), delayed_runtime1, now); | 118 time_domain_->ScheduleDelayedWork(task_queue_.get(), delayed_runtime1, 0, |
| 119 now); | |
| 119 | 120 |
| 120 base::TimeTicks next_scheduled_runtime; | 121 base::TimeTicks next_scheduled_runtime; |
| 121 EXPECT_TRUE(time_domain_->NextScheduledRunTime(&next_scheduled_runtime)); | 122 EXPECT_TRUE(time_domain_->NextScheduledRunTime(&next_scheduled_runtime)); |
| 122 EXPECT_EQ(delayed_runtime1, next_scheduled_runtime); | 123 EXPECT_EQ(delayed_runtime1, next_scheduled_runtime); |
| 123 | 124 |
| 124 Mock::VerifyAndClearExpectations(time_domain_.get()); | 125 Mock::VerifyAndClearExpectations(time_domain_.get()); |
| 125 | 126 |
| 126 // Now scheduler a later wakeup, which should replace the previously requested | 127 // Now scheduler a later wakeup, which should replace the previously requested |
| 127 // one. | 128 // one. |
| 128 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, delayed_runtime2)); | 129 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, delayed_runtime2)); |
| 129 time_domain_->ScheduleDelayedWork(task_queue_.get(), delayed_runtime2, now); | 130 time_domain_->ScheduleDelayedWork(task_queue_.get(), delayed_runtime2, 0, |
| 131 now); | |
| 130 | 132 |
| 131 EXPECT_TRUE(time_domain_->NextScheduledRunTime(&next_scheduled_runtime)); | 133 EXPECT_TRUE(time_domain_->NextScheduledRunTime(&next_scheduled_runtime)); |
| 132 EXPECT_EQ(delayed_runtime2, next_scheduled_runtime); | 134 EXPECT_EQ(delayed_runtime2, next_scheduled_runtime); |
| 133 Mock::VerifyAndClearExpectations(time_domain_.get()); | 135 Mock::VerifyAndClearExpectations(time_domain_.get()); |
| 134 | 136 |
| 135 EXPECT_CALL(*time_domain_.get(), CancelWakeupAt(_)).Times(AnyNumber()); | 137 EXPECT_CALL(*time_domain_.get(), CancelWakeupAt(_)).Times(AnyNumber()); |
| 136 } | 138 } |
| 137 | 139 |
| 138 TEST_F(TimeDomainTest, RequestWakeupAt_OnlyCalledForEarlierTasks) { | 140 TEST_F(TimeDomainTest, RequestWakeupAt_OnlyCalledForEarlierTasks) { |
| 139 scoped_refptr<internal::TaskQueueImpl> task_queue2 = make_scoped_refptr( | 141 scoped_refptr<internal::TaskQueueImpl> task_queue2 = make_scoped_refptr( |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 152 "test.category", "test.category")); | 154 "test.category", "test.category")); |
| 153 | 155 |
| 154 base::TimeDelta delay1 = base::TimeDelta::FromMilliseconds(10); | 156 base::TimeDelta delay1 = base::TimeDelta::FromMilliseconds(10); |
| 155 base::TimeDelta delay2 = base::TimeDelta::FromMilliseconds(20); | 157 base::TimeDelta delay2 = base::TimeDelta::FromMilliseconds(20); |
| 156 base::TimeDelta delay3 = base::TimeDelta::FromMilliseconds(30); | 158 base::TimeDelta delay3 = base::TimeDelta::FromMilliseconds(30); |
| 157 base::TimeDelta delay4 = base::TimeDelta::FromMilliseconds(1); | 159 base::TimeDelta delay4 = base::TimeDelta::FromMilliseconds(1); |
| 158 | 160 |
| 159 // RequestWakeupAt should always be called if there are no other wakeups. | 161 // RequestWakeupAt should always be called if there are no other wakeups. |
| 160 base::TimeTicks now = time_domain_->Now(); | 162 base::TimeTicks now = time_domain_->Now(); |
| 161 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, now + delay1)); | 163 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, now + delay1)); |
| 162 time_domain_->ScheduleDelayedWork(task_queue_.get(), now + delay1, now); | 164 time_domain_->ScheduleDelayedWork(task_queue_.get(), now + delay1, 0, now); |
| 163 | 165 |
| 164 Mock::VerifyAndClearExpectations(time_domain_.get()); | 166 Mock::VerifyAndClearExpectations(time_domain_.get()); |
| 165 | 167 |
| 166 // RequestWakeupAt should not be called when scheduling later tasks. | 168 // RequestWakeupAt should not be called when scheduling later tasks. |
| 167 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, _)).Times(0); | 169 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, _)).Times(0); |
| 168 time_domain_->ScheduleDelayedWork(task_queue2.get(), now + delay2, now); | 170 time_domain_->ScheduleDelayedWork(task_queue2.get(), now + delay2, 0, now); |
| 169 time_domain_->ScheduleDelayedWork(task_queue3.get(), now + delay3, now); | 171 time_domain_->ScheduleDelayedWork(task_queue3.get(), now + delay3, 0, now); |
| 170 | 172 |
| 171 // RequestWakeupAt should be called when scheduling earlier tasks. | 173 // RequestWakeupAt should be called when scheduling earlier tasks. |
| 172 Mock::VerifyAndClearExpectations(time_domain_.get()); | 174 Mock::VerifyAndClearExpectations(time_domain_.get()); |
| 173 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, now + delay4)); | 175 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, now + delay4)); |
| 174 time_domain_->ScheduleDelayedWork(task_queue4.get(), now + delay4, now); | 176 time_domain_->ScheduleDelayedWork(task_queue4.get(), now + delay4, 0, now); |
| 175 | 177 |
| 176 Mock::VerifyAndClearExpectations(time_domain_.get()); | 178 Mock::VerifyAndClearExpectations(time_domain_.get()); |
| 177 | 179 |
| 178 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, _)); | 180 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, _)); |
| 179 EXPECT_CALL(*time_domain_.get(), CancelWakeupAt(_)).Times(2); | 181 EXPECT_CALL(*time_domain_.get(), CancelWakeupAt(_)).Times(2); |
| 180 task_queue2->UnregisterTaskQueue(); | 182 task_queue2->UnregisterTaskQueue(); |
| 181 task_queue3->UnregisterTaskQueue(); | 183 task_queue3->UnregisterTaskQueue(); |
| 182 task_queue4->UnregisterTaskQueue(); | 184 task_queue4->UnregisterTaskQueue(); |
| 183 } | 185 } |
| 184 | 186 |
| 185 TEST_F(TimeDomainTest, UnregisterQueue) { | 187 TEST_F(TimeDomainTest, UnregisterQueue) { |
| 186 scoped_refptr<internal::TaskQueueImpl> task_queue2_ = make_scoped_refptr( | 188 scoped_refptr<internal::TaskQueueImpl> task_queue2_ = make_scoped_refptr( |
| 187 new internal::TaskQueueImpl(nullptr, time_domain_.get(), | 189 new internal::TaskQueueImpl(nullptr, time_domain_.get(), |
| 188 TaskQueue::Spec(TaskQueue::QueueType::TEST), | 190 TaskQueue::Spec(TaskQueue::QueueType::TEST), |
| 189 "test.category", "test.category")); | 191 "test.category", "test.category")); |
| 190 | 192 |
| 191 base::TimeTicks now = time_domain_->Now(); | 193 base::TimeTicks now = time_domain_->Now(); |
| 192 base::TimeTicks wakeup1 = now + base::TimeDelta::FromMilliseconds(10); | 194 base::TimeTicks wakeup1 = now + base::TimeDelta::FromMilliseconds(10); |
| 193 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, wakeup1)).Times(1); | 195 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, wakeup1)).Times(1); |
| 194 time_domain_->ScheduleDelayedWork(task_queue_.get(), wakeup1, now); | 196 time_domain_->ScheduleDelayedWork(task_queue_.get(), wakeup1, 0, now); |
| 195 base::TimeTicks wakeup2 = now + base::TimeDelta::FromMilliseconds(100); | 197 base::TimeTicks wakeup2 = now + base::TimeDelta::FromMilliseconds(100); |
| 196 time_domain_->ScheduleDelayedWork(task_queue2_.get(), wakeup2, now); | 198 time_domain_->ScheduleDelayedWork(task_queue2_.get(), wakeup2, 0, now); |
| 197 | 199 |
| 198 TaskQueue* next_task_queue; | 200 TaskQueue* next_task_queue; |
| 199 EXPECT_TRUE(time_domain_->NextScheduledTaskQueue(&next_task_queue)); | 201 EXPECT_TRUE(time_domain_->NextScheduledTaskQueue(&next_task_queue)); |
| 200 EXPECT_EQ(task_queue_.get(), next_task_queue); | 202 EXPECT_EQ(task_queue_.get(), next_task_queue); |
| 201 | 203 |
| 202 testing::Mock::VerifyAndClearExpectations(time_domain_.get()); | 204 testing::Mock::VerifyAndClearExpectations(time_domain_.get()); |
| 203 | 205 |
| 204 EXPECT_CALL(*time_domain_.get(), CancelWakeupAt(wakeup1)).Times(1); | 206 EXPECT_CALL(*time_domain_.get(), CancelWakeupAt(wakeup1)).Times(1); |
| 205 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, wakeup2)).Times(1); | 207 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, wakeup2)).Times(1); |
| 206 | 208 |
| 207 time_domain_->UnregisterQueue(task_queue_.get()); | 209 time_domain_->UnregisterQueue(task_queue_.get()); |
| 208 task_queue_ = scoped_refptr<internal::TaskQueueImpl>(); | 210 task_queue_ = scoped_refptr<internal::TaskQueueImpl>(); |
| 209 EXPECT_TRUE(time_domain_->NextScheduledTaskQueue(&next_task_queue)); | 211 EXPECT_TRUE(time_domain_->NextScheduledTaskQueue(&next_task_queue)); |
| 210 EXPECT_EQ(task_queue2_.get(), next_task_queue); | 212 EXPECT_EQ(task_queue2_.get(), next_task_queue); |
| 211 | 213 |
| 212 testing::Mock::VerifyAndClearExpectations(time_domain_.get()); | 214 testing::Mock::VerifyAndClearExpectations(time_domain_.get()); |
| 213 | 215 |
| 214 EXPECT_CALL(*time_domain_.get(), CancelWakeupAt(wakeup2)).Times(1); | 216 EXPECT_CALL(*time_domain_.get(), CancelWakeupAt(wakeup2)).Times(1); |
| 215 | 217 |
| 216 time_domain_->UnregisterQueue(task_queue2_.get()); | 218 time_domain_->UnregisterQueue(task_queue2_.get()); |
| 217 EXPECT_FALSE(time_domain_->NextScheduledTaskQueue(&next_task_queue)); | 219 EXPECT_FALSE(time_domain_->NextScheduledTaskQueue(&next_task_queue)); |
| 218 } | 220 } |
| 219 | 221 |
| 220 TEST_F(TimeDomainTest, WakeupReadyDelayedQueues) { | 222 TEST_F(TimeDomainTest, WakeupReadyDelayedQueues) { |
| 221 base::TimeDelta delay = base::TimeDelta::FromMilliseconds(50); | 223 base::TimeDelta delay = base::TimeDelta::FromMilliseconds(50); |
| 222 base::TimeTicks now = time_domain_->Now(); | 224 base::TimeTicks now = time_domain_->Now(); |
| 223 base::TimeTicks delayed_runtime = now + delay; | 225 base::TimeTicks delayed_runtime = now + delay; |
| 224 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, delayed_runtime)); | 226 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, delayed_runtime)); |
| 225 time_domain_->ScheduleDelayedWork(task_queue_.get(), delayed_runtime, now); | 227 time_domain_->ScheduleDelayedWork(task_queue_.get(), delayed_runtime, 0, now); |
| 226 | 228 |
| 227 base::TimeTicks next_run_time; | 229 base::TimeTicks next_run_time; |
| 228 ASSERT_TRUE(time_domain_->NextScheduledRunTime(&next_run_time)); | 230 ASSERT_TRUE(time_domain_->NextScheduledRunTime(&next_run_time)); |
| 229 EXPECT_EQ(delayed_runtime, next_run_time); | 231 EXPECT_EQ(delayed_runtime, next_run_time); |
| 230 | 232 |
| 231 LazyNow lazy_now = time_domain_->CreateLazyNow(); | 233 LazyNow lazy_now = time_domain_->CreateLazyNow(); |
| 232 time_domain_->WakeupReadyDelayedQueues(&lazy_now); | 234 time_domain_->WakeupReadyDelayedQueues(&lazy_now); |
| 233 ASSERT_TRUE(time_domain_->NextScheduledRunTime(&next_run_time)); | 235 ASSERT_TRUE(time_domain_->NextScheduledRunTime(&next_run_time)); |
| 234 EXPECT_EQ(delayed_runtime, next_run_time); | 236 EXPECT_EQ(delayed_runtime, next_run_time); |
| 235 | 237 |
| 236 time_domain_->SetNow(delayed_runtime); | 238 time_domain_->SetNow(delayed_runtime); |
| 237 lazy_now = time_domain_->CreateLazyNow(); | 239 lazy_now = time_domain_->CreateLazyNow(); |
| 238 time_domain_->WakeupReadyDelayedQueues(&lazy_now); | 240 time_domain_->WakeupReadyDelayedQueues(&lazy_now); |
| 239 ASSERT_FALSE(time_domain_->NextScheduledRunTime(&next_run_time)); | 241 ASSERT_FALSE(time_domain_->NextScheduledRunTime(&next_run_time)); |
| 240 } | 242 } |
| 241 | 243 |
| 244 TEST_F(TimeDomainTest, WakeupReadyDelayedQueuesWithIdenticalRuntimes) { | |
|
altimin
2017/03/01 11:23:17
Nit: I'm slightly worried that we do something wro
Sami
2017/03/01 12:17:42
Hmm, this should now be completely deterministic (
alex clarke (OOO till 29th)
2017/03/01 13:38:51
I believe this is deterministic.
| |
| 245 int sequence_num = 0; | |
| 246 base::TimeDelta delay = base::TimeDelta::FromMilliseconds(50); | |
| 247 base::TimeTicks now = time_domain_->Now(); | |
| 248 base::TimeTicks delayed_runtime = now + delay; | |
| 249 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, delayed_runtime)); | |
| 250 EXPECT_CALL(*time_domain_.get(), CancelWakeupAt(delayed_runtime)); | |
| 251 | |
| 252 scoped_refptr<internal::TaskQueueImpl> task_queue2 = make_scoped_refptr( | |
| 253 new internal::TaskQueueImpl(nullptr, time_domain_.get(), | |
| 254 TaskQueue::Spec(TaskQueue::QueueType::TEST), | |
| 255 "test.category", "test.category")); | |
| 256 | |
| 257 time_domain_->ScheduleDelayedWork(task_queue2.get(), delayed_runtime, | |
| 258 ++sequence_num, now); | |
| 259 time_domain_->ScheduleDelayedWork(task_queue_.get(), delayed_runtime, | |
| 260 ++sequence_num, now); | |
| 261 | |
| 262 LazyNow lazy_now = time_domain_->CreateLazyNow(); | |
| 263 time_domain_->WakeupReadyDelayedQueues(&lazy_now); | |
| 264 | |
| 265 // The second task queue should wake up first since it has a lower sequence | |
| 266 // number. | |
| 267 TaskQueue* next_task_queue; | |
| 268 EXPECT_TRUE(time_domain_->NextScheduledTaskQueue(&next_task_queue)); | |
| 269 EXPECT_EQ(task_queue2.get(), next_task_queue); | |
| 270 | |
| 271 task_queue2->UnregisterTaskQueue(); | |
| 272 } | |
| 273 | |
| 242 TEST_F(TimeDomainTest, CancelDelayedWork) { | 274 TEST_F(TimeDomainTest, CancelDelayedWork) { |
| 243 base::TimeTicks now = time_domain_->Now(); | 275 base::TimeTicks now = time_domain_->Now(); |
| 244 base::TimeTicks run_time = now + base::TimeDelta::FromMilliseconds(20); | 276 base::TimeTicks run_time = now + base::TimeDelta::FromMilliseconds(20); |
| 245 | 277 |
| 246 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, run_time)); | 278 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, run_time)); |
| 247 time_domain_->ScheduleDelayedWork(task_queue_.get(), run_time, now); | 279 time_domain_->ScheduleDelayedWork(task_queue_.get(), run_time, 0, now); |
| 248 | 280 |
| 249 TaskQueue* next_task_queue; | 281 TaskQueue* next_task_queue; |
| 250 EXPECT_TRUE(time_domain_->NextScheduledTaskQueue(&next_task_queue)); | 282 EXPECT_TRUE(time_domain_->NextScheduledTaskQueue(&next_task_queue)); |
| 251 EXPECT_EQ(task_queue_.get(), next_task_queue); | 283 EXPECT_EQ(task_queue_.get(), next_task_queue); |
| 252 | 284 |
| 253 EXPECT_CALL(*time_domain_.get(), CancelWakeupAt(run_time)); | 285 EXPECT_CALL(*time_domain_.get(), CancelWakeupAt(run_time)); |
| 254 time_domain_->CancelDelayedWork(task_queue_.get()); | 286 time_domain_->CancelDelayedWork(task_queue_.get()); |
| 255 EXPECT_FALSE(time_domain_->NextScheduledTaskQueue(&next_task_queue)); | 287 EXPECT_FALSE(time_domain_->NextScheduledTaskQueue(&next_task_queue)); |
| 256 } | 288 } |
| 257 | 289 |
| 258 TEST_F(TimeDomainTest, CancelDelayedWork_TwoQueues) { | 290 TEST_F(TimeDomainTest, CancelDelayedWork_TwoQueues) { |
| 259 scoped_refptr<internal::TaskQueueImpl> task_queue2 = make_scoped_refptr( | 291 scoped_refptr<internal::TaskQueueImpl> task_queue2 = make_scoped_refptr( |
| 260 new internal::TaskQueueImpl(nullptr, time_domain_.get(), | 292 new internal::TaskQueueImpl(nullptr, time_domain_.get(), |
| 261 TaskQueue::Spec(TaskQueue::QueueType::TEST), | 293 TaskQueue::Spec(TaskQueue::QueueType::TEST), |
| 262 "test.category", "test.category")); | 294 "test.category", "test.category")); |
| 263 | 295 |
| 264 base::TimeTicks now = time_domain_->Now(); | 296 base::TimeTicks now = time_domain_->Now(); |
| 265 base::TimeTicks run_time1 = now + base::TimeDelta::FromMilliseconds(20); | 297 base::TimeTicks run_time1 = now + base::TimeDelta::FromMilliseconds(20); |
| 266 base::TimeTicks run_time2 = now + base::TimeDelta::FromMilliseconds(40); | 298 base::TimeTicks run_time2 = now + base::TimeDelta::FromMilliseconds(40); |
| 267 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, run_time1)); | 299 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, run_time1)); |
| 268 time_domain_->ScheduleDelayedWork(task_queue_.get(), run_time1, now); | 300 time_domain_->ScheduleDelayedWork(task_queue_.get(), run_time1, 0, now); |
| 269 Mock::VerifyAndClearExpectations(time_domain_.get()); | 301 Mock::VerifyAndClearExpectations(time_domain_.get()); |
| 270 | 302 |
| 271 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, _)).Times(0); | 303 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, _)).Times(0); |
| 272 time_domain_->ScheduleDelayedWork(task_queue2.get(), run_time2, now); | 304 time_domain_->ScheduleDelayedWork(task_queue2.get(), run_time2, 0, now); |
| 273 Mock::VerifyAndClearExpectations(time_domain_.get()); | 305 Mock::VerifyAndClearExpectations(time_domain_.get()); |
| 274 | 306 |
| 275 TaskQueue* next_task_queue; | 307 TaskQueue* next_task_queue; |
| 276 EXPECT_TRUE(time_domain_->NextScheduledTaskQueue(&next_task_queue)); | 308 EXPECT_TRUE(time_domain_->NextScheduledTaskQueue(&next_task_queue)); |
| 277 EXPECT_EQ(task_queue_.get(), next_task_queue); | 309 EXPECT_EQ(task_queue_.get(), next_task_queue); |
| 278 | 310 |
| 279 base::TimeTicks next_run_time; | 311 base::TimeTicks next_run_time; |
| 280 ASSERT_TRUE(time_domain_->NextScheduledRunTime(&next_run_time)); | 312 ASSERT_TRUE(time_domain_->NextScheduledRunTime(&next_run_time)); |
| 281 EXPECT_EQ(run_time1, next_run_time); | 313 EXPECT_EQ(run_time1, next_run_time); |
| 282 | 314 |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 320 TEST_F(TimeDomainWithObserverTest, OnTimeDomainHasImmediateWork) { | 352 TEST_F(TimeDomainWithObserverTest, OnTimeDomainHasImmediateWork) { |
| 321 EXPECT_CALL(*observer_, OnTimeDomainHasImmediateWork(task_queue_.get())); | 353 EXPECT_CALL(*observer_, OnTimeDomainHasImmediateWork(task_queue_.get())); |
| 322 time_domain_->OnQueueHasImmediateWork(task_queue_.get()); | 354 time_domain_->OnQueueHasImmediateWork(task_queue_.get()); |
| 323 } | 355 } |
| 324 | 356 |
| 325 TEST_F(TimeDomainWithObserverTest, OnTimeDomainHasDelayedWork) { | 357 TEST_F(TimeDomainWithObserverTest, OnTimeDomainHasDelayedWork) { |
| 326 EXPECT_CALL(*observer_, OnTimeDomainHasDelayedWork(task_queue_.get())); | 358 EXPECT_CALL(*observer_, OnTimeDomainHasDelayedWork(task_queue_.get())); |
| 327 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, _)); | 359 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, _)); |
| 328 base::TimeTicks now = time_domain_->Now(); | 360 base::TimeTicks now = time_domain_->Now(); |
| 329 time_domain_->ScheduleDelayedWork( | 361 time_domain_->ScheduleDelayedWork( |
| 330 task_queue_.get(), now + base::TimeDelta::FromMilliseconds(10), now); | 362 task_queue_.get(), now + base::TimeDelta::FromMilliseconds(10), 0, now); |
| 331 } | 363 } |
| 332 | 364 |
| 333 } // namespace scheduler | 365 } // namespace scheduler |
| 334 } // namespace blink | 366 } // namespace blink |
| OLD | NEW |