| 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 16 matching lines...) Expand all Loading... |
| 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::NextScheduledRunTime; | 33 using TimeDomain::NextScheduledRunTime; |
| 34 using TimeDomain::NextScheduledTaskQueue; | 34 using TimeDomain::NextScheduledTaskQueue; |
| 35 using TimeDomain::ScheduleDelayedWork; | 35 using TimeDomain::ScheduleDelayedWork; |
| 36 using TimeDomain::UnregisterQueue; | 36 using TimeDomain::UnregisterQueue; |
| 37 using TimeDomain::OnQueueHasImmediateWork; | 37 using TimeDomain::UpdateWorkQueues; |
| 38 using TimeDomain::WakeupReadyDelayedQueues; | 38 using TimeDomain::RegisterAsUpdatableTaskQueue; |
| 39 | 39 |
| 40 // TimeSource implementation: | 40 // TimeSource implementation: |
| 41 LazyNow CreateLazyNow() const override { return LazyNow(now_); } | 41 LazyNow CreateLazyNow() const override { return LazyNow(now_); } |
| 42 base::TimeTicks Now() const override { return now_; } | 42 base::TimeTicks Now() const override { return now_; } |
| 43 | 43 |
| 44 void AsValueIntoInternal( | 44 void AsValueIntoInternal( |
| 45 base::trace_event::TracedValue* state) const override {} | 45 base::trace_event::TracedValue* state) const override {} |
| 46 | 46 |
| 47 base::Optional<base::TimeDelta> DelayTillNextTask( | 47 bool MaybeAdvanceTime() override { return false; } |
| 48 LazyNow* lazy_now) override { | |
| 49 return base::Optional<base::TimeDelta>(); | |
| 50 } | |
| 51 const char* GetName() const override { return "Test"; } | 48 const char* GetName() const override { return "Test"; } |
| 52 void OnRegisterWithTaskQueueManager( | 49 void OnRegisterWithTaskQueueManager( |
| 53 TaskQueueManager* task_queue_manager) override {} | 50 TaskQueueManager* task_queue_manager) override {} |
| 54 | 51 |
| 55 MOCK_METHOD2(RequestWakeup, void(base::TimeTicks now, base::TimeDelta delay)); | 52 MOCK_METHOD2(RequestWakeup, void(base::TimeTicks now, base::TimeDelta delay)); |
| 56 | 53 |
| 57 void SetNow(base::TimeTicks now) { now_ = now; } | 54 void SetNow(base::TimeTicks now) { now_ = now; } |
| 58 | 55 |
| 59 private: | 56 private: |
| 60 base::TimeTicks now_; | 57 base::TimeTicks now_; |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 187 | 184 |
| 188 time_domain_->UnregisterQueue(task_queue_.get()); | 185 time_domain_->UnregisterQueue(task_queue_.get()); |
| 189 task_queue_ = scoped_refptr<internal::TaskQueueImpl>(); | 186 task_queue_ = scoped_refptr<internal::TaskQueueImpl>(); |
| 190 EXPECT_TRUE(time_domain_->NextScheduledTaskQueue(&next_task_queue)); | 187 EXPECT_TRUE(time_domain_->NextScheduledTaskQueue(&next_task_queue)); |
| 191 EXPECT_EQ(task_queue2_.get(), next_task_queue); | 188 EXPECT_EQ(task_queue2_.get(), next_task_queue); |
| 192 | 189 |
| 193 time_domain_->UnregisterQueue(task_queue2_.get()); | 190 time_domain_->UnregisterQueue(task_queue2_.get()); |
| 194 EXPECT_FALSE(time_domain_->NextScheduledTaskQueue(&next_task_queue)); | 191 EXPECT_FALSE(time_domain_->NextScheduledTaskQueue(&next_task_queue)); |
| 195 } | 192 } |
| 196 | 193 |
| 197 TEST_F(TimeDomainTest, WakeupReadyDelayedQueues) { | 194 TEST_F(TimeDomainTest, UpdateWorkQueues) { |
| 198 base::TimeDelta delay = base::TimeDelta::FromMilliseconds(50); | 195 base::TimeDelta delay = base::TimeDelta::FromMilliseconds(50); |
| 199 EXPECT_CALL(*time_domain_.get(), RequestWakeup(_, delay)); | 196 EXPECT_CALL(*time_domain_.get(), RequestWakeup(_, delay)); |
| 200 base::TimeTicks now = time_domain_->Now(); | 197 base::TimeTicks now = time_domain_->Now(); |
| 201 base::TimeTicks delayed_runtime = now + delay; | 198 base::TimeTicks delayed_runtime = now + delay; |
| 202 time_domain_->ScheduleDelayedWork(task_queue_.get(), delayed_runtime, now); | 199 time_domain_->ScheduleDelayedWork(task_queue_.get(), delayed_runtime, now); |
| 203 | 200 |
| 204 base::TimeTicks next_run_time; | 201 base::TimeTicks next_run_time; |
| 205 ASSERT_TRUE(time_domain_->NextScheduledRunTime(&next_run_time)); | 202 ASSERT_TRUE(time_domain_->NextScheduledRunTime(&next_run_time)); |
| 206 EXPECT_EQ(delayed_runtime, next_run_time); | 203 EXPECT_EQ(delayed_runtime, next_run_time); |
| 207 | 204 |
| 208 LazyNow lazy_now = time_domain_->CreateLazyNow(); | 205 LazyNow lazy_now = time_domain_->CreateLazyNow(); |
| 209 time_domain_->WakeupReadyDelayedQueues(&lazy_now); | 206 time_domain_->UpdateWorkQueues(lazy_now); |
| 210 ASSERT_TRUE(time_domain_->NextScheduledRunTime(&next_run_time)); | 207 ASSERT_TRUE(time_domain_->NextScheduledRunTime(&next_run_time)); |
| 211 EXPECT_EQ(delayed_runtime, next_run_time); | 208 EXPECT_EQ(delayed_runtime, next_run_time); |
| 212 | 209 |
| 213 time_domain_->SetNow(delayed_runtime); | 210 time_domain_->SetNow(delayed_runtime); |
| 214 lazy_now = time_domain_->CreateLazyNow(); | 211 lazy_now = time_domain_->CreateLazyNow(); |
| 215 time_domain_->WakeupReadyDelayedQueues(&lazy_now); | 212 time_domain_->UpdateWorkQueues(lazy_now); |
| 216 ASSERT_FALSE(time_domain_->NextScheduledRunTime(&next_run_time)); | 213 ASSERT_FALSE(time_domain_->NextScheduledRunTime(&next_run_time)); |
| 217 } | 214 } |
| 218 | 215 |
| 219 namespace { | 216 namespace { |
| 220 class MockObserver : public TimeDomain::Observer { | 217 class MockObserver : public TimeDomain::Observer { |
| 221 public: | 218 public: |
| 222 ~MockObserver() override {} | 219 ~MockObserver() override {} |
| 223 | 220 |
| 224 MOCK_METHOD1(OnTimeDomainHasImmediateWork, void(TaskQueue*)); | 221 MOCK_METHOD1(OnTimeDomainHasImmediateWork, void(TaskQueue*)); |
| 225 MOCK_METHOD1(OnTimeDomainHasDelayedWork, void(TaskQueue*)); | 222 MOCK_METHOD1(OnTimeDomainHasDelayedWork, void(TaskQueue*)); |
| 226 }; | 223 }; |
| 227 } // namespace | 224 } // namespace |
| 228 | 225 |
| 229 class TimeDomainWithObserverTest : public TimeDomainTest { | 226 class TimeDomainWithObserverTest : public TimeDomainTest { |
| 230 public: | 227 public: |
| 231 MockTimeDomain* CreateMockTimeDomain() override { | 228 MockTimeDomain* CreateMockTimeDomain() override { |
| 232 observer_.reset(new MockObserver()); | 229 observer_.reset(new MockObserver()); |
| 233 return new MockTimeDomain(observer_.get()); | 230 return new MockTimeDomain(observer_.get()); |
| 234 } | 231 } |
| 235 | 232 |
| 236 std::unique_ptr<MockObserver> observer_; | 233 std::unique_ptr<MockObserver> observer_; |
| 237 }; | 234 }; |
| 238 | 235 |
| 239 TEST_F(TimeDomainWithObserverTest, OnTimeDomainHasImmediateWork) { | 236 TEST_F(TimeDomainWithObserverTest, OnTimeDomainHasImmediateWork) { |
| 240 EXPECT_CALL(*observer_, OnTimeDomainHasImmediateWork(task_queue_.get())); | 237 EXPECT_CALL(*observer_, OnTimeDomainHasImmediateWork(task_queue_.get())); |
| 241 time_domain_->OnQueueHasImmediateWork(task_queue_.get()); | 238 time_domain_->RegisterAsUpdatableTaskQueue(task_queue_.get()); |
| 242 } | 239 } |
| 243 | 240 |
| 244 TEST_F(TimeDomainWithObserverTest, OnTimeDomainHasDelayedWork) { | 241 TEST_F(TimeDomainWithObserverTest, OnTimeDomainHasDelayedWork) { |
| 245 EXPECT_CALL(*observer_, OnTimeDomainHasDelayedWork(task_queue_.get())); | 242 EXPECT_CALL(*observer_, OnTimeDomainHasDelayedWork(task_queue_.get())); |
| 246 EXPECT_CALL(*time_domain_.get(), RequestWakeup(_, _)); | 243 EXPECT_CALL(*time_domain_.get(), RequestWakeup(_, _)); |
| 247 base::TimeTicks now = time_domain_->Now(); | 244 base::TimeTicks now = time_domain_->Now(); |
| 248 time_domain_->ScheduleDelayedWork( | 245 time_domain_->ScheduleDelayedWork( |
| 249 task_queue_.get(), now + base::TimeDelta::FromMilliseconds(10), now); | 246 task_queue_.get(), now + base::TimeDelta::FromMilliseconds(10), now); |
| 250 } | 247 } |
| 251 | 248 |
| 252 } // namespace scheduler | 249 } // namespace scheduler |
| 253 } // namespace blink | 250 } // namespace blink |
| OLD | NEW |