Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1739)

Side by Side Diff: third_party/WebKit/Source/platform/scheduler/base/time_domain_unittest.cc

Issue 2798563003: [scheduler] Add TaskQueue::Observer (Closed)
Patch Set: Rebased Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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"
11 #include "platform/scheduler/base/task_queue_impl.h" 11 #include "platform/scheduler/base/task_queue_impl.h"
12 #include "platform/scheduler/base/task_queue_manager.h" 12 #include "platform/scheduler/base/task_queue_manager.h"
13 #include "platform/scheduler/base/task_queue_manager_delegate_for_test.h" 13 #include "platform/scheduler/base/task_queue_manager_delegate_for_test.h"
14 #include "platform/scheduler/base/test_time_source.h" 14 #include "platform/scheduler/base/test_time_source.h"
15 #include "platform/scheduler/base/work_queue.h" 15 #include "platform/scheduler/base/work_queue.h"
16 #include "testing/gmock/include/gmock/gmock.h" 16 #include "testing/gmock/include/gmock/gmock.h"
17 17
18 using testing::_; 18 using testing::_;
19 using testing::AnyNumber; 19 using testing::AnyNumber;
20 using testing::Mock; 20 using testing::Mock;
21 21
22 namespace blink { 22 namespace blink {
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 MockTimeDomain()
28 : TimeDomain(observer), 28 : now_(base::TimeTicks() + base::TimeDelta::FromSeconds(1)) {}
29 now_(base::TimeTicks() + base::TimeDelta::FromSeconds(1)) {}
30 29
31 ~MockTimeDomain() override {} 30 ~MockTimeDomain() override {}
32 31
33 using TimeDomain::CancelDelayedWork; 32 using TimeDomain::CancelDelayedWork;
34 using TimeDomain::NextScheduledRunTime; 33 using TimeDomain::NextScheduledRunTime;
35 using TimeDomain::NextScheduledTaskQueue; 34 using TimeDomain::NextScheduledTaskQueue;
36 using TimeDomain::OnQueueHasImmediateWork;
37 using TimeDomain::ScheduleDelayedWork; 35 using TimeDomain::ScheduleDelayedWork;
38 using TimeDomain::UnregisterQueue; 36 using TimeDomain::UnregisterQueue;
39 using TimeDomain::WakeUpReadyDelayedQueues; 37 using TimeDomain::WakeUpReadyDelayedQueues;
40 38
41 // TimeSource implementation: 39 // TimeSource implementation:
42 LazyNow CreateLazyNow() const override { return LazyNow(now_); } 40 LazyNow CreateLazyNow() const override { return LazyNow(now_); }
43 base::TimeTicks Now() const override { return now_; } 41 base::TimeTicks Now() const override { return now_; }
44 42
45 void AsValueIntoInternal( 43 void AsValueIntoInternal(
46 base::trace_event::TracedValue* state) const override {} 44 base::trace_event::TracedValue* state) const override {}
(...skipping 28 matching lines...) Expand all
75 TaskQueue::Spec(TaskQueue::QueueType::TEST), 73 TaskQueue::Spec(TaskQueue::QueueType::TEST),
76 "test.category", "test.category")); 74 "test.category", "test.category"));
77 } 75 }
78 76
79 void TearDown() final { 77 void TearDown() final {
80 if (task_queue_) 78 if (task_queue_)
81 task_queue_->UnregisterTaskQueue(); 79 task_queue_->UnregisterTaskQueue();
82 } 80 }
83 81
84 virtual MockTimeDomain* CreateMockTimeDomain() { 82 virtual MockTimeDomain* CreateMockTimeDomain() {
85 return new MockTimeDomain(nullptr); 83 return new MockTimeDomain();
86 } 84 }
87 85
88 std::unique_ptr<MockTimeDomain> time_domain_; 86 std::unique_ptr<MockTimeDomain> time_domain_;
89 scoped_refptr<internal::TaskQueueImpl> task_queue_; 87 scoped_refptr<internal::TaskQueueImpl> task_queue_;
90 }; 88 };
91 89
92 TEST_F(TimeDomainTest, ScheduleDelayedWork) { 90 TEST_F(TimeDomainTest, ScheduleDelayedWork) {
93 base::TimeDelta delay = base::TimeDelta::FromMilliseconds(10); 91 base::TimeDelta delay = base::TimeDelta::FromMilliseconds(10);
94 base::TimeTicks delayed_runtime = time_domain_->Now() + delay; 92 base::TimeTicks delayed_runtime = time_domain_->Now() + delay;
95 EXPECT_CALL(*time_domain_.get(), RequestWakeUpAt(_, delayed_runtime)); 93 EXPECT_CALL(*time_domain_.get(), RequestWakeUpAt(_, delayed_runtime));
(...skipping 21 matching lines...) Expand all
117 base::TimeTicks now = time_domain_->Now(); 115 base::TimeTicks now = time_domain_->Now();
118 time_domain_->ScheduleDelayedWork(task_queue_.get(), {delayed_runtime1, 0}, 116 time_domain_->ScheduleDelayedWork(task_queue_.get(), {delayed_runtime1, 0},
119 now); 117 now);
120 118
121 base::TimeTicks next_scheduled_runtime; 119 base::TimeTicks next_scheduled_runtime;
122 EXPECT_TRUE(time_domain_->NextScheduledRunTime(&next_scheduled_runtime)); 120 EXPECT_TRUE(time_domain_->NextScheduledRunTime(&next_scheduled_runtime));
123 EXPECT_EQ(delayed_runtime1, next_scheduled_runtime); 121 EXPECT_EQ(delayed_runtime1, next_scheduled_runtime);
124 122
125 Mock::VerifyAndClearExpectations(time_domain_.get()); 123 Mock::VerifyAndClearExpectations(time_domain_.get());
126 124
127 // Now scheduler a later wake-up, which should replace the previously 125 // Now schedule a later wake_up, which should replace the previously
128 // requested one. 126 // requested one.
129 EXPECT_CALL(*time_domain_.get(), RequestWakeUpAt(_, delayed_runtime2)); 127 EXPECT_CALL(*time_domain_.get(), RequestWakeUpAt(_, delayed_runtime2));
130 time_domain_->ScheduleDelayedWork(task_queue_.get(), {delayed_runtime2, 0}, 128 time_domain_->ScheduleDelayedWork(task_queue_.get(), {delayed_runtime2, 0},
131 now); 129 now);
132 130
133 EXPECT_TRUE(time_domain_->NextScheduledRunTime(&next_scheduled_runtime)); 131 EXPECT_TRUE(time_domain_->NextScheduledRunTime(&next_scheduled_runtime));
134 EXPECT_EQ(delayed_runtime2, next_scheduled_runtime); 132 EXPECT_EQ(delayed_runtime2, next_scheduled_runtime);
135 Mock::VerifyAndClearExpectations(time_domain_.get()); 133 Mock::VerifyAndClearExpectations(time_domain_.get());
136 134
137 EXPECT_CALL(*time_domain_.get(), CancelWakeUpAt(_)).Times(AnyNumber()); 135 EXPECT_CALL(*time_domain_.get(), CancelWakeUpAt(_)).Times(AnyNumber());
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
323 EXPECT_EQ(run_time2, next_run_time); 321 EXPECT_EQ(run_time2, next_run_time);
324 322
325 Mock::VerifyAndClearExpectations(time_domain_.get()); 323 Mock::VerifyAndClearExpectations(time_domain_.get());
326 EXPECT_CALL(*time_domain_.get(), RequestWakeUpAt(_, _)).Times(AnyNumber()); 324 EXPECT_CALL(*time_domain_.get(), RequestWakeUpAt(_, _)).Times(AnyNumber());
327 EXPECT_CALL(*time_domain_.get(), CancelWakeUpAt(_)).Times(AnyNumber()); 325 EXPECT_CALL(*time_domain_.get(), CancelWakeUpAt(_)).Times(AnyNumber());
328 326
329 // Tidy up. 327 // Tidy up.
330 task_queue2->UnregisterTaskQueue(); 328 task_queue2->UnregisterTaskQueue();
331 } 329 }
332 330
333 namespace {
334 class MockObserver : public TimeDomain::Observer {
335 public:
336 ~MockObserver() override {}
337
338 MOCK_METHOD1(OnTimeDomainHasImmediateWork, void(TaskQueue*));
339 MOCK_METHOD1(OnTimeDomainHasDelayedWork, void(TaskQueue*));
340 };
341 } // namespace
342
343 class TimeDomainWithObserverTest : public TimeDomainTest {
344 public:
345 MockTimeDomain* CreateMockTimeDomain() override {
346 observer_.reset(new MockObserver());
347 return new MockTimeDomain(observer_.get());
348 }
349
350 std::unique_ptr<MockObserver> observer_;
351 };
352
353 TEST_F(TimeDomainWithObserverTest, OnTimeDomainHasImmediateWork) {
354 EXPECT_CALL(*observer_, OnTimeDomainHasImmediateWork(task_queue_.get()));
355 time_domain_->OnQueueHasImmediateWork(task_queue_.get());
356 }
357
358 TEST_F(TimeDomainWithObserverTest, OnTimeDomainHasDelayedWork) {
359 EXPECT_CALL(*observer_, OnTimeDomainHasDelayedWork(task_queue_.get()));
360 EXPECT_CALL(*time_domain_.get(), RequestWakeUpAt(_, _));
361 base::TimeTicks now = time_domain_->Now();
362 time_domain_->ScheduleDelayedWork(
363 task_queue_.get(), {now + base::TimeDelta::FromMilliseconds(10), 0}, now);
364 }
365
366 } // namespace scheduler 331 } // namespace scheduler
367 } // namespace blink 332 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698