| Index: cc/scheduler/scheduler_unittest.cc
|
| diff --git a/cc/scheduler/scheduler_unittest.cc b/cc/scheduler/scheduler_unittest.cc
|
| index ac52271ec13c4a6b59582002fe110e45b6bb73ae..c51d12e7bee8e73634bcdb4f5e55565914576866 100644
|
| --- a/cc/scheduler/scheduler_unittest.cc
|
| +++ b/cc/scheduler/scheduler_unittest.cc
|
| @@ -143,6 +143,10 @@ class FakeSchedulerClient : public SchedulerClient {
|
| void ScheduledActionPrepareTiles() override {
|
| PushAction("ScheduledActionPrepareTiles");
|
| }
|
| + void ScheduledActionInvalidateOutputSurface() override {
|
| + actions_.push_back("ScheduledActionInvalidateOutputSurface");
|
| + states_.push_back(scheduler_->AsValue());
|
| + }
|
| void DidAnticipatedDrawTimeChange(base::TimeTicks) override {
|
| if (log_anticipated_draw_time_change_)
|
| PushAction("DidAnticipatedDrawTimeChange");
|
| @@ -2347,5 +2351,116 @@ TEST_F(SchedulerTest, SwitchFrameSourceToThrottled) {
|
| EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client_, 0, 1);
|
| }
|
|
|
| +TEST(SchedulerTest, UsingSynchronousCompositor) {
|
| + FakeSchedulerClient client;
|
| + SchedulerSettings settings;
|
| + settings.using_synchronous_renderer_compositor = true;
|
| + settings.use_external_begin_frame_source = true;
|
| + settings.impl_side_painting = true;
|
| +
|
| + TestScheduler* scheduler = client.CreateScheduler(settings);
|
| +
|
| + scheduler->SetCanStart();
|
| + scheduler->SetVisible(true);
|
| + scheduler->SetCanDraw(true);
|
| +
|
| + EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client);
|
| + client.Reset();
|
| +
|
| + scheduler->DidCreateAndInitializeOutputSurface();
|
| + scheduler->SetNeedsCommit();
|
| +
|
| + EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
|
| + client.Reset();
|
| +
|
| + client.fake_external_begin_frame_source()->TestOnBeginFrame(
|
| + BeginFrameArgs::Create(BEGINFRAME_FROM_HERE, client.now_src()->Now(),
|
| + base::TimeTicks(),
|
| + BeginFrameArgs::DefaultInterval(),
|
| + BeginFrameArgs::SYNCHRONOUS_ANIMATE));
|
| +
|
| + EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| + EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
|
| + EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
|
| + client.Reset();
|
| +
|
| + scheduler->NotifyBeginMainFrameStarted();
|
| + EXPECT_NO_ACTION(client);
|
| +
|
| + scheduler->NotifyReadyToCommit();
|
| + EXPECT_SINGLE_ACTION("ScheduledActionCommit", client);
|
| + client.Reset();
|
| +
|
| + scheduler->NotifyReadyToActivate();
|
| + EXPECT_SINGLE_ACTION("ScheduledActionActivateSyncTree", client);
|
| + client.Reset();
|
| +
|
| + // Next VSync.
|
| + client.now_src()->AdvanceNow(BeginFrameArgs::DefaultInterval());
|
| + client.fake_external_begin_frame_source()->TestOnBeginFrame(
|
| + BeginFrameArgs::Create(BEGINFRAME_FROM_HERE, client.now_src()->Now(),
|
| + base::TimeTicks(),
|
| + BeginFrameArgs::DefaultInterval(),
|
| + BeginFrameArgs::SYNCHRONOUS_ANIMATE));
|
| +
|
| + EXPECT_ACTION("WillBeginImplFrame", client, 0, 3);
|
| + EXPECT_ACTION("ScheduledActionAnimate", client, 1, 3);
|
| + EXPECT_ACTION("ScheduledActionInvalidateOutputSurface", client, 2, 3);
|
| + EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
|
| + client.Reset();
|
| +
|
| + // Android onDraw.
|
| + client.fake_external_begin_frame_source()->TestOnBeginFrame(
|
| + BeginFrameArgs::Create(
|
| + BEGINFRAME_FROM_HERE, client.now_src()->Now(), base::TimeTicks(),
|
| + BeginFrameArgs::DefaultInterval(), BeginFrameArgs::SYNCHRONOUS_DRAW));
|
| + EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| + EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 1, 2);
|
| + EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
|
| + client.Reset();
|
| +
|
| + // Next VSync.
|
| + client.now_src()->AdvanceNow(BeginFrameArgs::DefaultInterval());
|
| + client.fake_external_begin_frame_source()->TestOnBeginFrame(
|
| + BeginFrameArgs::Create(BEGINFRAME_FROM_HERE, client.now_src()->Now(),
|
| + base::TimeTicks(),
|
| + BeginFrameArgs::DefaultInterval(),
|
| + BeginFrameArgs::SYNCHRONOUS_ANIMATE));
|
| +
|
| + EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| + EXPECT_ACTION("SetNeedsBeginFrames(false)", client, 1, 2);
|
| + EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
|
| + client.Reset();
|
| +
|
| + // Steady-state.
|
| + // Static page. Scrolling initiated by webview.
|
| + scheduler->SetNeedsAnimate();
|
| + // Ask for BeginFrames.
|
| + EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
|
| + client.Reset();
|
| +
|
| + client.now_src()->AdvanceNow(BeginFrameArgs::DefaultInterval());
|
| + client.fake_external_begin_frame_source()->TestOnBeginFrame(
|
| + BeginFrameArgs::Create(BEGINFRAME_FROM_HERE, client.now_src()->Now(),
|
| + base::TimeTicks(),
|
| + BeginFrameArgs::DefaultInterval(),
|
| + BeginFrameArgs::SYNCHRONOUS_ANIMATE));
|
| + EXPECT_ACTION("WillBeginImplFrame", client, 0, 3);
|
| + EXPECT_ACTION("ScheduledActionAnimate", client, 1, 3);
|
| + EXPECT_ACTION("ScheduledActionInvalidateOutputSurface", client, 2, 3);
|
| + EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
|
| + client.Reset();
|
| +
|
| + // Android onDraw.
|
| + client.fake_external_begin_frame_source()->TestOnBeginFrame(
|
| + BeginFrameArgs::Create(
|
| + BEGINFRAME_FROM_HERE, client.now_src()->Now(), base::TimeTicks(),
|
| + BeginFrameArgs::DefaultInterval(), BeginFrameArgs::SYNCHRONOUS_DRAW));
|
| + EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| + EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 1, 2);
|
| + EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
|
| + client.Reset();
|
| +}
|
| +
|
| } // namespace
|
| } // namespace cc
|
|
|