Index: cc/scheduler/scheduler_unittest.cc |
diff --git a/cc/scheduler/scheduler_unittest.cc b/cc/scheduler/scheduler_unittest.cc |
index 29e4c496f151304c2d58cf6a170edec8c2342358..621a6011ddaf11d2f921adb3382702d033df6ae9 100644 |
--- a/cc/scheduler/scheduler_unittest.cc |
+++ b/cc/scheduler/scheduler_unittest.cc |
@@ -493,6 +493,82 @@ TEST(SchedulerTest, RequestCommit) { |
client.Reset(); |
} |
+TEST(SchedulerTest, RequestCommitAfterSetDeferCommit) { |
+ FakeSchedulerClient client; |
+ SchedulerSettings scheduler_settings; |
+ scheduler_settings.use_external_begin_frame_source = true; |
+ |
+ CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings); |
+ |
+ scheduler->SetCanStart(); |
+ scheduler->SetVisible(true); |
+ scheduler->SetCanDraw(true); |
+ |
+ scheduler->SetDeferCommits(true); |
+ |
+ scheduler->SetNeedsCommit(); |
+ EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client); |
+ |
+ client.Reset(); |
+ client.AdvanceFrame(); |
+ // BeginMainFrame is not sent during the defer commit is on. |
+ EXPECT_SINGLE_ACTION("WillBeginImplFrame", client); |
+ |
+ client.Reset(); |
+ client.task_runner().RunPendingTasks(); // Run posted deadline. |
+ // There is no posted deadline. |
+ EXPECT_NO_ACTION(client); |
+ EXPECT_TRUE(client.needs_begin_frames()); |
+ |
+ client.Reset(); |
+ scheduler->SetDeferCommits(false); |
+ EXPECT_NO_ACTION(client); |
+ |
+ // Start new BeginMainFrame after defer commit is off. |
+ client.Reset(); |
+ client.AdvanceFrame(); |
+ EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); |
+ EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2); |
+ EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending()); |
+} |
+ |
+TEST(SchedulerTest, DeferCommitWithRedraw) { |
+ FakeSchedulerClient client; |
+ SchedulerSettings scheduler_settings; |
+ scheduler_settings.use_external_begin_frame_source = true; |
+ |
+ CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings); |
+ |
+ scheduler->SetCanStart(); |
+ scheduler->SetVisible(true); |
+ scheduler->SetCanDraw(true); |
+ |
+ scheduler->SetDeferCommits(true); |
+ |
+ scheduler->SetNeedsCommit(); |
+ EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client); |
+ |
+ client.Reset(); |
+ scheduler->SetNeedsRedraw(); |
+ EXPECT_NO_ACTION(client); |
+ |
+ client.Reset(); |
+ client.AdvanceFrame(); |
+ // BeginMainFrame is not sent during the defer commit is on. |
+ EXPECT_ACTION("WillBeginImplFrame", client, 0, 2); |
+ EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2); |
+ |
+ client.Reset(); |
+ client.task_runner().RunPendingTasks(); // Run posted deadline. |
+ EXPECT_SINGLE_ACTION("ScheduledActionDrawAndSwapIfPossible", client); |
+ EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending()); |
+ EXPECT_TRUE(client.needs_begin_frames()); |
+ |
+ client.Reset(); |
+ client.AdvanceFrame(); |
+ EXPECT_SINGLE_ACTION("WillBeginImplFrame", client); |
+} |
+ |
TEST(SchedulerTest, RequestCommitAfterBeginMainFrameSent) { |
FakeSchedulerClient client; |
SchedulerSettings scheduler_settings; |