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

Unified Diff: third_party/WebKit/Source/platform/scheduler/base/task_queue_manager_unittest.cc

Issue 2319053004: [Reland] Make canceling Timers fast. (Closed)
Patch Set: Rebased Created 4 years, 3 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 side-by-side diff with in-line comments
Download patch
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 b8d18c42ef451d713ec8544ffa654125901e3634..a7883ec293b89ce99d9fe7deef71c336a4e18353 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
@@ -1763,380 +1763,6 @@ TEST_F(TaskQueueManagerTest, CurrentlyExecutingTaskQueue_NestedLoop) {
EXPECT_EQ(nullptr, manager_->currently_executing_task_queue());
}
-TEST_F(TaskQueueManagerTest, NullHandleConvertsToFalse) {
- EXPECT_FALSE(TaskQueue::TaskHandle());
-}
-
-TEST_F(TaskQueueManagerTest, PostCancellableTask) {
- Initialize(1u);
-
- std::vector<EnqueueOrder> run_order;
- runners_[0]->PostCancellableDelayedTask(
- FROM_HERE, base::Bind(&TestTask, 1, &run_order), base::TimeDelta());
-
- test_task_runner_->RunUntilIdle();
- EXPECT_THAT(run_order, ElementsAre(1));
-}
-
-TEST_F(TaskQueueManagerTest, PostCancellableTask_AndCancel_OnIncomingQueue) {
- Initialize(1u);
-
- std::vector<EnqueueOrder> run_order;
- TaskQueue::TaskHandle handle = runners_[0]->PostCancellableDelayedTask(
- FROM_HERE, base::Bind(&TestTask, 1, &run_order), base::TimeDelta());
- EXPECT_TRUE(handle);
-
- EXPECT_TRUE(runners_[0]->IsTaskPending(handle));
- EXPECT_TRUE(runners_[0]->CancelTask(handle));
- EXPECT_FALSE(runners_[0]->IsTaskPending(handle));
- test_task_runner_->RunUntilIdle();
- EXPECT_TRUE(run_order.empty());
-}
-
-TEST_F(TaskQueueManagerTest, PostThreeTasks_AndCancelOne_OnIncomingQueue) {
- Initialize(1u);
-
- std::vector<EnqueueOrder> run_order;
- runners_[0]->PostCancellableDelayedTask(
- FROM_HERE, base::Bind(&TestTask, 1, &run_order), base::TimeDelta());
-
- TaskQueue::TaskHandle handle = runners_[0]->PostCancellableDelayedTask(
- FROM_HERE, base::Bind(&TestTask, 2, &run_order), base::TimeDelta());
- EXPECT_TRUE(handle);
-
- runners_[0]->PostCancellableDelayedTask(
- FROM_HERE, base::Bind(&TestTask, 3, &run_order), base::TimeDelta());
-
- EXPECT_TRUE(runners_[0]->IsTaskPending(handle));
- EXPECT_TRUE(runners_[0]->CancelTask(handle));
- EXPECT_FALSE(runners_[0]->IsTaskPending(handle));
- test_task_runner_->RunUntilIdle();
- EXPECT_THAT(run_order, ElementsAre(1, 3));
-}
-
-TEST_F(TaskQueueManagerTest, PostCancellableTask_AndCancel_OnWorkQueue) {
- Initialize(1u);
-
- std::vector<EnqueueOrder> run_order;
- TaskQueue::TaskHandle handle = runners_[0]->PostCancellableDelayedTask(
- FROM_HERE, base::Bind(&TestTask, 1, &run_order), base::TimeDelta());
- EXPECT_TRUE(handle);
-
- // Force the task onto the work queue.
- UpdateWorkQueues(LazyNow(now_src_.get()));
-
- EXPECT_TRUE(runners_[0]->IsTaskPending(handle));
- EXPECT_TRUE(runners_[0]->CancelTask(handle));
- EXPECT_FALSE(runners_[0]->IsTaskPending(handle));
- test_task_runner_->RunUntilIdle();
- EXPECT_TRUE(run_order.empty());
-}
-
-TEST_F(TaskQueueManagerTest, PostThreeTasks_AndCancelOne_OnWorkQueue) {
- Initialize(1u);
-
- std::vector<EnqueueOrder> run_order;
- runners_[0]->PostCancellableDelayedTask(
- FROM_HERE, base::Bind(&TestTask, 1, &run_order), base::TimeDelta());
-
- TaskQueue::TaskHandle handle = runners_[0]->PostCancellableDelayedTask(
- FROM_HERE, base::Bind(&TestTask, 2, &run_order), base::TimeDelta());
- EXPECT_TRUE(handle);
-
- runners_[0]->PostCancellableDelayedTask(
- FROM_HERE, base::Bind(&TestTask, 3, &run_order), base::TimeDelta());
-
- // Force the tasks onto the work queue.
- UpdateWorkQueues(LazyNow(now_src_.get()));
-
- EXPECT_TRUE(runners_[0]->IsTaskPending(handle));
- EXPECT_TRUE(runners_[0]->CancelTask(handle));
- EXPECT_FALSE(runners_[0]->IsTaskPending(handle));
- test_task_runner_->RunUntilIdle();
- EXPECT_THAT(run_order, ElementsAre(1, 3));
-}
-
-TEST_F(TaskQueueManagerTest, PostThreeTasksOnDifferentQueues_AndCancelOne) {
- Initialize(3u);
-
- std::vector<EnqueueOrder> run_order;
- runners_[0]->PostCancellableDelayedTask(
- FROM_HERE, base::Bind(&TestTask, 1, &run_order), base::TimeDelta());
-
- TaskQueue::TaskHandle handle = runners_[1]->PostCancellableDelayedTask(
- FROM_HERE, base::Bind(&TestTask, 2, &run_order), base::TimeDelta());
- EXPECT_TRUE(handle);
-
- runners_[2]->PostCancellableDelayedTask(
- FROM_HERE, base::Bind(&TestTask, 3, &run_order), base::TimeDelta());
-
- // Force the tasks onto the work queues.
- UpdateWorkQueues(LazyNow(now_src_.get()));
-
- EXPECT_TRUE(runners_[1]->IsTaskPending(handle));
- EXPECT_TRUE(runners_[1]->CancelTask(handle));
- EXPECT_FALSE(runners_[1]->IsTaskPending(handle));
- test_task_runner_->RunUntilIdle();
- EXPECT_THAT(run_order, ElementsAre(1, 3));
-}
-
-TEST_F(TaskQueueManagerTest, TryToCancelTaskAfterItsRun) {
- Initialize(1u);
-
- std::vector<EnqueueOrder> run_order;
- TaskQueue::TaskHandle handle = runners_[0]->PostCancellableDelayedTask(
- FROM_HERE, base::Bind(&TestTask, 1, &run_order), base::TimeDelta());
- EXPECT_TRUE(handle);
-
- EXPECT_TRUE(runners_[0]->IsTaskPending(handle));
- test_task_runner_->RunUntilIdle();
- EXPECT_FALSE(runners_[0]->IsTaskPending(handle));
- EXPECT_THAT(run_order, ElementsAre(1));
-
- EXPECT_FALSE(runners_[0]->CancelTask(handle));
-}
-
-TEST_F(TaskQueueManagerTest, PostCancellableDelayedTask) {
- Initialize(1u);
-
- std::vector<EnqueueOrder> run_order;
- runners_[0]->PostCancellableDelayedTask(FROM_HERE,
- base::Bind(&TestTask, 1, &run_order),
- base::TimeDelta::FromMilliseconds(1));
-
- test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(1));
- EXPECT_THAT(run_order, ElementsAre(1));
-}
-
-TEST_F(TaskQueueManagerTest,
- PostCancellableDelayedTask_AndCancel_OnIncomingQueue) {
- Initialize(1u);
-
- std::vector<EnqueueOrder> run_order;
- TaskQueue::TaskHandle handle = runners_[0]->PostCancellableDelayedTask(
- FROM_HERE, base::Bind(&TestTask, 1, &run_order),
- base::TimeDelta::FromMilliseconds(1));
- EXPECT_TRUE(handle);
-
- EXPECT_TRUE(runners_[0]->IsTaskPending(handle));
- EXPECT_TRUE(runners_[0]->CancelTask(handle));
- EXPECT_FALSE(runners_[0]->IsTaskPending(handle));
- test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(1));
- EXPECT_TRUE(run_order.empty());
-}
-
-TEST_F(TaskQueueManagerTest,
- PostThreeDelayedTasks_AndCancelOne_OnIncomingQueue) {
- Initialize(1u);
-
- std::vector<EnqueueOrder> run_order;
- runners_[0]->PostCancellableDelayedTask(FROM_HERE,
- base::Bind(&TestTask, 1, &run_order),
- base::TimeDelta::FromMilliseconds(3));
-
- TaskQueue::TaskHandle handle = runners_[0]->PostCancellableDelayedTask(
- FROM_HERE, base::Bind(&TestTask, 2, &run_order),
- base::TimeDelta::FromMilliseconds(2));
- EXPECT_TRUE(handle);
-
- runners_[0]->PostCancellableDelayedTask(FROM_HERE,
- base::Bind(&TestTask, 3, &run_order),
- base::TimeDelta::FromMilliseconds(1));
-
- EXPECT_TRUE(runners_[0]->IsTaskPending(handle));
- EXPECT_TRUE(runners_[0]->CancelTask(handle));
- EXPECT_FALSE(runners_[0]->IsTaskPending(handle));
- test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(3));
- EXPECT_THAT(run_order, ElementsAre(3, 1));
-}
-
-TEST_F(TaskQueueManagerTest, DelayedTaskCancellationRemovesWakeup) {
- Initialize(1u);
-
- std::vector<EnqueueOrder> run_order;
- TaskQueue::TaskHandle handle = runners_[0]->PostCancellableDelayedTask(
- FROM_HERE, base::Bind(&TestTask, 1, &run_order),
- base::TimeDelta::FromMilliseconds(1));
- EXPECT_TRUE(handle);
-
- EXPECT_TRUE(runners_[0]->CancelTask(handle));
-
- base::TimeTicks dummy;
- EXPECT_FALSE(manager_->real_time_domain()->NextScheduledRunTime(&dummy));
-}
-
-TEST_F(TaskQueueManagerTest, DelayedTaskCancellationDoesntRemoveWakeupCaseA) {
- Initialize(1u);
-
- base::TimeTicks start_time = manager_->delegate()->NowTicks();
-
- std::vector<EnqueueOrder> run_order;
- runners_[0]->PostCancellableDelayedTask(FROM_HERE,
- base::Bind(&TestTask, 1, &run_order),
- base::TimeDelta::FromMilliseconds(1));
-
- TaskQueue::TaskHandle handle = runners_[0]->PostCancellableDelayedTask(
- FROM_HERE, base::Bind(&TestTask, 2, &run_order),
- base::TimeDelta::FromMilliseconds(1));
- EXPECT_TRUE(handle);
-
- EXPECT_TRUE(runners_[0]->CancelTask(handle));
-
- base::TimeTicks run_time;
- EXPECT_TRUE(manager_->real_time_domain()->NextScheduledRunTime(&run_time));
- EXPECT_EQ(run_time, start_time + base::TimeDelta::FromMilliseconds(1));
-}
-
-TEST_F(TaskQueueManagerTest, DelayedTaskCancellationDoesntRemoveWakeupCaseB) {
- Initialize(1u);
-
- base::TimeTicks start_time = manager_->delegate()->NowTicks();
-
- std::vector<EnqueueOrder> run_order;
- TaskQueue::TaskHandle handle = runners_[0]->PostCancellableDelayedTask(
- FROM_HERE, base::Bind(&TestTask, 1, &run_order),
- base::TimeDelta::FromMilliseconds(1));
- EXPECT_TRUE(handle);
-
- runners_[0]->PostCancellableDelayedTask(FROM_HERE,
- base::Bind(&TestTask, 2, &run_order),
- base::TimeDelta::FromMilliseconds(1));
-
- EXPECT_TRUE(runners_[0]->CancelTask(handle));
-
- base::TimeTicks run_time;
- EXPECT_TRUE(manager_->real_time_domain()->NextScheduledRunTime(&run_time));
- EXPECT_EQ(run_time, start_time + base::TimeDelta::FromMilliseconds(1));
-}
-
-TEST_F(TaskQueueManagerTest, DelayedTaskCancellationRemovesMiddleWakeup) {
- Initialize(1u);
-
- base::TimeTicks start_time = manager_->delegate()->NowTicks();
-
- std::vector<EnqueueOrder> run_order;
- // Note the TimeDomain doesn't attempt to clear the next wakeup.
- runners_[0]->PostCancellableDelayedTask(FROM_HERE,
- base::Bind(&TestTask, 1, &run_order),
- base::TimeDelta::FromMilliseconds(1));
-
- TaskQueue::TaskHandle handle = runners_[0]->PostCancellableDelayedTask(
- FROM_HERE, base::Bind(&TestTask, 2, &run_order),
- base::TimeDelta::FromMilliseconds(2));
- EXPECT_TRUE(handle);
-
- runners_[0]->PostCancellableDelayedTask(
- FROM_HERE, base::Bind(&TestTask, 1, &run_order),
- base::TimeDelta::FromMilliseconds(10));
-
- // But it should clear subsequent ones.
- EXPECT_TRUE(runners_[0]->CancelTask(handle));
- test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(1));
-
- base::TimeTicks run_time;
- EXPECT_TRUE(manager_->real_time_domain()->NextScheduledRunTime(&run_time));
- EXPECT_EQ(run_time, start_time + base::TimeDelta::FromMilliseconds(10));
-}
-
-TEST_F(TaskQueueManagerTest, PostDelayedCancellableTask_AndCancel_OnWorkQueue) {
- Initialize(1u);
-
- std::vector<EnqueueOrder> run_order;
- TaskQueue::TaskHandle handle = runners_[0]->PostCancellableDelayedTask(
- FROM_HERE, base::Bind(&TestTask, 1, &run_order),
- base::TimeDelta::FromMilliseconds(1));
- EXPECT_TRUE(handle);
-
- // Force the task onto the work queue.
- now_src_->Advance(base::TimeDelta::FromMilliseconds(10));
- UpdateWorkQueues(LazyNow(now_src_.get()));
-
- EXPECT_TRUE(runners_[0]->IsTaskPending(handle));
- EXPECT_TRUE(runners_[0]->CancelTask(handle));
- EXPECT_FALSE(runners_[0]->IsTaskPending(handle));
- test_task_runner_->RunUntilIdle();
- EXPECT_TRUE(run_order.empty());
-}
-
-TEST_F(TaskQueueManagerTest, PostThreeDelayedTasks_AndCancelOne_OnWorkQueue) {
- Initialize(1u);
-
- std::vector<EnqueueOrder> run_order;
- runners_[0]->PostCancellableDelayedTask(FROM_HERE,
- base::Bind(&TestTask, 1, &run_order),
- base::TimeDelta::FromMilliseconds(3));
-
- TaskQueue::TaskHandle handle = runners_[0]->PostCancellableDelayedTask(
- FROM_HERE, base::Bind(&TestTask, 2, &run_order),
- base::TimeDelta::FromMilliseconds(2));
- EXPECT_TRUE(handle);
-
- runners_[0]->PostCancellableDelayedTask(FROM_HERE,
- base::Bind(&TestTask, 3, &run_order),
- base::TimeDelta::FromMilliseconds(1));
-
- // Force the tasks onto the work queue.
- now_src_->Advance(base::TimeDelta::FromMilliseconds(10));
- UpdateWorkQueues(LazyNow(now_src_.get()));
-
- EXPECT_TRUE(runners_[0]->IsTaskPending(handle));
- EXPECT_TRUE(runners_[0]->CancelTask(handle));
- EXPECT_FALSE(runners_[0]->IsTaskPending(handle));
- test_task_runner_->RunUntilIdle();
- EXPECT_THAT(run_order, ElementsAre(3, 1));
-}
-
-TEST_F(TaskQueueManagerTest, BulkPostingDelayedTasks_AndCancelOnWorkQueue) {
- Initialize(1u);
-
- const size_t num_iterations = 1000;
- std::vector<EnqueueOrder> run_order;
- std::vector<TaskQueue::TaskHandle> handles(num_iterations);
-
- for (size_t i = 0; i < num_iterations; i++) {
- handles[i] = runners_[0]->PostCancellableDelayedTask(
- FROM_HERE, base::Bind(&TestTask, i, &run_order),
- base::TimeDelta::FromMilliseconds(1000));
-
- if (i % 4 == 0)
- now_src_->Advance(base::TimeDelta::FromMilliseconds(1));
- }
-
- // Force the tasks onto the work queue.
- now_src_->Advance(base::TimeDelta::FromMilliseconds(2000));
- UpdateWorkQueues(LazyNow(now_src_.get()));
-
- // Cancel three timers.
- EXPECT_TRUE(runners_[0]->CancelTask(handles[123]));
- EXPECT_TRUE(runners_[0]->CancelTask(handles[456]));
- EXPECT_TRUE(runners_[0]->CancelTask(handles[789]));
-
- test_task_runner_->RunUntilIdle();
-
- // Make sure all tasks bar the canceled ones ran.
- EXPECT_EQ(num_iterations - 3, run_order.size());
- EXPECT_THAT(run_order, Not(Contains(123)));
- EXPECT_THAT(run_order, Not(Contains(456)));
- EXPECT_THAT(run_order, Not(Contains(789)));
-}
-
-TEST_F(TaskQueueManagerTest, TryToCancelDelayedTaskAfterItsRun) {
- Initialize(1u);
-
- std::vector<EnqueueOrder> run_order;
- TaskQueue::TaskHandle handle = runners_[0]->PostCancellableDelayedTask(
- FROM_HERE, base::Bind(&TestTask, 1, &run_order),
- base::TimeDelta::FromMilliseconds(1));
- EXPECT_TRUE(handle);
-
- EXPECT_TRUE(runners_[0]->IsTaskPending(handle));
- test_task_runner_->RunForPeriod(base::TimeDelta::FromMilliseconds(2));
- EXPECT_FALSE(runners_[0]->IsTaskPending(handle));
- EXPECT_THAT(run_order, ElementsAre(1));
-
- EXPECT_FALSE(runners_[0]->CancelTask(handle));
-}
-
void OnTraceDataCollected(base::Closure quit_closure,
base::trace_event::TraceResultBuffer* buffer,
const scoped_refptr<base::RefCountedString>& json,

Powered by Google App Engine
This is Rietveld 408576698