Index: third_party/WebKit/Source/platform/scheduler/base/task_queue_manager_unittest.cc |
diff --git a/third_party/WebKit/Source/platform/scheduler/base/task_queue_manager_unittest.cc b/third_party/WebKit/Source/platform/scheduler/base/task_queue_manager_unittest.cc |
index ed91bfac1b981f370ca3091b44057560d31c0ed8..fc290a3c42e06a279c3382b291972f903b04caba 100644 |
--- a/third_party/WebKit/Source/platform/scheduler/base/task_queue_manager_unittest.cc |
+++ b/third_party/WebKit/Source/platform/scheduler/base/task_queue_manager_unittest.cc |
@@ -32,32 +32,15 @@ |
#include "platform/scheduler/base/work_queue_sets.h" |
#include "testing/gmock/include/gmock/gmock.h" |
-using testing::AnyNumber; |
using testing::Contains; |
using testing::ElementsAre; |
using testing::ElementsAreArray; |
-using testing::Mock; |
using testing::Not; |
using testing::_; |
using blink::scheduler::internal::EnqueueOrder; |
namespace blink { |
namespace scheduler { |
- |
-class TaskQueueManagerForTest : public TaskQueueManager { |
- public: |
- TaskQueueManagerForTest( |
- scoped_refptr<TaskQueueManagerDelegate> delegate, |
- const char* tracing_category, |
- const char* disabled_by_default_tracing_category, |
- const char* disabled_by_default_verbose_tracing_category) |
- : TaskQueueManager(delegate, |
- tracing_category, |
- disabled_by_default_tracing_category, |
- disabled_by_default_verbose_tracing_category) {} |
- |
- using TaskQueueManager::NextTaskDelay; |
-}; |
class MessageLoopTaskRunner : public TaskQueueManagerDelegateForTest { |
public: |
@@ -102,7 +85,7 @@ |
test_task_runner_.get(), |
base::MakeUnique<TestTimeSource>(now_src_.get())); |
- manager_ = base::MakeUnique<TaskQueueManagerForTest>( |
+ manager_ = base::MakeUnique<TaskQueueManager>( |
main_task_runner_, "test.scheduler", "test.scheduler", |
"test.scheduler.debug"); |
@@ -123,7 +106,7 @@ |
message_loop_.reset(new base::MessageLoop()); |
// A null clock triggers some assertions. |
now_src_->Advance(base::TimeDelta::FromMicroseconds(1000)); |
- manager_ = base::MakeUnique<TaskQueueManagerForTest>( |
+ manager_ = base::MakeUnique<TaskQueueManager>( |
MessageLoopTaskRunner::Create( |
base::WrapUnique(new TestTimeSource(now_src_.get()))), |
"test.scheduler", "test.scheduler", "test.scheduler.debug"); |
@@ -137,14 +120,12 @@ |
manager_->WakeupReadyDelayedQueues(&lazy_now); |
} |
- using NextTaskDelay = TaskQueueManagerForTest::NextTaskDelay; |
- |
- base::Optional<NextTaskDelay> ComputeDelayTillNextTask(LazyNow* lazy_now) { |
+ base::Optional<base::TimeDelta> ComputeDelayTillNextTask(LazyNow* lazy_now) { |
base::AutoLock lock(manager_->any_thread_lock_); |
return manager_->ComputeDelayTillNextTaskLocked(lazy_now); |
} |
- void PostDoWorkContinuation(base::Optional<NextTaskDelay> next_delay, |
+ void PostDoWorkContinuation(base::Optional<base::TimeDelta> next_delay, |
LazyNow* lazy_now) { |
MoveableAutoLock lock(manager_->any_thread_lock_); |
return manager_->PostDoWorkContinuationLocked(next_delay, lazy_now, |
@@ -156,8 +137,8 @@ |
return manager_->any_thread().immediate_do_work_posted_count; |
} |
- base::TimeTicks next_delayed_do_work_time() const { |
- return manager_->next_delayed_do_work_.run_time(); |
+ base::TimeTicks next_scheduled_delayed_do_work_time() const { |
+ return manager_->next_scheduled_delayed_do_work_time_; |
} |
EnqueueOrder GetNextSequenceNumber() const { |
@@ -194,7 +175,7 @@ |
std::unique_ptr<base::SimpleTestTickClock> now_src_; |
scoped_refptr<TaskQueueManagerDelegateForTest> main_task_runner_; |
scoped_refptr<cc::OrderedSimpleTaskRunner> test_task_runner_; |
- std::unique_ptr<TaskQueueManagerForTest> manager_; |
+ std::unique_ptr<TaskQueueManager> manager_; |
std::vector<scoped_refptr<internal::TaskQueueImpl>> runners_; |
TestTaskTimeObserver test_task_time_observer_; |
}; |
@@ -223,7 +204,7 @@ |
TestCountUsesTimeSource* test_count_uses_time_source = |
new TestCountUsesTimeSource(); |
- manager_ = base::MakeUnique<TaskQueueManagerForTest>( |
+ manager_ = base::MakeUnique<TaskQueueManager>( |
MessageLoopTaskRunner::Create( |
base::WrapUnique(test_count_uses_time_source)), |
"test.scheduler", "test.scheduler", "test.scheduler.debug"); |
@@ -256,7 +237,7 @@ |
TestCountUsesTimeSource* test_count_uses_time_source = |
new TestCountUsesTimeSource(); |
- manager_ = base::MakeUnique<TaskQueueManagerForTest>( |
+ manager_ = base::MakeUnique<TaskQueueManager>( |
MessageLoopTaskRunner::Create( |
base::WrapUnique(test_count_uses_time_source)), |
"test.scheduler", "test.scheduler", "test.scheduler.debug"); |
@@ -401,11 +382,16 @@ |
EXPECT_TRUE(runners_[0]->HasPendingImmediateWork()); |
// Move the task into the |delayed_work_queue|. |
- WakeupReadyDelayedQueues(LazyNow(now_src_.get())); |
+ EXPECT_TRUE(runners_[0]->delayed_work_queue()->Empty()); |
+ std::unique_ptr<TaskQueue::QueueEnabledVoter> voter = |
+ runners_[0]->CreateQueueEnabledVoter(); |
+ voter->SetQueueEnabled(false); |
+ test_task_runner_->RunUntilIdle(); |
EXPECT_FALSE(runners_[0]->delayed_work_queue()->Empty()); |
EXPECT_TRUE(runners_[0]->HasPendingImmediateWork()); |
// Run the task, making the queue empty. |
+ voter->SetQueueEnabled(true); |
test_task_runner_->RunUntilIdle(); |
EXPECT_FALSE(runners_[0]->HasPendingImmediateWork()); |
} |
@@ -1687,137 +1673,6 @@ |
manager_->UnregisterTimeDomain(domain_a.get()); |
manager_->UnregisterTimeDomain(domain_b.get()); |
-} |
- |
-namespace { |
-class MockTimeDomainObserver : public TimeDomain::Observer { |
- public: |
- ~MockTimeDomainObserver() override {} |
- |
- MOCK_METHOD1(OnTimeDomainHasImmediateWork, void(TaskQueue*)); |
- MOCK_METHOD1(OnTimeDomainHasDelayedWork, void(TaskQueue*)); |
-}; |
-} // namespace |
- |
-TEST_F(TaskQueueManagerTest, TimeDomainObserver_ImmediateTask) { |
- Initialize(1u); |
- |
- MockTimeDomainObserver observer; |
- std::unique_ptr<VirtualTimeDomain> domain( |
- new VirtualTimeDomain(&observer, manager_->delegate()->NowTicks())); |
- manager_->RegisterTimeDomain(domain.get()); |
- runners_[0]->SetTimeDomain(domain.get()); |
- |
- // We should get a notification when a task is posted on an empty queue. |
- EXPECT_CALL(observer, OnTimeDomainHasImmediateWork(runners_[0].get())); |
- runners_[0]->PostTask(FROM_HERE, base::Bind(&NopTask)); |
- Mock::VerifyAndClearExpectations(&observer); |
- |
- // But not subsequently. |
- EXPECT_CALL(observer, OnTimeDomainHasImmediateWork(_)).Times(0); |
- runners_[0]->PostTask(FROM_HERE, base::Bind(&NopTask)); |
- Mock::VerifyAndClearExpectations(&observer); |
- |
- // Unless the immediate work queue is emptied. |
- runners_[0]->ReloadImmediateWorkQueueIfEmpty(); |
- EXPECT_CALL(observer, OnTimeDomainHasImmediateWork(runners_[0].get())); |
- runners_[0]->PostTask(FROM_HERE, base::Bind(&NopTask)); |
- |
- // Tidy up. |
- runners_[0]->UnregisterTaskQueue(); |
- manager_->UnregisterTimeDomain(domain.get()); |
-} |
- |
-TEST_F(TaskQueueManagerTest, TimeDomainObserver_DelayedTask) { |
- Initialize(1u); |
- |
- MockTimeDomainObserver observer; |
- std::unique_ptr<VirtualTimeDomain> domain( |
- new VirtualTimeDomain(&observer, manager_->delegate()->NowTicks())); |
- manager_->RegisterTimeDomain(domain.get()); |
- runners_[0]->SetTimeDomain(domain.get()); |
- |
- // We should get a notification when a delayed task is posted on an empty |
- // queue. |
- EXPECT_CALL(observer, OnTimeDomainHasDelayedWork(runners_[0].get())); |
- runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask), |
- base::TimeDelta::FromSeconds(10)); |
- Mock::VerifyAndClearExpectations(&observer); |
- |
- // We should not get a notification for a longer delay. |
- EXPECT_CALL(observer, OnTimeDomainHasDelayedWork(_)).Times(0); |
- runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask), |
- base::TimeDelta::FromSeconds(100)); |
- Mock::VerifyAndClearExpectations(&observer); |
- |
- // We should get a notification for a shorter delay. |
- EXPECT_CALL(observer, OnTimeDomainHasDelayedWork(runners_[0].get())); |
- runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask), |
- base::TimeDelta::FromSeconds(1)); |
- Mock::VerifyAndClearExpectations(&observer); |
- |
- std::unique_ptr<TaskQueue::QueueEnabledVoter> voter = |
- runners_[0]->CreateQueueEnabledVoter(); |
- voter->SetQueueEnabled(false); |
- |
- // When a queue has been enabled, we may get a notification if the |
- // TimeDomain's next scheduled wakeup has changed. |
- EXPECT_CALL(observer, OnTimeDomainHasDelayedWork(runners_[0].get())); |
- voter->SetQueueEnabled(true); |
- |
- // Tidy up. |
- runners_[0]->UnregisterTaskQueue(); |
- manager_->UnregisterTimeDomain(domain.get()); |
-} |
- |
-TEST_F(TaskQueueManagerTest, TimeDomainObserver_DelayedTaskMultipleQueues) { |
- Initialize(2u); |
- |
- MockTimeDomainObserver observer; |
- std::unique_ptr<VirtualTimeDomain> domain( |
- new VirtualTimeDomain(&observer, manager_->delegate()->NowTicks())); |
- manager_->RegisterTimeDomain(domain.get()); |
- runners_[0]->SetTimeDomain(domain.get()); |
- runners_[1]->SetTimeDomain(domain.get()); |
- |
- EXPECT_CALL(observer, OnTimeDomainHasDelayedWork(runners_[0].get())).Times(1); |
- EXPECT_CALL(observer, OnTimeDomainHasDelayedWork(runners_[1].get())).Times(1); |
- runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask), |
- base::TimeDelta::FromSeconds(1)); |
- runners_[1]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask), |
- base::TimeDelta::FromSeconds(10)); |
- testing::Mock::VerifyAndClearExpectations(&observer); |
- |
- std::unique_ptr<TaskQueue::QueueEnabledVoter> voter0 = |
- runners_[0]->CreateQueueEnabledVoter(); |
- std::unique_ptr<TaskQueue::QueueEnabledVoter> voter1 = |
- runners_[1]->CreateQueueEnabledVoter(); |
- |
- // Disabling a queue should not trigger a notification. |
- EXPECT_CALL(observer, OnTimeDomainHasDelayedWork(_)).Times(0); |
- voter0->SetQueueEnabled(false); |
- Mock::VerifyAndClearExpectations(&observer); |
- |
- // Re-enabling it should should also trigger a notification. |
- EXPECT_CALL(observer, OnTimeDomainHasDelayedWork(runners_[0].get())); |
- voter0->SetQueueEnabled(true); |
- Mock::VerifyAndClearExpectations(&observer); |
- |
- // Disabling a queue should not trigger a notification. |
- EXPECT_CALL(observer, OnTimeDomainHasDelayedWork(_)).Times(0); |
- voter1->SetQueueEnabled(false); |
- Mock::VerifyAndClearExpectations(&observer); |
- |
- // Re-enabling it should should trigger a notification. |
- EXPECT_CALL(observer, OnTimeDomainHasDelayedWork(runners_[1].get())); |
- voter1->SetQueueEnabled(true); |
- Mock::VerifyAndClearExpectations(&observer); |
- |
- // Tidy up. |
- EXPECT_CALL(observer, OnTimeDomainHasDelayedWork(_)).Times(AnyNumber()); |
- runners_[0]->UnregisterTaskQueue(); |
- runners_[1]->UnregisterTaskQueue(); |
- manager_->UnregisterTimeDomain(domain.get()); |
} |
namespace { |
@@ -2466,6 +2321,10 @@ |
TEST_F(TaskQueueManagerTest, ComputeDelayTillNextTask) { |
Initialize(2u); |
+ std::unique_ptr<RealTimeDomain> domain2(new RealTimeDomain("test")); |
+ manager_->RegisterTimeDomain(domain2.get()); |
+ runners_[1]->SetTimeDomain(domain2.get()); |
+ |
LazyNow lazy_now(now_src_.get()); |
EXPECT_FALSE(static_cast<bool>(ComputeDelayTillNextTask(&lazy_now))); |
@@ -2473,23 +2332,27 @@ |
base::TimeDelta::FromSeconds(10)); |
EXPECT_EQ(base::TimeDelta::FromSeconds(10), |
- ComputeDelayTillNextTask(&lazy_now)->delay()); |
+ ComputeDelayTillNextTask(&lazy_now).value()); |
runners_[1]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask), |
base::TimeDelta::FromSeconds(15)); |
EXPECT_EQ(base::TimeDelta::FromSeconds(10), |
- ComputeDelayTillNextTask(&lazy_now)->delay()); |
+ ComputeDelayTillNextTask(&lazy_now).value()); |
runners_[1]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask), |
base::TimeDelta::FromSeconds(5)); |
EXPECT_EQ(base::TimeDelta::FromSeconds(5), |
- ComputeDelayTillNextTask(&lazy_now)->delay()); |
+ ComputeDelayTillNextTask(&lazy_now).value()); |
runners_[0]->PostTask(FROM_HERE, base::Bind(&NopTask)); |
- EXPECT_EQ(base::TimeDelta(), ComputeDelayTillNextTask(&lazy_now)->delay()); |
+ EXPECT_EQ(base::TimeDelta(), ComputeDelayTillNextTask(&lazy_now).value()); |
+ |
+ // Tidy up. |
+ runners_[1]->UnregisterTaskQueue(); |
+ manager_->UnregisterTimeDomain(domain2.get()); |
} |
TEST_F(TaskQueueManagerTest, ComputeDelayTillNextTask_Disabled) { |
@@ -2522,7 +2385,7 @@ |
runners_[0]->InsertFence(TaskQueue::InsertFencePosition::NOW); |
LazyNow lazy_now(now_src_.get()); |
- EXPECT_EQ(base::TimeDelta(), ComputeDelayTillNextTask(&lazy_now)->delay()); |
+ EXPECT_EQ(base::TimeDelta(), ComputeDelayTillNextTask(&lazy_now).value()); |
} |
TEST_F(TaskQueueManagerTest, ComputeDelayTillNextTask_DelayedTaskReady) { |
@@ -2534,63 +2397,44 @@ |
now_src_->Advance(base::TimeDelta::FromSeconds(10)); |
LazyNow lazy_now(now_src_.get()); |
- EXPECT_EQ(base::TimeDelta(), ComputeDelayTillNextTask(&lazy_now)->delay()); |
+ EXPECT_EQ(base::TimeDelta(), ComputeDelayTillNextTask(&lazy_now).value()); |
} |
TEST_F(TaskQueueManagerTest, PostDoWorkContinuation_NoMoreWork) { |
Initialize(1u); |
LazyNow lazy_now(now_src_.get()); |
- PostDoWorkContinuation(base::Optional<NextTaskDelay>(), &lazy_now); |
+ PostDoWorkContinuation(base::Optional<base::TimeDelta>(), &lazy_now); |
EXPECT_EQ(0u, test_task_runner_->NumPendingTasks()); |
EXPECT_EQ(0, immediate_do_work_posted_count()); |
- EXPECT_TRUE(next_delayed_do_work_time().is_null()); |
+ EXPECT_TRUE(next_scheduled_delayed_do_work_time().is_null()); |
} |
TEST_F(TaskQueueManagerTest, PostDoWorkContinuation_ImmediateWork) { |
Initialize(1u); |
LazyNow lazy_now(now_src_.get()); |
- PostDoWorkContinuation(NextTaskDelay(), &lazy_now); |
+ PostDoWorkContinuation(base::TimeDelta(), &lazy_now); |
EXPECT_EQ(1u, test_task_runner_->NumPendingTasks()); |
EXPECT_EQ(base::TimeDelta(), test_task_runner_->DelayToNextTaskTime()); |
EXPECT_EQ(1, immediate_do_work_posted_count()); |
- EXPECT_TRUE(next_delayed_do_work_time().is_null()); |
-} |
- |
-TEST_F(TaskQueueManagerTest, PostDoWorkContinuation_DelayedWorkInThePast) { |
+ EXPECT_TRUE(next_scheduled_delayed_do_work_time().is_null()); |
+} |
+ |
+TEST_F(TaskQueueManagerTest, PostDoWorkContinuation_DelayedWork) { |
Initialize(1u); |
LazyNow lazy_now(now_src_.get()); |
- // Note this isn't supposed to happen in practice. |
- PostDoWorkContinuation( |
- NextTaskDelay(base::TimeDelta::FromSeconds(-1), |
- runners_[0]->GetTimeDomain(), |
- NextTaskDelay::AllowAnyDelayForTesting()), |
- &lazy_now); |
- |
- EXPECT_EQ(1u, test_task_runner_->NumPendingTasks()); |
- EXPECT_EQ(base::TimeDelta(), test_task_runner_->DelayToNextTaskTime()); |
- EXPECT_EQ(1, immediate_do_work_posted_count()); |
- EXPECT_TRUE(next_delayed_do_work_time().is_null()); |
-} |
- |
-TEST_F(TaskQueueManagerTest, PostDoWorkContinuation_DelayedWork) { |
- Initialize(1u); |
- |
- LazyNow lazy_now(now_src_.get()); |
- PostDoWorkContinuation(NextTaskDelay(base::TimeDelta::FromSeconds(1), |
- runners_[0]->GetTimeDomain()), |
- &lazy_now); |
+ PostDoWorkContinuation(base::TimeDelta::FromSeconds(1), &lazy_now); |
EXPECT_EQ(1u, test_task_runner_->NumPendingTasks()); |
EXPECT_EQ(base::TimeDelta::FromSeconds(1), |
test_task_runner_->DelayToNextTaskTime()); |
EXPECT_EQ(0, immediate_do_work_posted_count()); |
EXPECT_EQ(lazy_now.Now() + base::TimeDelta::FromSeconds(1), |
- next_delayed_do_work_time()); |
+ next_scheduled_delayed_do_work_time()); |
} |
TEST_F(TaskQueueManagerTest, |
@@ -2603,35 +2447,29 @@ |
EXPECT_EQ(1, immediate_do_work_posted_count()); |
LazyNow lazy_now(now_src_.get()); |
- PostDoWorkContinuation(NextTaskDelay(base::TimeDelta::FromSeconds(1), |
- runners_[0]->GetTimeDomain()), |
- &lazy_now); |
+ PostDoWorkContinuation(base::TimeDelta::FromSeconds(1), &lazy_now); |
// Test that a delayed task didn't get posted. |
EXPECT_EQ(1u, test_task_runner_->NumPendingTasks()); |
EXPECT_EQ(base::TimeDelta(), test_task_runner_->DelayToNextTaskTime()); |
EXPECT_EQ(1, immediate_do_work_posted_count()); |
- EXPECT_TRUE(next_delayed_do_work_time().is_null()); |
+ EXPECT_TRUE(next_scheduled_delayed_do_work_time().is_null()); |
} |
TEST_F(TaskQueueManagerTest, PostDoWorkContinuation_DelayedWorkTimeChanges) { |
Initialize(1u); |
LazyNow lazy_now(now_src_.get()); |
- PostDoWorkContinuation(NextTaskDelay(base::TimeDelta::FromSeconds(1), |
- runners_[0]->GetTimeDomain()), |
- &lazy_now); |
+ PostDoWorkContinuation(base::TimeDelta::FromSeconds(1), &lazy_now); |
EXPECT_TRUE(test_task_runner_->HasPendingTasks()); |
EXPECT_EQ(0, immediate_do_work_posted_count()); |
EXPECT_EQ(base::TimeDelta::FromSeconds(1), |
test_task_runner_->DelayToNextTaskTime()); |
EXPECT_EQ(lazy_now.Now() + base::TimeDelta::FromSeconds(1), |
- next_delayed_do_work_time()); |
- |
- PostDoWorkContinuation(NextTaskDelay(base::TimeDelta::FromSeconds(10), |
- runners_[0]->GetTimeDomain()), |
- &lazy_now); |
+ next_scheduled_delayed_do_work_time()); |
+ |
+ PostDoWorkContinuation(base::TimeDelta::FromSeconds(10), &lazy_now); |
// This should have resulted in the previous task getting canceled and a new |
// one getting posted. |
@@ -2642,7 +2480,7 @@ |
test_task_runner_->DelayToNextTaskTime()); |
EXPECT_EQ(0, immediate_do_work_posted_count()); |
EXPECT_EQ(lazy_now.Now() + base::TimeDelta::FromSeconds(10), |
- next_delayed_do_work_time()); |
+ next_scheduled_delayed_do_work_time()); |
} |
TEST_F(TaskQueueManagerTest, |
@@ -2650,20 +2488,18 @@ |
Initialize(1u); |
LazyNow lazy_now(now_src_.get()); |
- PostDoWorkContinuation(NextTaskDelay(base::TimeDelta::FromSeconds(1), |
- runners_[0]->GetTimeDomain()), |
- &lazy_now); |
+ PostDoWorkContinuation(base::TimeDelta::FromSeconds(1), &lazy_now); |
now_src_->Advance(base::TimeDelta::FromSeconds(1)); |
lazy_now = LazyNow(now_src_.get()); |
- PostDoWorkContinuation(NextTaskDelay(), &lazy_now); |
+ PostDoWorkContinuation(base::TimeDelta(), &lazy_now); |
// Because the delayed DoWork was pending we don't expect an immediate DoWork |
// to get posted. |
EXPECT_EQ(1u, test_task_runner_->NumPendingTasks()); |
EXPECT_EQ(base::TimeDelta(), test_task_runner_->DelayToNextTaskTime()); |
EXPECT_EQ(0, immediate_do_work_posted_count()); |
- EXPECT_EQ(lazy_now.Now(), next_delayed_do_work_time()); |
+ EXPECT_EQ(lazy_now.Now(), next_scheduled_delayed_do_work_time()); |
} |
namespace { |
@@ -2764,98 +2600,5 @@ |
EXPECT_TRUE(runners_[0]->CouldTaskRun(enqueue_order)); |
} |
-TEST_F(TaskQueueManagerTest, DelayedDoWorkNotPostedForDisabledQueue) { |
- Initialize(1u); |
- |
- runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask), |
- base::TimeDelta::FromMilliseconds(1)); |
- ASSERT_TRUE(test_task_runner_->HasPendingTasks()); |
- EXPECT_EQ(base::TimeDelta::FromMilliseconds(1), |
- test_task_runner_->DelayToNextTaskTime()); |
- |
- std::unique_ptr<TaskQueue::QueueEnabledVoter> voter = |
- runners_[0]->CreateQueueEnabledVoter(); |
- voter->SetQueueEnabled(false); |
- |
- EXPECT_TRUE(test_task_runner_->HasPendingTasks()); |
- test_task_runner_->RemoveCancelledTasks(); |
- EXPECT_FALSE(test_task_runner_->HasPendingTasks()); |
- |
- voter->SetQueueEnabled(true); |
- ASSERT_TRUE(test_task_runner_->HasPendingTasks()); |
- EXPECT_EQ(base::TimeDelta::FromMilliseconds(1), |
- test_task_runner_->DelayToNextTaskTime()); |
-} |
- |
-TEST_F(TaskQueueManagerTest, DisablingQueuesChangesDelayTillNextDoWork) { |
- Initialize(3u); |
- runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask), |
- base::TimeDelta::FromMilliseconds(1)); |
- runners_[1]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask), |
- base::TimeDelta::FromMilliseconds(10)); |
- runners_[2]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask), |
- base::TimeDelta::FromMilliseconds(100)); |
- |
- std::unique_ptr<TaskQueue::QueueEnabledVoter> voter0 = |
- runners_[0]->CreateQueueEnabledVoter(); |
- std::unique_ptr<TaskQueue::QueueEnabledVoter> voter1 = |
- runners_[1]->CreateQueueEnabledVoter(); |
- std::unique_ptr<TaskQueue::QueueEnabledVoter> voter2 = |
- runners_[2]->CreateQueueEnabledVoter(); |
- |
- ASSERT_TRUE(test_task_runner_->HasPendingTasks()); |
- EXPECT_EQ(base::TimeDelta::FromMilliseconds(1), |
- test_task_runner_->DelayToNextTaskTime()); |
- |
- voter0->SetQueueEnabled(false); |
- test_task_runner_->RemoveCancelledTasks(); |
- ASSERT_TRUE(test_task_runner_->HasPendingTasks()); |
- EXPECT_EQ(base::TimeDelta::FromMilliseconds(10), |
- test_task_runner_->DelayToNextTaskTime()); |
- |
- voter1->SetQueueEnabled(false); |
- test_task_runner_->RemoveCancelledTasks(); |
- ASSERT_TRUE(test_task_runner_->HasPendingTasks()); |
- EXPECT_EQ(base::TimeDelta::FromMilliseconds(100), |
- test_task_runner_->DelayToNextTaskTime()); |
- |
- voter2->SetQueueEnabled(false); |
- test_task_runner_->RemoveCancelledTasks(); |
- EXPECT_FALSE(test_task_runner_->HasPendingTasks()); |
-} |
- |
-TEST_F(TaskQueueManagerTest, GetNextScheduledWakeUp) { |
- Initialize(1u); |
- |
- EXPECT_EQ(base::nullopt, runners_[0]->GetNextScheduledWakeUp()); |
- |
- base::TimeTicks start_time = manager_->delegate()->NowTicks(); |
- base::TimeDelta delay1 = base::TimeDelta::FromMilliseconds(10); |
- base::TimeDelta delay2 = base::TimeDelta::FromMilliseconds(2); |
- |
- runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask), delay1); |
- EXPECT_EQ(start_time + delay1, runners_[0]->GetNextScheduledWakeUp()); |
- |
- runners_[0]->PostDelayedTask(FROM_HERE, base::Bind(&NopTask), delay2); |
- EXPECT_EQ(start_time + delay2, runners_[0]->GetNextScheduledWakeUp()); |
- |
- // We don't have wakeups scheduled for disabled queues. |
- std::unique_ptr<TaskQueue::QueueEnabledVoter> voter = |
- runners_[0]->CreateQueueEnabledVoter(); |
- voter->SetQueueEnabled(false); |
- EXPECT_EQ(base::nullopt, runners_[0]->GetNextScheduledWakeUp()); |
- |
- voter->SetQueueEnabled(true); |
- EXPECT_EQ(start_time + delay2, runners_[0]->GetNextScheduledWakeUp()); |
- |
- // Immediate tasks shouldn't make any difference. |
- runners_[0]->PostTask(FROM_HERE, base::Bind(&NopTask)); |
- EXPECT_EQ(start_time + delay2, runners_[0]->GetNextScheduledWakeUp()); |
- |
- // Neither should fences. |
- runners_[0]->InsertFence(TaskQueue::InsertFencePosition::BEGINNING_OF_TIME); |
- EXPECT_EQ(start_time + delay2, runners_[0]->GetNextScheduledWakeUp()); |
-} |
- |
} // namespace scheduler |
} // namespace blink |