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 |