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 83a2476b3a7e19a4ebb3569b508c7c78177d9092..edd7ad475f170df66da22aafa4beb088ec11ff18 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 |
@@ -2075,5 +2075,35 @@ TEST_F(TaskQueueManagerTest, TimeDomainWakeUpOnlyCancelledIfAllUsesCancelled) { |
EXPECT_THAT(run_times, ElementsAre(start_time + delay3, start_time + delay4)); |
} |
+TEST_F(TaskQueueManagerTest, DeferredTaskTimeObservation) { |
+ InitializeWithRealMessageLoop(1u); |
+ now_src_->SetNowTicks(base::TimeTicks() + |
+ base::TimeDelta::FromMicroseconds(10000)); |
+ |
+ TestTaskTimeObserver test_task_time_observer; |
+ manager_->AddTaskTimeObserver(&test_task_time_observer); |
+ |
+ std::vector<EnqueueOrder> run_order; |
+ runners_[0]->PostTask(FROM_HERE, base::Bind(&TestTask, 1, &run_order)); |
+ |
+ std::vector<std::pair<base::Closure, bool>> tasks_to_post_from_nested_loop; |
+ tasks_to_post_from_nested_loop.push_back( |
+ std::make_pair(base::Bind(&TestTask, 1, &run_order), false)); |
+ |
+ runners_[0]->PostTask( |
+ FROM_HERE, base::Bind(&PostFromNestedRunloop, message_loop_.get(), |
+ base::RetainedRef(runners_[0]), |
+ base::Unretained(&tasks_to_post_from_nested_loop))); |
+ |
+ base::RunLoop().RunUntilIdle(); |
+ |
+ // The task is deferred once, and then actually executed, leading to a pair of |
+ // entries. |
+ EXPECT_THAT(test_task_time_observer.task_start_times(), |
+ ElementsAre(0.01, 0.01)); |
+ EXPECT_THAT(test_task_time_observer.task_end_times(), |
+ ElementsAre(0.01, 0.01)); |
+} |
+ |
} // namespace scheduler |
} // namespace blink |