| 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}, |
| 228 now); |
| 226 | 229 |
| 227 base::TimeTicks next_run_time; | 230 base::TimeTicks next_run_time; |
| 228 ASSERT_TRUE(time_domain_->NextScheduledRunTime(&next_run_time)); | 231 ASSERT_TRUE(time_domain_->NextScheduledRunTime(&next_run_time)); |
| 229 EXPECT_EQ(delayed_runtime, next_run_time); | 232 EXPECT_EQ(delayed_runtime, next_run_time); |
| 230 | 233 |
| 231 LazyNow lazy_now = time_domain_->CreateLazyNow(); | 234 LazyNow lazy_now = time_domain_->CreateLazyNow(); |
| 232 time_domain_->WakeupReadyDelayedQueues(&lazy_now); | 235 time_domain_->WakeupReadyDelayedQueues(&lazy_now); |
| 233 ASSERT_TRUE(time_domain_->NextScheduledRunTime(&next_run_time)); | 236 ASSERT_TRUE(time_domain_->NextScheduledRunTime(&next_run_time)); |
| 234 EXPECT_EQ(delayed_runtime, next_run_time); | 237 EXPECT_EQ(delayed_runtime, next_run_time); |
| 235 | 238 |
| 236 time_domain_->SetNow(delayed_runtime); | 239 time_domain_->SetNow(delayed_runtime); |
| 237 lazy_now = time_domain_->CreateLazyNow(); | 240 lazy_now = time_domain_->CreateLazyNow(); |
| 238 time_domain_->WakeupReadyDelayedQueues(&lazy_now); | 241 time_domain_->WakeupReadyDelayedQueues(&lazy_now); |
| 239 ASSERT_FALSE(time_domain_->NextScheduledRunTime(&next_run_time)); | 242 ASSERT_FALSE(time_domain_->NextScheduledRunTime(&next_run_time)); |
| 240 } | 243 } |
| 241 | 244 |
| 245 TEST_F(TimeDomainTest, WakeupReadyDelayedQueuesWithIdenticalRuntimes) { |
| 246 int sequence_num = 0; |
| 247 base::TimeDelta delay = base::TimeDelta::FromMilliseconds(50); |
| 248 base::TimeTicks now = time_domain_->Now(); |
| 249 base::TimeTicks delayed_runtime = now + delay; |
| 250 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, delayed_runtime)); |
| 251 EXPECT_CALL(*time_domain_.get(), CancelWakeupAt(delayed_runtime)); |
| 252 |
| 253 scoped_refptr<internal::TaskQueueImpl> task_queue2 = make_scoped_refptr( |
| 254 new internal::TaskQueueImpl(nullptr, time_domain_.get(), |
| 255 TaskQueue::Spec(TaskQueue::QueueType::TEST), |
| 256 "test.category", "test.category")); |
| 257 |
| 258 time_domain_->ScheduleDelayedWork(task_queue2.get(), |
| 259 {delayed_runtime, ++sequence_num}, now); |
| 260 time_domain_->ScheduleDelayedWork(task_queue_.get(), |
| 261 {delayed_runtime, ++sequence_num}, now); |
| 262 |
| 263 LazyNow lazy_now = time_domain_->CreateLazyNow(); |
| 264 time_domain_->WakeupReadyDelayedQueues(&lazy_now); |
| 265 |
| 266 // The second task queue should wake up first since it has a lower sequence |
| 267 // number. |
| 268 TaskQueue* next_task_queue; |
| 269 EXPECT_TRUE(time_domain_->NextScheduledTaskQueue(&next_task_queue)); |
| 270 EXPECT_EQ(task_queue2.get(), next_task_queue); |
| 271 |
| 272 task_queue2->UnregisterTaskQueue(); |
| 273 } |
| 274 |
| 242 TEST_F(TimeDomainTest, CancelDelayedWork) { | 275 TEST_F(TimeDomainTest, CancelDelayedWork) { |
| 243 base::TimeTicks now = time_domain_->Now(); | 276 base::TimeTicks now = time_domain_->Now(); |
| 244 base::TimeTicks run_time = now + base::TimeDelta::FromMilliseconds(20); | 277 base::TimeTicks run_time = now + base::TimeDelta::FromMilliseconds(20); |
| 245 | 278 |
| 246 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, run_time)); | 279 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, run_time)); |
| 247 time_domain_->ScheduleDelayedWork(task_queue_.get(), run_time, now); | 280 time_domain_->ScheduleDelayedWork(task_queue_.get(), {run_time, 0}, now); |
| 248 | 281 |
| 249 TaskQueue* next_task_queue; | 282 TaskQueue* next_task_queue; |
| 250 EXPECT_TRUE(time_domain_->NextScheduledTaskQueue(&next_task_queue)); | 283 EXPECT_TRUE(time_domain_->NextScheduledTaskQueue(&next_task_queue)); |
| 251 EXPECT_EQ(task_queue_.get(), next_task_queue); | 284 EXPECT_EQ(task_queue_.get(), next_task_queue); |
| 252 | 285 |
| 253 EXPECT_CALL(*time_domain_.get(), CancelWakeupAt(run_time)); | 286 EXPECT_CALL(*time_domain_.get(), CancelWakeupAt(run_time)); |
| 254 time_domain_->CancelDelayedWork(task_queue_.get()); | 287 time_domain_->CancelDelayedWork(task_queue_.get()); |
| 255 EXPECT_FALSE(time_domain_->NextScheduledTaskQueue(&next_task_queue)); | 288 EXPECT_FALSE(time_domain_->NextScheduledTaskQueue(&next_task_queue)); |
| 256 } | 289 } |
| 257 | 290 |
| 258 TEST_F(TimeDomainTest, CancelDelayedWork_TwoQueues) { | 291 TEST_F(TimeDomainTest, CancelDelayedWork_TwoQueues) { |
| 259 scoped_refptr<internal::TaskQueueImpl> task_queue2 = make_scoped_refptr( | 292 scoped_refptr<internal::TaskQueueImpl> task_queue2 = make_scoped_refptr( |
| 260 new internal::TaskQueueImpl(nullptr, time_domain_.get(), | 293 new internal::TaskQueueImpl(nullptr, time_domain_.get(), |
| 261 TaskQueue::Spec(TaskQueue::QueueType::TEST), | 294 TaskQueue::Spec(TaskQueue::QueueType::TEST), |
| 262 "test.category", "test.category")); | 295 "test.category", "test.category")); |
| 263 | 296 |
| 264 base::TimeTicks now = time_domain_->Now(); | 297 base::TimeTicks now = time_domain_->Now(); |
| 265 base::TimeTicks run_time1 = now + base::TimeDelta::FromMilliseconds(20); | 298 base::TimeTicks run_time1 = now + base::TimeDelta::FromMilliseconds(20); |
| 266 base::TimeTicks run_time2 = now + base::TimeDelta::FromMilliseconds(40); | 299 base::TimeTicks run_time2 = now + base::TimeDelta::FromMilliseconds(40); |
| 267 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, run_time1)); | 300 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, run_time1)); |
| 268 time_domain_->ScheduleDelayedWork(task_queue_.get(), run_time1, now); | 301 time_domain_->ScheduleDelayedWork(task_queue_.get(), {run_time1, 0}, now); |
| 269 Mock::VerifyAndClearExpectations(time_domain_.get()); | 302 Mock::VerifyAndClearExpectations(time_domain_.get()); |
| 270 | 303 |
| 271 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, _)).Times(0); | 304 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, _)).Times(0); |
| 272 time_domain_->ScheduleDelayedWork(task_queue2.get(), run_time2, now); | 305 time_domain_->ScheduleDelayedWork(task_queue2.get(), {run_time2, 0}, now); |
| 273 Mock::VerifyAndClearExpectations(time_domain_.get()); | 306 Mock::VerifyAndClearExpectations(time_domain_.get()); |
| 274 | 307 |
| 275 TaskQueue* next_task_queue; | 308 TaskQueue* next_task_queue; |
| 276 EXPECT_TRUE(time_domain_->NextScheduledTaskQueue(&next_task_queue)); | 309 EXPECT_TRUE(time_domain_->NextScheduledTaskQueue(&next_task_queue)); |
| 277 EXPECT_EQ(task_queue_.get(), next_task_queue); | 310 EXPECT_EQ(task_queue_.get(), next_task_queue); |
| 278 | 311 |
| 279 base::TimeTicks next_run_time; | 312 base::TimeTicks next_run_time; |
| 280 ASSERT_TRUE(time_domain_->NextScheduledRunTime(&next_run_time)); | 313 ASSERT_TRUE(time_domain_->NextScheduledRunTime(&next_run_time)); |
| 281 EXPECT_EQ(run_time1, next_run_time); | 314 EXPECT_EQ(run_time1, next_run_time); |
| 282 | 315 |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 320 TEST_F(TimeDomainWithObserverTest, OnTimeDomainHasImmediateWork) { | 353 TEST_F(TimeDomainWithObserverTest, OnTimeDomainHasImmediateWork) { |
| 321 EXPECT_CALL(*observer_, OnTimeDomainHasImmediateWork(task_queue_.get())); | 354 EXPECT_CALL(*observer_, OnTimeDomainHasImmediateWork(task_queue_.get())); |
| 322 time_domain_->OnQueueHasImmediateWork(task_queue_.get()); | 355 time_domain_->OnQueueHasImmediateWork(task_queue_.get()); |
| 323 } | 356 } |
| 324 | 357 |
| 325 TEST_F(TimeDomainWithObserverTest, OnTimeDomainHasDelayedWork) { | 358 TEST_F(TimeDomainWithObserverTest, OnTimeDomainHasDelayedWork) { |
| 326 EXPECT_CALL(*observer_, OnTimeDomainHasDelayedWork(task_queue_.get())); | 359 EXPECT_CALL(*observer_, OnTimeDomainHasDelayedWork(task_queue_.get())); |
| 327 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, _)); | 360 EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, _)); |
| 328 base::TimeTicks now = time_domain_->Now(); | 361 base::TimeTicks now = time_domain_->Now(); |
| 329 time_domain_->ScheduleDelayedWork( | 362 time_domain_->ScheduleDelayedWork( |
| 330 task_queue_.get(), now + base::TimeDelta::FromMilliseconds(10), now); | 363 task_queue_.get(), {now + base::TimeDelta::FromMilliseconds(10), 0}, now); |
| 331 } | 364 } |
| 332 | 365 |
| 333 } // namespace scheduler | 366 } // namespace scheduler |
| 334 } // namespace blink | 367 } // namespace blink |
| OLD | NEW |