| Index: cc/scheduler/scheduler_unittest.cc
|
| diff --git a/cc/scheduler/scheduler_unittest.cc b/cc/scheduler/scheduler_unittest.cc
|
| index 071fa58a066aea14ff4c3158d3ab47dac747b187..1af601de05fefd5bb940902d6dadef07f298f246 100644
|
| --- a/cc/scheduler/scheduler_unittest.cc
|
| +++ b/cc/scheduler/scheduler_unittest.cc
|
| @@ -40,7 +40,11 @@ void InitializeOutputSurfaceAndFirstCommit(Scheduler* scheduler,
|
|
|
| class FakeSchedulerClient : public SchedulerClient {
|
| public:
|
| - FakeSchedulerClient() : needs_begin_frame_(false), automatic_swap_ack_(true) {
|
| + FakeSchedulerClient()
|
| + : needs_begin_frame_(false),
|
| + automatic_swap_ack_(true),
|
| + swap_contains_incomplete_tile_(false),
|
| + redraw_will_happen_if_update_visible_tiles_happens_(false) {
|
| Reset();
|
| }
|
|
|
| @@ -82,6 +86,10 @@ class FakeSchedulerClient : public SchedulerClient {
|
| return -1;
|
| }
|
|
|
| + void SetSwapContainsIncompleteTile(bool contain) {
|
| + swap_contains_incomplete_tile_ = contain;
|
| + }
|
| +
|
| bool HasAction(const char* action) const {
|
| return ActionIndex(action) >= 0;
|
| }
|
| @@ -95,7 +103,9 @@ class FakeSchedulerClient : public SchedulerClient {
|
| void SetAutomaticSwapAck(bool automatic_swap_ack) {
|
| automatic_swap_ack_ = automatic_swap_ack;
|
| }
|
| -
|
| + void SetRedrawWillHappenIfUpdateVisibleTilesHappens(bool redraw) {
|
| + redraw_will_happen_if_update_visible_tiles_happens_ = redraw;
|
| + }
|
| // SchedulerClient implementation.
|
| virtual void SetNeedsBeginFrame(bool enable) OVERRIDE {
|
| actions_.push_back("SetNeedsBeginFrame");
|
| @@ -124,6 +134,13 @@ class FakeSchedulerClient : public SchedulerClient {
|
| draw_will_happen_ && swap_will_happen_if_draw_happens_;
|
| if (swap_will_happen) {
|
| scheduler_->DidSwapBuffers();
|
| + if (swap_contains_incomplete_tile_) {
|
| + scheduler_->SetSwapUsedIncompleteTile(true);
|
| + swap_contains_incomplete_tile_ = false;
|
| + } else {
|
| + scheduler_->SetSwapUsedIncompleteTile(false);
|
| + }
|
| +
|
| if (automatic_swap_ack_)
|
| scheduler_->DidSwapBuffersComplete();
|
| }
|
| @@ -141,6 +158,8 @@ class FakeSchedulerClient : public SchedulerClient {
|
| virtual void ScheduledActionUpdateVisibleTiles() OVERRIDE {
|
| actions_.push_back("ScheduledActionUpdateVisibleTiles");
|
| states_.push_back(scheduler_->AsValue().release());
|
| + if (redraw_will_happen_if_update_visible_tiles_happens_)
|
| + scheduler_->SetNeedsRedraw();
|
| }
|
| virtual void ScheduledActionActivatePendingTree() OVERRIDE {
|
| actions_.push_back("ScheduledActionActivatePendingTree");
|
| @@ -177,6 +196,8 @@ class FakeSchedulerClient : public SchedulerClient {
|
| bool automatic_swap_ack_;
|
| int num_draws_;
|
| bool log_anticipated_draw_time_change_;
|
| + bool swap_contains_incomplete_tile_;
|
| + bool redraw_will_happen_if_update_visible_tiles_happens_;
|
| base::TimeTicks posted_begin_impl_frame_deadline_;
|
| std::vector<const char*> actions_;
|
| ScopedVector<base::Value> states_;
|
| @@ -194,6 +215,8 @@ void InitializeOutputSurfaceAndFirstCommit(Scheduler* scheduler,
|
| scheduler->SetNeedsCommit();
|
| scheduler->NotifyBeginMainFrameStarted();
|
| scheduler->NotifyReadyToCommit();
|
| + if (scheduler->settings().impl_side_painting)
|
| + scheduler->NotifyReadyToActivate();
|
| // Go through the motions to draw the commit.
|
| if (client_initiates_begin_frame)
|
| scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| @@ -875,6 +898,58 @@ TEST(SchedulerTest, ManageTilesOncePerFrame) {
|
| scheduler->DidManageTiles(); // Corresponds to ScheduledActionManageTiles
|
| }
|
|
|
| +TEST(SchedulerTest, ShouldUpdateVisibleTiles) {
|
| + FakeSchedulerClient client;
|
| + SchedulerSettings scheduler_settings;
|
| + scheduler_settings.impl_side_painting = true;
|
| + Scheduler* scheduler = client.CreateScheduler(scheduler_settings);
|
| + scheduler->SetCanStart();
|
| + scheduler->SetVisible(true);
|
| + scheduler->SetCanDraw(true);
|
| + InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
|
| +
|
| + client.SetRedrawWillHappenIfUpdateVisibleTilesHappens(true);
|
| +
|
| + // SetNeedsCommit should begin the frame.
|
| + client.Reset();
|
| + scheduler->SetNeedsCommit();
|
| + EXPECT_SINGLE_ACTION("SetNeedsBeginFrame", client);
|
| +
|
| + client.Reset();
|
| + scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| + EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
|
| + EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| +
|
| + client.Reset();
|
| + scheduler->NotifyBeginMainFrameStarted();
|
| + scheduler->NotifyReadyToCommit();
|
| + EXPECT_SINGLE_ACTION("ScheduledActionCommit", client);
|
| +
|
| + client.Reset();
|
| + scheduler->NotifyReadyToActivate();
|
| + EXPECT_SINGLE_ACTION("ScheduledActionActivatePendingTree", client);
|
| +
|
| + client.Reset();
|
| + client.SetSwapContainsIncompleteTile(true);
|
| + client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| + EXPECT_ACTION("ScheduledActionAnimate", client, 0, 3);
|
| + EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 1, 3);
|
| + EXPECT_ACTION("ScheduledActionUpdateVisibleTiles", client, 2, 3);
|
| + EXPECT_TRUE(scheduler->RedrawPending());
|
| +
|
| + client.Reset();
|
| + scheduler->BeginFrame(CreateBeginFrameArgsForTesting());
|
| + EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
|
| + EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
|
| + EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
|
| +
|
| + client.Reset();
|
| + client.task_runner().RunPendingTasks(); // Run posted deadline.
|
| + EXPECT_ACTION("ScheduledActionUpdateVisibleTiles", client, 0, 2);
|
| + EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 1, 2);
|
| +}
|
| +
|
| TEST(SchedulerTest, TriggerBeginFrameDeadlineEarly) {
|
| SchedulerClientNeedsManageTilesInDraw client;
|
| SchedulerSettings default_scheduler_settings;
|
|
|