| 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 12 matching lines...) Expand all Loading... |
| 23 namespace scheduler { | 23 namespace scheduler { |
| 24 | 24 |
| 25 class MockTimeDomain : public TimeDomain { | 25 class MockTimeDomain : public TimeDomain { |
| 26 public: | 26 public: |
| 27 explicit MockTimeDomain(TimeDomain::Observer* observer) | 27 explicit MockTimeDomain(TimeDomain::Observer* observer) |
| 28 : TimeDomain(observer), | 28 : TimeDomain(observer), |
| 29 now_(base::TimeTicks() + base::TimeDelta::FromSeconds(1)) {} | 29 now_(base::TimeTicks() + base::TimeDelta::FromSeconds(1)) {} |
| 30 | 30 |
| 31 ~MockTimeDomain() override {} | 31 ~MockTimeDomain() override {} |
| 32 | 32 |
| 33 using TimeDomain::CancelDelayedWork; |
| 33 using TimeDomain::ClearExpiredWakeups; | 34 using TimeDomain::ClearExpiredWakeups; |
| 34 using TimeDomain::NextScheduledRunTime; | 35 using TimeDomain::NextScheduledRunTime; |
| 35 using TimeDomain::NextScheduledTaskQueue; | 36 using TimeDomain::NextScheduledTaskQueue; |
| 36 using TimeDomain::ScheduleDelayedWork; | 37 using TimeDomain::ScheduleDelayedWork; |
| 37 using TimeDomain::UnregisterQueue; | 38 using TimeDomain::UnregisterQueue; |
| 38 using TimeDomain::UpdateWorkQueues; | 39 using TimeDomain::UpdateWorkQueues; |
| 39 using TimeDomain::RegisterAsUpdatableTaskQueue; | 40 using TimeDomain::RegisterAsUpdatableTaskQueue; |
| 40 | 41 |
| 41 // TimeSource implementation: | 42 // TimeSource implementation: |
| 42 LazyNow CreateLazyNow() const override { return LazyNow(now_); } | 43 LazyNow CreateLazyNow() const override { return LazyNow(now_); } |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 189 time_domain_->ClearExpiredWakeups(); | 190 time_domain_->ClearExpiredWakeups(); |
| 190 | 191 |
| 191 ASSERT_TRUE(time_domain_->NextScheduledRunTime(&next_run_time)); | 192 ASSERT_TRUE(time_domain_->NextScheduledRunTime(&next_run_time)); |
| 192 EXPECT_EQ(run_time2, next_run_time); | 193 EXPECT_EQ(run_time2, next_run_time); |
| 193 | 194 |
| 194 time_domain_->SetNow(run_time2); | 195 time_domain_->SetNow(run_time2); |
| 195 time_domain_->ClearExpiredWakeups(); | 196 time_domain_->ClearExpiredWakeups(); |
| 196 ASSERT_FALSE(time_domain_->NextScheduledRunTime(&next_run_time)); | 197 ASSERT_FALSE(time_domain_->NextScheduledRunTime(&next_run_time)); |
| 197 } | 198 } |
| 198 | 199 |
| 200 TEST_F(TimeDomainTest, CancelDelayedWork) { |
| 201 base::TimeDelta delay = base::TimeDelta::FromMilliseconds(50); |
| 202 EXPECT_CALL(*time_domain_.get(), RequestWakeup(_, delay)); |
| 203 base::TimeTicks now = time_domain_->Now(); |
| 204 base::TimeTicks delayed_runtime = now + delay; |
| 205 time_domain_->ScheduleDelayedWork(task_queue_.get(), delayed_runtime, now); |
| 206 |
| 207 base::TimeTicks next_run_time; |
| 208 ASSERT_TRUE(time_domain_->NextScheduledRunTime(&next_run_time)); |
| 209 EXPECT_EQ(delayed_runtime, next_run_time); |
| 210 |
| 211 time_domain_->CancelDelayedWork(task_queue_.get(), delayed_runtime); |
| 212 EXPECT_FALSE(time_domain_->NextScheduledRunTime(&next_run_time)); |
| 213 } |
| 214 |
| 215 TEST_F(TimeDomainTest, CancelDelayedWorkTaskQueueDoesntMatch) { |
| 216 base::TimeDelta delay = base::TimeDelta::FromMilliseconds(50); |
| 217 EXPECT_CALL(*time_domain_.get(), RequestWakeup(_, delay)); |
| 218 base::TimeTicks now = time_domain_->Now(); |
| 219 base::TimeTicks delayed_runtime = now + delay; |
| 220 time_domain_->ScheduleDelayedWork(task_queue_.get(), delayed_runtime, now); |
| 221 |
| 222 base::TimeTicks next_run_time; |
| 223 ASSERT_TRUE(time_domain_->NextScheduledRunTime(&next_run_time)); |
| 224 EXPECT_EQ(delayed_runtime, next_run_time); |
| 225 |
| 226 time_domain_->CancelDelayedWork(nullptr, delayed_runtime); |
| 227 ASSERT_TRUE(time_domain_->NextScheduledRunTime(&next_run_time)); |
| 228 EXPECT_EQ(delayed_runtime, next_run_time); |
| 229 } |
| 230 |
| 231 TEST_F(TimeDomainTest, CancelDelayedWorkTwoWakeUpsCancelFirst) { |
| 232 base::TimeDelta delay1 = base::TimeDelta::FromMilliseconds(50); |
| 233 base::TimeDelta delay2 = base::TimeDelta::FromMilliseconds(150); |
| 234 EXPECT_CALL(*time_domain_.get(), RequestWakeup(_, delay1)); |
| 235 base::TimeTicks now = time_domain_->Now(); |
| 236 base::TimeTicks delayed_runtime1 = now + delay1; |
| 237 base::TimeTicks delayed_runtime2 = now + delay2; |
| 238 time_domain_->ScheduleDelayedWork(task_queue_.get(), delayed_runtime1, now); |
| 239 time_domain_->ScheduleDelayedWork(task_queue_.get(), delayed_runtime2, now); |
| 240 |
| 241 base::TimeTicks next_run_time; |
| 242 ASSERT_TRUE(time_domain_->NextScheduledRunTime(&next_run_time)); |
| 243 EXPECT_EQ(delayed_runtime1, next_run_time); |
| 244 Mock::VerifyAndClearExpectations(time_domain_.get()); |
| 245 |
| 246 EXPECT_CALL(*time_domain_.get(), RequestWakeup(_, delay2)); |
| 247 time_domain_->CancelDelayedWork(task_queue_.get(), delayed_runtime1); |
| 248 ASSERT_TRUE(time_domain_->NextScheduledRunTime(&next_run_time)); |
| 249 EXPECT_EQ(delayed_runtime2, next_run_time); |
| 250 } |
| 251 |
| 252 TEST_F(TimeDomainTest, CancelDelayedWorkTwoWakeUpsCancelSecond) { |
| 253 base::TimeDelta delay1 = base::TimeDelta::FromMilliseconds(50); |
| 254 base::TimeDelta delay2 = base::TimeDelta::FromMilliseconds(150); |
| 255 EXPECT_CALL(*time_domain_.get(), RequestWakeup(_, delay1)); |
| 256 base::TimeTicks now = time_domain_->Now(); |
| 257 base::TimeTicks delayed_runtime1 = now + delay1; |
| 258 base::TimeTicks delayed_runtime2 = now + delay2; |
| 259 time_domain_->ScheduleDelayedWork(task_queue_.get(), delayed_runtime1, now); |
| 260 time_domain_->ScheduleDelayedWork(task_queue_.get(), delayed_runtime2, now); |
| 261 |
| 262 base::TimeTicks next_run_time; |
| 263 ASSERT_TRUE(time_domain_->NextScheduledRunTime(&next_run_time)); |
| 264 EXPECT_EQ(delayed_runtime1, next_run_time); |
| 265 Mock::VerifyAndClearExpectations(time_domain_.get()); |
| 266 |
| 267 time_domain_->CancelDelayedWork(task_queue_.get(), delayed_runtime2); |
| 268 ASSERT_TRUE(time_domain_->NextScheduledRunTime(&next_run_time)); |
| 269 EXPECT_EQ(delayed_runtime1, next_run_time); |
| 270 |
| 271 time_domain_->SetNow(delayed_runtime1); |
| 272 LazyNow lazy_now = time_domain_->CreateLazyNow(); |
| 273 time_domain_->UpdateWorkQueues(false, nullptr, lazy_now); |
| 274 ASSERT_FALSE(time_domain_->NextScheduledRunTime(&next_run_time)); |
| 275 } |
| 276 |
| 199 namespace { | 277 namespace { |
| 200 class MockObserver : public TimeDomain::Observer { | 278 class MockObserver : public TimeDomain::Observer { |
| 201 public: | 279 public: |
| 202 ~MockObserver() override {} | 280 ~MockObserver() override {} |
| 203 | 281 |
| 204 MOCK_METHOD0(OnTimeDomainHasImmediateWork, void()); | 282 MOCK_METHOD0(OnTimeDomainHasImmediateWork, void()); |
| 205 MOCK_METHOD0(OnTimeDomainHasDelayedWork, void()); | 283 MOCK_METHOD0(OnTimeDomainHasDelayedWork, void()); |
| 206 }; | 284 }; |
| 207 } // namespace | 285 } // namespace |
| 208 | 286 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 224 TEST_F(TimeDomainWithObserverTest, OnTimeDomainHasDelayedWork) { | 302 TEST_F(TimeDomainWithObserverTest, OnTimeDomainHasDelayedWork) { |
| 225 EXPECT_CALL(*observer_, OnTimeDomainHasDelayedWork()); | 303 EXPECT_CALL(*observer_, OnTimeDomainHasDelayedWork()); |
| 226 EXPECT_CALL(*time_domain_.get(), RequestWakeup(_, _)); | 304 EXPECT_CALL(*time_domain_.get(), RequestWakeup(_, _)); |
| 227 base::TimeTicks now = time_domain_->Now(); | 305 base::TimeTicks now = time_domain_->Now(); |
| 228 time_domain_->ScheduleDelayedWork( | 306 time_domain_->ScheduleDelayedWork( |
| 229 task_queue_.get(), now + base::TimeDelta::FromMilliseconds(10), now); | 307 task_queue_.get(), now + base::TimeDelta::FromMilliseconds(10), now); |
| 230 } | 308 } |
| 231 | 309 |
| 232 } // namespace scheduler | 310 } // namespace scheduler |
| 233 } // namespace blink | 311 } // namespace blink |
| OLD | NEW |