Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2424)

Unified Diff: cc/scheduler/scheduler_unittest.cc

Issue 130483010: cc: Limit ManageTiles calls to once per-frame on average (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Add tests Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/scheduler/scheduler_state_machine.cc ('k') | cc/trees/layer_tree_host_impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 {
« no previous file with comments | « cc/scheduler/scheduler_state_machine.cc ('k') | cc/trees/layer_tree_host_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698