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