Index: third_party/WebKit/Source/platform/scheduler/base/time_domain_unittest.cc |
diff --git a/third_party/WebKit/Source/platform/scheduler/base/time_domain_unittest.cc b/third_party/WebKit/Source/platform/scheduler/base/time_domain_unittest.cc |
index f736a67882193e5d32d758a21f9e1d8fecb72388..1c47328ee3da2aae8f1fdf7ae01d81c1de47b342 100644 |
--- a/third_party/WebKit/Source/platform/scheduler/base/time_domain_unittest.cc |
+++ b/third_party/WebKit/Source/platform/scheduler/base/time_domain_unittest.cc |
@@ -24,17 +24,19 @@ namespace scheduler { |
class MockTimeDomain : public TimeDomain { |
public: |
- MockTimeDomain() |
- : now_(base::TimeTicks() + base::TimeDelta::FromSeconds(1)) {} |
+ explicit MockTimeDomain(TimeDomain::Observer* observer) |
+ : TimeDomain(observer), |
+ now_(base::TimeTicks() + base::TimeDelta::FromSeconds(1)) {} |
~MockTimeDomain() override {} |
using TimeDomain::CancelDelayedWork; |
using TimeDomain::NextScheduledRunTime; |
using TimeDomain::NextScheduledTaskQueue; |
+ using TimeDomain::OnQueueHasImmediateWork; |
using TimeDomain::ScheduleDelayedWork; |
using TimeDomain::UnregisterQueue; |
- using TimeDomain::WakeUpReadyDelayedQueues; |
+ using TimeDomain::WakeupReadyDelayedQueues; |
// TimeSource implementation: |
LazyNow CreateLazyNow() const override { return LazyNow(now_); } |
@@ -51,10 +53,10 @@ class MockTimeDomain : public TimeDomain { |
void OnRegisterWithTaskQueueManager( |
TaskQueueManager* task_queue_manager) override {} |
- MOCK_METHOD2(RequestWakeUpAt, |
+ MOCK_METHOD2(RequestWakeupAt, |
void(base::TimeTicks now, base::TimeTicks run_time)); |
- MOCK_METHOD1(CancelWakeUpAt, void(base::TimeTicks run_time)); |
+ MOCK_METHOD1(CancelWakeupAt, void(base::TimeTicks run_time)); |
void SetNow(base::TimeTicks now) { now_ = now; } |
@@ -80,7 +82,7 @@ class TimeDomainTest : public testing::Test { |
} |
virtual MockTimeDomain* CreateMockTimeDomain() { |
- return new MockTimeDomain(); |
+ return new MockTimeDomain(nullptr); |
} |
std::unique_ptr<MockTimeDomain> time_domain_; |
@@ -90,7 +92,7 @@ class TimeDomainTest : public testing::Test { |
TEST_F(TimeDomainTest, ScheduleDelayedWork) { |
base::TimeDelta delay = base::TimeDelta::FromMilliseconds(10); |
base::TimeTicks delayed_runtime = time_domain_->Now() + delay; |
- EXPECT_CALL(*time_domain_.get(), RequestWakeUpAt(_, delayed_runtime)); |
+ EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, delayed_runtime)); |
base::TimeTicks now = time_domain_->Now(); |
time_domain_->ScheduleDelayedWork(task_queue_.get(), {now + delay, 0}, now); |
@@ -103,15 +105,15 @@ TEST_F(TimeDomainTest, ScheduleDelayedWork) { |
EXPECT_EQ(task_queue_.get(), next_task_queue); |
Mock::VerifyAndClearExpectations(time_domain_.get()); |
- EXPECT_CALL(*time_domain_.get(), CancelWakeUpAt(_)).Times(AnyNumber()); |
+ EXPECT_CALL(*time_domain_.get(), CancelWakeupAt(_)).Times(AnyNumber()); |
} |
-TEST_F(TimeDomainTest, ScheduleDelayedWorkSupersedesPreviousWakeUp) { |
+TEST_F(TimeDomainTest, ScheduleDelayedWorkSupersedesPreviousWakeup) { |
base::TimeDelta delay1 = base::TimeDelta::FromMilliseconds(10); |
base::TimeDelta delay2 = base::TimeDelta::FromMilliseconds(100); |
base::TimeTicks delayed_runtime1 = time_domain_->Now() + delay1; |
base::TimeTicks delayed_runtime2 = time_domain_->Now() + delay2; |
- EXPECT_CALL(*time_domain_.get(), RequestWakeUpAt(_, delayed_runtime1)); |
+ EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, delayed_runtime1)); |
base::TimeTicks now = time_domain_->Now(); |
time_domain_->ScheduleDelayedWork(task_queue_.get(), {delayed_runtime1, 0}, |
now); |
@@ -122,9 +124,9 @@ TEST_F(TimeDomainTest, ScheduleDelayedWorkSupersedesPreviousWakeUp) { |
Mock::VerifyAndClearExpectations(time_domain_.get()); |
- // Now scheduler a later wake_up, which should replace the previously |
- // requested one. |
- EXPECT_CALL(*time_domain_.get(), RequestWakeUpAt(_, delayed_runtime2)); |
+ // Now scheduler a later wakeup, which should replace the previously requested |
+ // one. |
+ EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, delayed_runtime2)); |
time_domain_->ScheduleDelayedWork(task_queue_.get(), {delayed_runtime2, 0}, |
now); |
@@ -132,10 +134,10 @@ TEST_F(TimeDomainTest, ScheduleDelayedWorkSupersedesPreviousWakeUp) { |
EXPECT_EQ(delayed_runtime2, next_scheduled_runtime); |
Mock::VerifyAndClearExpectations(time_domain_.get()); |
- EXPECT_CALL(*time_domain_.get(), CancelWakeUpAt(_)).Times(AnyNumber()); |
+ EXPECT_CALL(*time_domain_.get(), CancelWakeupAt(_)).Times(AnyNumber()); |
} |
-TEST_F(TimeDomainTest, RequestWakeUpAt_OnlyCalledForEarlierTasks) { |
+TEST_F(TimeDomainTest, RequestWakeupAt_OnlyCalledForEarlierTasks) { |
scoped_refptr<internal::TaskQueueImpl> task_queue2 = make_scoped_refptr( |
new internal::TaskQueueImpl(nullptr, time_domain_.get(), |
TaskQueue::Spec(TaskQueue::QueueType::TEST), |
@@ -156,27 +158,27 @@ TEST_F(TimeDomainTest, RequestWakeUpAt_OnlyCalledForEarlierTasks) { |
base::TimeDelta delay3 = base::TimeDelta::FromMilliseconds(30); |
base::TimeDelta delay4 = base::TimeDelta::FromMilliseconds(1); |
- // RequestWakeUpAt should always be called if there are no other wake_ups. |
+ // RequestWakeupAt should always be called if there are no other wakeups. |
base::TimeTicks now = time_domain_->Now(); |
- EXPECT_CALL(*time_domain_.get(), RequestWakeUpAt(_, now + delay1)); |
+ EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, now + delay1)); |
time_domain_->ScheduleDelayedWork(task_queue_.get(), {now + delay1, 0}, now); |
Mock::VerifyAndClearExpectations(time_domain_.get()); |
- // RequestWakeUpAt should not be called when scheduling later tasks. |
- EXPECT_CALL(*time_domain_.get(), RequestWakeUpAt(_, _)).Times(0); |
+ // RequestWakeupAt should not be called when scheduling later tasks. |
+ EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, _)).Times(0); |
time_domain_->ScheduleDelayedWork(task_queue2.get(), {now + delay2, 0}, now); |
time_domain_->ScheduleDelayedWork(task_queue3.get(), {now + delay3, 0}, now); |
- // RequestWakeUpAt should be called when scheduling earlier tasks. |
+ // RequestWakeupAt should be called when scheduling earlier tasks. |
Mock::VerifyAndClearExpectations(time_domain_.get()); |
- EXPECT_CALL(*time_domain_.get(), RequestWakeUpAt(_, now + delay4)); |
+ EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, now + delay4)); |
time_domain_->ScheduleDelayedWork(task_queue4.get(), {now + delay4, 0}, now); |
Mock::VerifyAndClearExpectations(time_domain_.get()); |
- EXPECT_CALL(*time_domain_.get(), RequestWakeUpAt(_, _)); |
- EXPECT_CALL(*time_domain_.get(), CancelWakeUpAt(_)).Times(2); |
+ EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, _)); |
+ EXPECT_CALL(*time_domain_.get(), CancelWakeupAt(_)).Times(2); |
task_queue2->UnregisterTaskQueue(); |
task_queue3->UnregisterTaskQueue(); |
task_queue4->UnregisterTaskQueue(); |
@@ -189,11 +191,11 @@ TEST_F(TimeDomainTest, UnregisterQueue) { |
"test.category", "test.category")); |
base::TimeTicks now = time_domain_->Now(); |
- base::TimeTicks wake_up1 = now + base::TimeDelta::FromMilliseconds(10); |
- EXPECT_CALL(*time_domain_.get(), RequestWakeUpAt(_, wake_up1)).Times(1); |
- time_domain_->ScheduleDelayedWork(task_queue_.get(), {wake_up1, 0}, now); |
- base::TimeTicks wake_up2 = now + base::TimeDelta::FromMilliseconds(100); |
- time_domain_->ScheduleDelayedWork(task_queue2_.get(), {wake_up2, 0}, now); |
+ base::TimeTicks wakeup1 = now + base::TimeDelta::FromMilliseconds(10); |
+ EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, wakeup1)).Times(1); |
+ time_domain_->ScheduleDelayedWork(task_queue_.get(), {wakeup1, 0}, now); |
+ base::TimeTicks wakeup2 = now + base::TimeDelta::FromMilliseconds(100); |
+ time_domain_->ScheduleDelayedWork(task_queue2_.get(), {wakeup2, 0}, now); |
TaskQueue* next_task_queue; |
EXPECT_TRUE(time_domain_->NextScheduledTaskQueue(&next_task_queue)); |
@@ -201,8 +203,8 @@ TEST_F(TimeDomainTest, UnregisterQueue) { |
testing::Mock::VerifyAndClearExpectations(time_domain_.get()); |
- EXPECT_CALL(*time_domain_.get(), CancelWakeUpAt(wake_up1)).Times(1); |
- EXPECT_CALL(*time_domain_.get(), RequestWakeUpAt(_, wake_up2)).Times(1); |
+ EXPECT_CALL(*time_domain_.get(), CancelWakeupAt(wakeup1)).Times(1); |
+ EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, wakeup2)).Times(1); |
time_domain_->UnregisterQueue(task_queue_.get()); |
task_queue_ = scoped_refptr<internal::TaskQueueImpl>(); |
@@ -211,17 +213,17 @@ TEST_F(TimeDomainTest, UnregisterQueue) { |
testing::Mock::VerifyAndClearExpectations(time_domain_.get()); |
- EXPECT_CALL(*time_domain_.get(), CancelWakeUpAt(wake_up2)).Times(1); |
+ EXPECT_CALL(*time_domain_.get(), CancelWakeupAt(wakeup2)).Times(1); |
time_domain_->UnregisterQueue(task_queue2_.get()); |
EXPECT_FALSE(time_domain_->NextScheduledTaskQueue(&next_task_queue)); |
} |
-TEST_F(TimeDomainTest, WakeUpReadyDelayedQueues) { |
+TEST_F(TimeDomainTest, WakeupReadyDelayedQueues) { |
base::TimeDelta delay = base::TimeDelta::FromMilliseconds(50); |
base::TimeTicks now = time_domain_->Now(); |
base::TimeTicks delayed_runtime = now + delay; |
- EXPECT_CALL(*time_domain_.get(), RequestWakeUpAt(_, delayed_runtime)); |
+ EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, delayed_runtime)); |
time_domain_->ScheduleDelayedWork(task_queue_.get(), {delayed_runtime, 0}, |
now); |
@@ -230,23 +232,23 @@ TEST_F(TimeDomainTest, WakeUpReadyDelayedQueues) { |
EXPECT_EQ(delayed_runtime, next_run_time); |
LazyNow lazy_now = time_domain_->CreateLazyNow(); |
- time_domain_->WakeUpReadyDelayedQueues(&lazy_now); |
+ time_domain_->WakeupReadyDelayedQueues(&lazy_now); |
ASSERT_TRUE(time_domain_->NextScheduledRunTime(&next_run_time)); |
EXPECT_EQ(delayed_runtime, next_run_time); |
time_domain_->SetNow(delayed_runtime); |
lazy_now = time_domain_->CreateLazyNow(); |
- time_domain_->WakeUpReadyDelayedQueues(&lazy_now); |
+ time_domain_->WakeupReadyDelayedQueues(&lazy_now); |
ASSERT_FALSE(time_domain_->NextScheduledRunTime(&next_run_time)); |
} |
-TEST_F(TimeDomainTest, WakeUpReadyDelayedQueuesWithIdenticalRuntimes) { |
+TEST_F(TimeDomainTest, WakeupReadyDelayedQueuesWithIdenticalRuntimes) { |
int sequence_num = 0; |
base::TimeDelta delay = base::TimeDelta::FromMilliseconds(50); |
base::TimeTicks now = time_domain_->Now(); |
base::TimeTicks delayed_runtime = now + delay; |
- EXPECT_CALL(*time_domain_.get(), RequestWakeUpAt(_, delayed_runtime)); |
- EXPECT_CALL(*time_domain_.get(), CancelWakeUpAt(delayed_runtime)); |
+ EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, delayed_runtime)); |
+ EXPECT_CALL(*time_domain_.get(), CancelWakeupAt(delayed_runtime)); |
scoped_refptr<internal::TaskQueueImpl> task_queue2 = make_scoped_refptr( |
new internal::TaskQueueImpl(nullptr, time_domain_.get(), |
@@ -259,7 +261,7 @@ TEST_F(TimeDomainTest, WakeUpReadyDelayedQueuesWithIdenticalRuntimes) { |
{delayed_runtime, ++sequence_num}, now); |
LazyNow lazy_now = time_domain_->CreateLazyNow(); |
- time_domain_->WakeUpReadyDelayedQueues(&lazy_now); |
+ time_domain_->WakeupReadyDelayedQueues(&lazy_now); |
// The second task queue should wake up first since it has a lower sequence |
// number. |
@@ -274,14 +276,14 @@ TEST_F(TimeDomainTest, CancelDelayedWork) { |
base::TimeTicks now = time_domain_->Now(); |
base::TimeTicks run_time = now + base::TimeDelta::FromMilliseconds(20); |
- EXPECT_CALL(*time_domain_.get(), RequestWakeUpAt(_, run_time)); |
+ EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, run_time)); |
time_domain_->ScheduleDelayedWork(task_queue_.get(), {run_time, 0}, now); |
TaskQueue* next_task_queue; |
EXPECT_TRUE(time_domain_->NextScheduledTaskQueue(&next_task_queue)); |
EXPECT_EQ(task_queue_.get(), next_task_queue); |
- EXPECT_CALL(*time_domain_.get(), CancelWakeUpAt(run_time)); |
+ EXPECT_CALL(*time_domain_.get(), CancelWakeupAt(run_time)); |
time_domain_->CancelDelayedWork(task_queue_.get()); |
EXPECT_FALSE(time_domain_->NextScheduledTaskQueue(&next_task_queue)); |
} |
@@ -295,11 +297,11 @@ TEST_F(TimeDomainTest, CancelDelayedWork_TwoQueues) { |
base::TimeTicks now = time_domain_->Now(); |
base::TimeTicks run_time1 = now + base::TimeDelta::FromMilliseconds(20); |
base::TimeTicks run_time2 = now + base::TimeDelta::FromMilliseconds(40); |
- EXPECT_CALL(*time_domain_.get(), RequestWakeUpAt(_, run_time1)); |
+ EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, run_time1)); |
time_domain_->ScheduleDelayedWork(task_queue_.get(), {run_time1, 0}, now); |
Mock::VerifyAndClearExpectations(time_domain_.get()); |
- EXPECT_CALL(*time_domain_.get(), RequestWakeUpAt(_, _)).Times(0); |
+ EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, _)).Times(0); |
time_domain_->ScheduleDelayedWork(task_queue2.get(), {run_time2, 0}, now); |
Mock::VerifyAndClearExpectations(time_domain_.get()); |
@@ -311,8 +313,8 @@ TEST_F(TimeDomainTest, CancelDelayedWork_TwoQueues) { |
ASSERT_TRUE(time_domain_->NextScheduledRunTime(&next_run_time)); |
EXPECT_EQ(run_time1, next_run_time); |
- EXPECT_CALL(*time_domain_.get(), CancelWakeUpAt(run_time1)); |
- EXPECT_CALL(*time_domain_.get(), RequestWakeUpAt(_, run_time2)); |
+ EXPECT_CALL(*time_domain_.get(), CancelWakeupAt(run_time1)); |
+ EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, run_time2)); |
time_domain_->CancelDelayedWork(task_queue_.get()); |
EXPECT_TRUE(time_domain_->NextScheduledTaskQueue(&next_task_queue)); |
EXPECT_EQ(task_queue2.get(), next_task_queue); |
@@ -321,12 +323,45 @@ TEST_F(TimeDomainTest, CancelDelayedWork_TwoQueues) { |
EXPECT_EQ(run_time2, next_run_time); |
Mock::VerifyAndClearExpectations(time_domain_.get()); |
- EXPECT_CALL(*time_domain_.get(), RequestWakeUpAt(_, _)).Times(AnyNumber()); |
- EXPECT_CALL(*time_domain_.get(), CancelWakeUpAt(_)).Times(AnyNumber()); |
+ EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, _)).Times(AnyNumber()); |
+ EXPECT_CALL(*time_domain_.get(), CancelWakeupAt(_)).Times(AnyNumber()); |
// Tidy up. |
task_queue2->UnregisterTaskQueue(); |
} |
+namespace { |
+class MockObserver : public TimeDomain::Observer { |
+ public: |
+ ~MockObserver() override {} |
+ |
+ MOCK_METHOD1(OnTimeDomainHasImmediateWork, void(TaskQueue*)); |
+ MOCK_METHOD1(OnTimeDomainHasDelayedWork, void(TaskQueue*)); |
+}; |
+} // namespace |
+ |
+class TimeDomainWithObserverTest : public TimeDomainTest { |
+ public: |
+ MockTimeDomain* CreateMockTimeDomain() override { |
+ observer_.reset(new MockObserver()); |
+ return new MockTimeDomain(observer_.get()); |
+ } |
+ |
+ std::unique_ptr<MockObserver> observer_; |
+}; |
+ |
+TEST_F(TimeDomainWithObserverTest, OnTimeDomainHasImmediateWork) { |
+ EXPECT_CALL(*observer_, OnTimeDomainHasImmediateWork(task_queue_.get())); |
+ time_domain_->OnQueueHasImmediateWork(task_queue_.get()); |
+} |
+ |
+TEST_F(TimeDomainWithObserverTest, OnTimeDomainHasDelayedWork) { |
+ EXPECT_CALL(*observer_, OnTimeDomainHasDelayedWork(task_queue_.get())); |
+ EXPECT_CALL(*time_domain_.get(), RequestWakeupAt(_, _)); |
+ base::TimeTicks now = time_domain_->Now(); |
+ time_domain_->ScheduleDelayedWork( |
+ task_queue_.get(), {now + base::TimeDelta::FromMilliseconds(10), 0}, now); |
+} |
+ |
} // namespace scheduler |
} // namespace blink |