Index: cc/scheduler/scheduler_unittest.cc |
diff --git a/cc/scheduler/scheduler_unittest.cc b/cc/scheduler/scheduler_unittest.cc |
index 6f5eb2c2dcd2a83648b8727947578424d58de89f..b323b826d1a01eed5e3c59c0f23386d92d34cade 100644 |
--- a/cc/scheduler/scheduler_unittest.cc |
+++ b/cc/scheduler/scheduler_unittest.cc |
@@ -1094,7 +1094,7 @@ TEST(SchedulerTest, ManageTiles) { |
} |
// Test that ManageTiles only happens once per frame. If an external caller |
-// initiates it, then the state machine should not on that frame. |
+// initiates it, then the state machine should not ManageTiles on that frame. |
TEST(SchedulerTest, ManageTilesOncePerFrame) { |
FakeSchedulerClient client; |
SchedulerSettings default_scheduler_settings; |
@@ -1112,7 +1112,7 @@ TEST(SchedulerTest, ManageTilesOncePerFrame) { |
EXPECT_SINGLE_ACTION("PostBeginImplFrameDeadlineTask", client); |
EXPECT_TRUE(scheduler->ManageTilesPending()); |
- scheduler->DidManageTiles(); |
+ scheduler->DidManageTiles(); // An explicit ManageTiles. |
EXPECT_FALSE(scheduler->ManageTilesPending()); |
client.Reset(); |
@@ -1139,6 +1139,63 @@ TEST(SchedulerTest, ManageTilesOncePerFrame) { |
client.ActionIndex("ScheduledActionManageTiles")); |
EXPECT_FALSE(scheduler->RedrawPending()); |
EXPECT_FALSE(scheduler->ManageTilesPending()); |
+ scheduler->DidManageTiles(); // Corresponds to ScheduledActionManageTiles |
+ |
+ // If we get another DidManageTiles within the same frame, we should |
+ // not ManageTiles on the next frame. |
+ scheduler->DidManageTiles(); // An explicit ManageTiles. |
+ scheduler->SetNeedsManageTiles(); |
+ scheduler->SetNeedsRedraw(); |
+ client.Reset(); |
+ scheduler->BeginImplFrame(BeginFrameArgs::CreateForTesting()); |
+ EXPECT_SINGLE_ACTION("PostBeginImplFrameDeadlineTask", client); |
+ |
+ EXPECT_TRUE(scheduler->ManageTilesPending()); |
+ |
+ client.Reset(); |
+ scheduler->OnBeginImplFrameDeadline(); |
+ EXPECT_EQ(1, client.num_draws()); |
+ EXPECT_TRUE(client.HasAction("ScheduledActionDrawAndSwapIfPossible")); |
+ EXPECT_FALSE(client.HasAction("ScheduledActionManageTiles")); |
+ EXPECT_FALSE(scheduler->RedrawPending()); |
+ |
+ // If we get another DidManageTiles, we should not ManageTiles on the next |
+ // frame. This verifies we don't alternate calling ManageTiles once and twice. |
+ EXPECT_TRUE(scheduler->ManageTilesPending()); |
+ scheduler->DidManageTiles(); // An explicit ManageTiles. |
+ EXPECT_FALSE(scheduler->ManageTilesPending()); |
+ scheduler->SetNeedsManageTiles(); |
+ scheduler->SetNeedsRedraw(); |
+ client.Reset(); |
+ scheduler->BeginImplFrame(BeginFrameArgs::CreateForTesting()); |
+ EXPECT_SINGLE_ACTION("PostBeginImplFrameDeadlineTask", client); |
+ |
+ EXPECT_TRUE(scheduler->ManageTilesPending()); |
+ |
+ client.Reset(); |
+ scheduler->OnBeginImplFrameDeadline(); |
+ EXPECT_EQ(1, client.num_draws()); |
+ EXPECT_TRUE(client.HasAction("ScheduledActionDrawAndSwapIfPossible")); |
+ EXPECT_FALSE(client.HasAction("ScheduledActionManageTiles")); |
+ EXPECT_FALSE(scheduler->RedrawPending()); |
+ |
+ // Next frame without DidManageTiles should ManageTiles with draw. |
+ scheduler->SetNeedsManageTiles(); |
+ scheduler->SetNeedsRedraw(); |
+ client.Reset(); |
+ scheduler->BeginImplFrame(BeginFrameArgs::CreateForTesting()); |
+ EXPECT_SINGLE_ACTION("PostBeginImplFrameDeadlineTask", client); |
+ |
+ client.Reset(); |
+ scheduler->OnBeginImplFrameDeadline(); |
+ EXPECT_EQ(1, client.num_draws()); |
+ EXPECT_TRUE(client.HasAction("ScheduledActionDrawAndSwapIfPossible")); |
+ EXPECT_TRUE(client.HasAction("ScheduledActionManageTiles")); |
+ EXPECT_LT(client.ActionIndex("ScheduledActionDrawAndSwapIfPossible"), |
+ client.ActionIndex("ScheduledActionManageTiles")); |
+ EXPECT_FALSE(scheduler->RedrawPending()); |
+ EXPECT_FALSE(scheduler->ManageTilesPending()); |
+ scheduler->DidManageTiles(); // Corresponds to ScheduledActionManageTiles |
} |
class SchedulerClientWithFixedEstimates : public FakeSchedulerClient { |