Chromium Code Reviews| Index: cc/scheduler/scheduler_unittest.cc |
| diff --git a/cc/scheduler/scheduler_unittest.cc b/cc/scheduler/scheduler_unittest.cc |
| index 071fa58a066aea14ff4c3158d3ab47dac747b187..9de0bb8b0d33ffaf46cf2f4b110bce1c336b8936 100644 |
| --- a/cc/scheduler/scheduler_unittest.cc |
| +++ b/cc/scheduler/scheduler_unittest.cc |
| @@ -40,7 +40,9 @@ 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), |
| + contain_incomplete_tile_(false) { |
|
brianderson
2014/05/27 21:15:57
swap_contains_incomplete_tile_
simonhong
2014/05/28 00:09:35
Done.
|
| Reset(); |
| } |
| @@ -82,6 +84,10 @@ class FakeSchedulerClient : public SchedulerClient { |
| return -1; |
| } |
| + void set_contain_incomplete_tile(bool contain) { |
|
brianderson
2014/05/27 21:15:57
SetSwapContainsIncompleteTile
simonhong
2014/05/28 00:09:35
Done.
|
| + contain_incomplete_tile_ = contain; |
| + } |
| + |
| bool HasAction(const char* action) const { |
| return ActionIndex(action) >= 0; |
| } |
| @@ -177,6 +183,7 @@ class FakeSchedulerClient : public SchedulerClient { |
| bool automatic_swap_ack_; |
| int num_draws_; |
| bool log_anticipated_draw_time_change_; |
| + bool contain_incomplete_tile_; |
|
brianderson
2014/05/27 21:15:57
This isn't used by the base class. Can you put it
simonhong
2014/05/28 00:09:35
Ah.. yes.
SchedulerClientNeedsUpdateVisibleTiles i
|
| base::TimeTicks posted_begin_impl_frame_deadline_; |
| std::vector<const char*> actions_; |
| ScopedVector<base::Value> states_; |
| @@ -875,6 +882,68 @@ TEST(SchedulerTest, ManageTilesOncePerFrame) { |
| scheduler->DidManageTiles(); // Corresponds to ScheduledActionManageTiles |
| } |
| +class SchedulerClientNeedsUpdateVisibleTiles : public FakeSchedulerClient { |
| + public: |
| + virtual DrawResult ScheduledActionDrawAndSwapIfPossible() |
| + OVERRIDE { |
| + actions_.push_back("ScheduledActionDrawAndSwapIfPossible"); |
| + states_.push_back(scheduler_->AsValue().release()); |
| + num_draws_++; |
| + DrawResult result = |
| + draw_will_happen_ ? DRAW_SUCCESS : DRAW_ABORTED_CHECKERBOARD_ANIMATIONS; |
| + bool swap_will_happen = |
| + draw_will_happen_ && swap_will_happen_if_draw_happens_; |
| + if (swap_will_happen) { |
| + scheduler_->DidSwapBuffers(); |
| + if (contain_incomplete_tile_) { |
| + scheduler_->SetSwapUsedIncompleteTile(true); |
| + contain_incomplete_tile_ = false; |
| + } |
| + if (automatic_swap_ack_) |
| + scheduler_->DidSwapBuffersComplete(); |
| + } |
| + return result; |
| + } |
| +}; |
| + |
| +TEST(SchedulerTest, ShouldUpdateVisibleTiles) { |
| + SchedulerClientNeedsUpdateVisibleTiles 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); |
| + |
| + // 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.set_contain_incomplete_tile(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); |
|
brianderson
2014/05/27 21:15:57
After this point, can you check that needs_redraw
|
| +} |
| + |
| TEST(SchedulerTest, TriggerBeginFrameDeadlineEarly) { |
| SchedulerClientNeedsManageTilesInDraw client; |
| SchedulerSettings default_scheduler_settings; |