Index: cc/scheduler/scheduler_unittest.cc |
diff --git a/cc/scheduler/scheduler_unittest.cc b/cc/scheduler/scheduler_unittest.cc |
index 5d58d2a0be6195501488bbecd5d298ba0c601331..e4ce6b3614d838a8924bd0672e689cb46d2bfd86 100644 |
--- a/cc/scheduler/scheduler_unittest.cc |
+++ b/cc/scheduler/scheduler_unittest.cc |
@@ -520,6 +520,76 @@ TEST_F(SchedulerTest, RequestCommit) { |
client_->Reset(); |
} |
+TEST_F(SchedulerTest, RequestCommitAfterSetDeferCommit) { |
+ scheduler_settings_.use_external_begin_frame_source = true; |
+ SetUpScheduler(true); |
+ |
+ scheduler_->SetCanStart(); |
+ scheduler_->SetVisible(true); |
+ scheduler_->SetCanDraw(true); |
+ |
+ scheduler_->SetDeferCommits(true); |
+ |
+ scheduler_->SetNeedsCommit(); |
+ EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client_); |
+ |
+ client_->Reset(); |
+ AdvanceFrame(); |
+ // BeginMainFrame is not sent during the defer commit is on. |
+ EXPECT_SINGLE_ACTION("WillBeginImplFrame", client_); |
+ |
+ client_->Reset(); |
+ 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(); |
+ AdvanceFrame(); |
+ EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2); |
+ EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client_, 1, 2); |
+ EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending()); |
+} |
+ |
+TEST_F(SchedulerTest, DeferCommitWithRedraw) { |
+ scheduler_settings_.use_external_begin_frame_source = true; |
+ SetUpScheduler(true); |
+ |
+ 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(); |
+ 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(); |
+ task_runner().RunPendingTasks(); // Run posted deadline. |
+ EXPECT_SINGLE_ACTION("ScheduledActionDrawAndSwapIfPossible", client_); |
+ EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending()); |
+ EXPECT_TRUE(client_->needs_begin_frames()); |
+ |
+ client_->Reset(); |
+ AdvanceFrame(); |
+ EXPECT_SINGLE_ACTION("WillBeginImplFrame", client_); |
+} |
+ |
TEST_F(SchedulerTest, RequestCommitAfterBeginMainFrameSent) { |
scheduler_settings_.use_external_begin_frame_source = true; |
SetUpScheduler(true); |