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

Unified Diff: cc/surfaces/display_scheduler_unittest.cc

Issue 1251693002: cc: Consider Surface active if frame received recently (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase on resize logging patch Created 5 years, 5 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/surfaces/display_scheduler.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/surfaces/display_scheduler_unittest.cc
diff --git a/cc/surfaces/display_scheduler_unittest.cc b/cc/surfaces/display_scheduler_unittest.cc
index ffb0b43b0fd7686567d579f9aacecac32435b206..cf691ec1448ed4de29495c395584b64db4705c61 100644
--- a/cc/surfaces/display_scheduler_unittest.cc
+++ b/cc/surfaces/display_scheduler_unittest.cc
@@ -228,6 +228,159 @@ TEST_F(DisplaySchedulerTest, SurfaceDamaged) {
scheduler_->BeginFrameDeadlineForTest();
BeginFrameForTest();
scheduler_->BeginFrameDeadlineForTest();
+ BeginFrameForTest();
+ scheduler_->BeginFrameDeadlineForTest();
+
+ // Deadline should trigger early if child surfaces are idle and
+ // we get damage on the root surface.
+ BeginFrameForTest();
+ EXPECT_LT(now_src().NowTicks(),
+ scheduler_->DesiredBeginFrameDeadlineTimeForTest());
+ scheduler_->SurfaceDamaged(root_surface_id);
+ EXPECT_GE(now_src().NowTicks(),
+ scheduler_->DesiredBeginFrameDeadlineTimeForTest());
+ scheduler_->BeginFrameDeadlineForTest();
+}
+
+TEST_F(DisplaySchedulerTest, SurfaceActiveAt30fps) {
+ SurfaceId root_surface_id(0);
+ SurfaceId sid1(1);
+ SurfaceId sid2(2);
+
+ // Set the root surface
+ scheduler_->SetNewRootSurface(root_surface_id);
+
+ // Get scheduler to detect surface 1 and 2 as active by drawing
+ // two frames in a row. First frame with damage only from surface 1
+ // and the second frame only with damage from surface 2.
+ BeginFrameForTest();
+ scheduler_->SurfaceDamaged(sid1);
+ scheduler_->BeginFrameDeadlineForTest();
+ BeginFrameForTest();
+ scheduler_->SurfaceDamaged(sid2);
+ scheduler_->BeginFrameDeadlineForTest();
+
+ // Deadline doesn't trigger early until surface 1 and 2 are both damaged.
+ BeginFrameForTest();
+ EXPECT_LT(now_src().NowTicks(),
+ scheduler_->DesiredBeginFrameDeadlineTimeForTest());
+ scheduler_->SurfaceDamaged(sid1);
+ EXPECT_LT(now_src().NowTicks(),
+ scheduler_->DesiredBeginFrameDeadlineTimeForTest());
+ scheduler_->SurfaceDamaged(sid2);
+ EXPECT_GE(now_src().NowTicks(),
+ scheduler_->DesiredBeginFrameDeadlineTimeForTest());
+ scheduler_->BeginFrameDeadlineForTest();
+
+ // Make the system idle
+ BeginFrameForTest();
+ scheduler_->BeginFrameDeadlineForTest();
+ BeginFrameForTest();
+ scheduler_->BeginFrameDeadlineForTest();
+ BeginFrameForTest();
+ scheduler_->BeginFrameDeadlineForTest();
+
+ // Deadline should trigger early if child surfaces are idle and
+ // we get damage on the root surface.
+ BeginFrameForTest();
+ EXPECT_LT(now_src().NowTicks(),
+ scheduler_->DesiredBeginFrameDeadlineTimeForTest());
+ scheduler_->SurfaceDamaged(root_surface_id);
+ EXPECT_GE(now_src().NowTicks(),
+ scheduler_->DesiredBeginFrameDeadlineTimeForTest());
+ scheduler_->BeginFrameDeadlineForTest();
+}
+
+TEST_F(DisplaySchedulerTest, SurfaceActiveAt20fps) {
+ SurfaceId root_surface_id(0);
+ SurfaceId sid1(1);
+ SurfaceId sid2(2);
+ SurfaceId sid3(3);
+
+ // Set the root surface
+ scheduler_->SetNewRootSurface(root_surface_id);
+
+ // Get scheduler to detect surface 1, 2, and 3 as active by drawing
+ // 3 frames in a row. With damage from each surface in succession.
+ BeginFrameForTest();
+ scheduler_->SurfaceDamaged(sid1);
+ scheduler_->BeginFrameDeadlineForTest();
+ BeginFrameForTest();
+ scheduler_->SurfaceDamaged(sid2);
+ scheduler_->BeginFrameDeadlineForTest();
+ BeginFrameForTest();
+ scheduler_->SurfaceDamaged(sid3);
+ scheduler_->BeginFrameDeadlineForTest();
+
+ // Deadline doesn't trigger early until surface 1, 2, and 3 are all damaged.
+ BeginFrameForTest();
+ EXPECT_LT(now_src().NowTicks(),
+ scheduler_->DesiredBeginFrameDeadlineTimeForTest());
+ scheduler_->SurfaceDamaged(sid1);
+ EXPECT_LT(now_src().NowTicks(),
+ scheduler_->DesiredBeginFrameDeadlineTimeForTest());
+ scheduler_->SurfaceDamaged(sid2);
+ EXPECT_LT(now_src().NowTicks(),
+ scheduler_->DesiredBeginFrameDeadlineTimeForTest());
+ scheduler_->SurfaceDamaged(sid3);
+ EXPECT_GE(now_src().NowTicks(),
+ scheduler_->DesiredBeginFrameDeadlineTimeForTest());
+ scheduler_->BeginFrameDeadlineForTest();
+
+ // Make the system idle
+ BeginFrameForTest();
+ scheduler_->BeginFrameDeadlineForTest();
+ BeginFrameForTest();
+ scheduler_->BeginFrameDeadlineForTest();
+ BeginFrameForTest();
+ scheduler_->BeginFrameDeadlineForTest();
+
+ // Deadline should trigger early if child surfaces are idle and
+ // we get damage on the root surface.
+ BeginFrameForTest();
+ EXPECT_LT(now_src().NowTicks(),
+ scheduler_->DesiredBeginFrameDeadlineTimeForTest());
+ scheduler_->SurfaceDamaged(root_surface_id);
+ EXPECT_GE(now_src().NowTicks(),
+ scheduler_->DesiredBeginFrameDeadlineTimeForTest());
+ scheduler_->BeginFrameDeadlineForTest();
+}
+
+TEST_F(DisplaySchedulerTest, SurfaceActiveAt20fps_SingleSurface) {
+ SurfaceId root_surface_id(0);
+ SurfaceId sid1(1);
+ SurfaceId sid2(2);
+ SurfaceId sid3(3);
+
+ // Set the root surface
+ scheduler_->SetNewRootSurface(root_surface_id);
+
+ // Get scheduler to detect surface 1 as active even though
+ // it only swaps at 20fps.
+ BeginFrameForTest();
+ scheduler_->SurfaceDamaged(sid1);
+ scheduler_->BeginFrameDeadlineForTest();
+ BeginFrameForTest();
+ scheduler_->BeginFrameDeadlineForTest();
+ BeginFrameForTest();
+ scheduler_->BeginFrameDeadlineForTest();
+
+ // Deadline doesn't trigger early until surface 1 is damaged.
+ BeginFrameForTest();
+ EXPECT_LT(now_src().NowTicks(),
+ scheduler_->DesiredBeginFrameDeadlineTimeForTest());
+ scheduler_->SurfaceDamaged(sid1);
+ EXPECT_GE(now_src().NowTicks(),
+ scheduler_->DesiredBeginFrameDeadlineTimeForTest());
+ scheduler_->BeginFrameDeadlineForTest();
+
+ // Make the system idle
+ BeginFrameForTest();
+ scheduler_->BeginFrameDeadlineForTest();
+ BeginFrameForTest();
+ scheduler_->BeginFrameDeadlineForTest();
+ BeginFrameForTest();
+ scheduler_->BeginFrameDeadlineForTest();
// Deadline should trigger early if child surfaces are idle and
// we get damage on the root surface.
« no previous file with comments | « cc/surfaces/display_scheduler.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698