Index: cc/scheduler/scheduler_unittest.cc |
diff --git a/cc/scheduler/scheduler_unittest.cc b/cc/scheduler/scheduler_unittest.cc |
index 77e1f2796f00939032c0a9b4a1ecdf60c2295753..42a23d423e630893a9718b4704b54774010db24f 100644 |
--- a/cc/scheduler/scheduler_unittest.cc |
+++ b/cc/scheduler/scheduler_unittest.cc |
@@ -3379,6 +3379,66 @@ TEST_F(SchedulerTest, SynchronousCompositorPrepareTilesOnDraw) { |
client_->Reset(); |
} |
+TEST_F(SchedulerTest, SynchronousCompositorSendBeginMainFrameWhileIdle) { |
+ scheduler_settings_.using_synchronous_renderer_compositor = true; |
+ scheduler_settings_.use_external_begin_frame_source = true; |
+ |
+ SetUpScheduler(true); |
+ |
+ scheduler_->SetNeedsRedraw(); |
+ EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client_); |
+ client_->Reset(); |
+ |
+ // Next vsync. |
+ EXPECT_SCOPED(AdvanceFrame()); |
+ EXPECT_ACTION("WillBeginImplFrame", client_, 0, 3); |
+ EXPECT_ACTION("ScheduledActionAnimate", client_, 1, 3); |
+ EXPECT_ACTION("ScheduledActionInvalidateOutputSurface", client_, 2, 3); |
+ client_->Reset(); |
+ |
+ // Android onDraw. |
+ scheduler_->SetNeedsRedraw(); |
+ scheduler_->OnDrawForOutputSurface(); |
+ EXPECT_SINGLE_ACTION("ScheduledActionDrawAndSwapIfPossible", client_); |
+ EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending()); |
+ EXPECT_FALSE(scheduler_->PrepareTilesPending()); |
+ client_->Reset(); |
+ |
+ // Simulate SetNeedsCommit due to input event. |
+ scheduler_->SetNeedsCommit(); |
+ EXPECT_SINGLE_ACTION("ScheduledActionSendBeginMainFrame", client_); |
+ client_->Reset(); |
+ |
+ scheduler_->NotifyBeginMainFrameStarted(); |
+ scheduler_->NotifyReadyToCommit(); |
+ EXPECT_SINGLE_ACTION("ScheduledActionCommit", client_); |
+ client_->Reset(); |
+ |
+ scheduler_->NotifyReadyToActivate(); |
+ EXPECT_SINGLE_ACTION("ScheduledActionActivateSyncTree", client_); |
+ client_->Reset(); |
+ |
+ // Next vsync. |
+ EXPECT_SCOPED(AdvanceFrame()); |
+ EXPECT_ACTION("WillBeginImplFrame", client_, 0, 3); |
+ EXPECT_ACTION("ScheduledActionAnimate", client_, 1, 3); |
+ EXPECT_ACTION("ScheduledActionInvalidateOutputSurface", client_, 2, 3); |
+ client_->Reset(); |
+ |
+ // Android onDraw. |
+ scheduler_->SetNeedsRedraw(); |
+ scheduler_->OnDrawForOutputSurface(); |
+ EXPECT_SINGLE_ACTION("ScheduledActionDrawAndSwapIfPossible", client_); |
+ EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending()); |
+ EXPECT_FALSE(scheduler_->PrepareTilesPending()); |
+ client_->Reset(); |
+ |
+ // Simulate SetNeedsCommit due to input event. |
+ scheduler_->SetNeedsCommit(); |
+ EXPECT_SINGLE_ACTION("ScheduledActionSendBeginMainFrame", client_); |
+ client_->Reset(); |
+} |
+ |
TEST_F(SchedulerTest, AuthoritativeVSyncInterval) { |
SetUpScheduler(true); |
base::TimeDelta initial_interval = scheduler_->BeginImplFrameInterval(); |