Index: content/renderer/scheduler/renderer_scheduler_impl_unittest.cc |
diff --git a/content/renderer/scheduler/renderer_scheduler_impl_unittest.cc b/content/renderer/scheduler/renderer_scheduler_impl_unittest.cc |
index ee86c98794ccbc729318f260cac902b4edb8232b..0ba65958ecbedc2a577cbab519990cefa241b5cc 100644 |
--- a/content/renderer/scheduler/renderer_scheduler_impl_unittest.cc |
+++ b/content/renderer/scheduler/renderer_scheduler_impl_unittest.cc |
@@ -1246,4 +1246,61 @@ TEST_F(RendererSchedulerImplTest, TestLongIdlePeriodInTouchStartPolicy) { |
EXPECT_EQ(1, run_count); |
} |
+void TestCanExceedIdleDeadlineIfRequiredTask(RendererScheduler* scheduler, |
+ bool* can_exceed_idle_deadline_out, |
+ int* run_count, |
+ base::TimeTicks deadline) { |
+ *can_exceed_idle_deadline_out = scheduler->CanExceedIdleDeadlineIfRequired(); |
+ (*run_count)++; |
+} |
+ |
+TEST_F(RendererSchedulerImplTest, CanExceedIdleDeadlineIfRequired) { |
+ int run_count = 0; |
+ bool can_exceed_idle_deadline = false; |
+ |
+ // Should return false if not in an idle period. |
+ EXPECT_FALSE(scheduler_->CanExceedIdleDeadlineIfRequired()); |
+ |
+ // Should return false for short idle periods. |
+ idle_task_runner_->PostIdleTask( |
+ FROM_HERE, |
+ base::Bind(&TestCanExceedIdleDeadlineIfRequiredTask, scheduler_.get(), |
+ &can_exceed_idle_deadline, &run_count)); |
+ EnableIdleTasks(); |
+ RunUntilIdle(); |
+ EXPECT_EQ(1, run_count); |
+ EXPECT_FALSE(can_exceed_idle_deadline); |
+ |
+ // Should return false for a long idle period which is shortened due to a |
+ // pending delayed task. |
+ default_task_runner_->PostDelayedTask(FROM_HERE, base::Bind(&NullTask), |
+ base::TimeDelta::FromMilliseconds(10)); |
+ idle_task_runner_->PostIdleTask( |
+ FROM_HERE, |
+ base::Bind(&TestCanExceedIdleDeadlineIfRequiredTask, scheduler_.get(), |
+ &can_exceed_idle_deadline, &run_count)); |
+ scheduler_->BeginFrameNotExpectedSoon(); |
+ RunUntilIdle(); |
+ EXPECT_EQ(2, run_count); |
+ EXPECT_FALSE(can_exceed_idle_deadline); |
+ |
+ // Next long idle period will be for the maximum time, so |
+ // CanExceedIdleDeadlineIfRequired should return true. |
+ clock_->AdvanceNow(maximum_idle_period_duration()); |
+ idle_task_runner_->PostIdleTask( |
+ FROM_HERE, |
+ base::Bind(&TestCanExceedIdleDeadlineIfRequiredTask, scheduler_.get(), |
+ &can_exceed_idle_deadline, &run_count)); |
+ RunUntilIdle(); |
+ EXPECT_EQ(3, run_count); |
+ EXPECT_TRUE(can_exceed_idle_deadline); |
+ |
+ // Next long idle period will be for the maximum time, so |
+ // CanExceedIdleDeadlineIfRequired should return true. |
+ scheduler_->WillBeginFrame(cc::BeginFrameArgs::Create( |
+ BEGINFRAME_FROM_HERE, clock_->Now(), base::TimeTicks(), |
+ base::TimeDelta::FromMilliseconds(1000), cc::BeginFrameArgs::NORMAL)); |
+ EXPECT_FALSE(scheduler_->CanExceedIdleDeadlineIfRequired()); |
+} |
+ |
} // namespace content |