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

Unified Diff: cc/surfaces/display_scheduler_unittest.cc

Issue 2238693002: Plumb SetVisible from ui::Compositor to the DirectRenderer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: setvisible-browser: onemore Created 4 years, 4 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') | cc/surfaces/display_unittest.cc » ('j') | 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 082d1621f2da1b878bfa32a46ea1dbfaf1aab734..572b8f36f3c9a588df6ef7ab18547a18b0f348dc 100644
--- a/cc/surfaces/display_scheduler_unittest.cc
+++ b/cc/surfaces/display_scheduler_unittest.cc
@@ -109,6 +109,8 @@ TEST_F(DisplaySchedulerTest, ResizeHasLateDeadlineUntilNewRootSurface) {
SurfaceId sid1(0, 3, 0);
base::TimeTicks late_deadline;
+ scheduler_.SetVisible(true);
+
// Go trough an initial BeginFrame cycle with the root surface.
BeginFrameForTest();
scheduler_.SetNewRootSurface(root_surface_id1);
@@ -143,6 +145,8 @@ TEST_F(DisplaySchedulerTest, ResizeHasLateDeadlineUntilDamagedSurface) {
SurfaceId sid1(0, 2, 0);
base::TimeTicks late_deadline;
+ scheduler_.SetVisible(true);
+
// Go trough an initial BeginFrame cycle with the root surface.
BeginFrameForTest();
scheduler_.SetNewRootSurface(root_surface_id);
@@ -177,6 +181,8 @@ TEST_F(DisplaySchedulerTest, SurfaceDamaged) {
SurfaceId sid1(0, 1, 0);
SurfaceId sid2(0, 2, 0);
+ scheduler_.SetVisible(true);
+
// Set the root surface
scheduler_.SetNewRootSurface(root_surface_id);
@@ -240,6 +246,8 @@ TEST_F(DisplaySchedulerTest, OutputSurfaceLost) {
SurfaceId root_surface_id(0, 0, 0);
SurfaceId sid1(0, 1, 0);
+ scheduler_.SetVisible(true);
+
// Set the root surface
scheduler_.SetNewRootSurface(root_surface_id);
@@ -267,10 +275,90 @@ TEST_F(DisplaySchedulerTest, OutputSurfaceLost) {
EXPECT_EQ(1, client_.draw_and_swap_count());
}
+TEST_F(DisplaySchedulerTest, VisibleWithoutDamageNoTicks) {
+ SurfaceId root_surface_id(0, 0, 0);
+ SurfaceId sid1(0, 1, 0);
+
+ EXPECT_EQ(0u, fake_begin_frame_source_.num_observers());
+ scheduler_.SetVisible(true);
+
+ // When becoming visible, don't start listening for begin frames until there
+ // is some damage.
+ EXPECT_EQ(0u, fake_begin_frame_source_.num_observers());
+ scheduler_.SetNewRootSurface(root_surface_id);
+
+ EXPECT_EQ(1u, fake_begin_frame_source_.num_observers());
+}
+
+TEST_F(DisplaySchedulerTest, VisibleWithDamageTicks) {
+ SurfaceId root_surface_id(0, 0, 0);
+ SurfaceId sid1(0, 1, 0);
+
+ scheduler_.SetNewRootSurface(root_surface_id);
+
+ // When there is damage, start listening for begin frames once becoming
+ // visible.
+ EXPECT_EQ(0u, fake_begin_frame_source_.num_observers());
+ scheduler_.SetVisible(true);
+
+ EXPECT_EQ(1u, fake_begin_frame_source_.num_observers());
+}
+
+TEST_F(DisplaySchedulerTest, Visibility) {
+ SurfaceId root_surface_id(0, 0, 0);
+ SurfaceId sid1(0, 1, 0);
+
+ scheduler_.SetNewRootSurface(root_surface_id);
+ scheduler_.SetVisible(true);
+ EXPECT_EQ(1u, fake_begin_frame_source_.num_observers());
+
+ // DrawAndSwap normally.
+ BeginFrameForTest();
+ EXPECT_LT(now_src().NowTicks(),
+ scheduler_.DesiredBeginFrameDeadlineTimeForTest());
+ EXPECT_EQ(0, client_.draw_and_swap_count());
+ scheduler_.SurfaceDamaged(sid1);
+ scheduler_.BeginFrameDeadlineForTest();
+ EXPECT_EQ(1, client_.draw_and_swap_count());
+
+ BeginFrameForTest();
+ EXPECT_LT(now_src().NowTicks(),
+ scheduler_.DesiredBeginFrameDeadlineTimeForTest());
+
+ // Become not visible.
+ scheduler_.SetVisible(false);
+
+ // It will stop listening for begin frames after the current deadline.
+ EXPECT_EQ(1u, fake_begin_frame_source_.num_observers());
+
+ // Deadline does not DrawAndSwap when not visible.
+ EXPECT_EQ(1, client_.draw_and_swap_count());
+ scheduler_.BeginFrameDeadlineForTest();
+ EXPECT_EQ(1, client_.draw_and_swap_count());
+ // Now it stops listening for begin frames.
+ EXPECT_EQ(0u, fake_begin_frame_source_.num_observers());
+
+ // Does not start listening for begin frames when becoming visible without
+ // damage.
+ scheduler_.SetVisible(true);
+ EXPECT_EQ(0u, fake_begin_frame_source_.num_observers());
+ scheduler_.SetVisible(false);
+
+ // Does not start listening for begin frames when damage arrives.
+ scheduler_.SurfaceDamaged(sid1);
+ EXPECT_EQ(0u, fake_begin_frame_source_.num_observers());
+
+ // But does when becoming visible with damage again.
+ scheduler_.SetVisible(true);
+ EXPECT_EQ(1u, fake_begin_frame_source_.num_observers());
+}
+
TEST_F(DisplaySchedulerTest, ResizeCausesSwap) {
SurfaceId root_surface_id(0, 0, 0);
SurfaceId sid1(0, 1, 0);
+ scheduler_.SetVisible(true);
+
// Set the root surface
scheduler_.SetNewRootSurface(root_surface_id);
@@ -295,6 +383,8 @@ TEST_F(DisplaySchedulerTest, RootSurfaceResourcesLocked) {
SurfaceId sid1(0, 1, 0);
base::TimeTicks late_deadline;
+ scheduler_.SetVisible(true);
+
// Set the root surface
scheduler_.SetNewRootSurface(root_surface_id);
@@ -341,6 +431,8 @@ TEST_F(DisplaySchedulerTest, DidSwapBuffers) {
SurfaceId sid1(0, 1, 0);
SurfaceId sid2(0, 2, 0);
+ scheduler_.SetVisible(true);
+
// Set the root surface
scheduler_.SetNewRootSurface(root_surface_id);
@@ -405,37 +497,53 @@ TEST_F(DisplaySchedulerTest, ScheduleBeginFrameDeadline) {
SurfaceId root_surface_id(0, 1, 0);
SurfaceId sid1(0, 2, 0);
int count = 1;
- EXPECT_EQ(count++, scheduler_.scheduler_begin_frame_deadline_count());
+ EXPECT_EQ(count, scheduler_.scheduler_begin_frame_deadline_count());
- // Set the root surface
+ scheduler_.SetVisible(true);
+ EXPECT_EQ(++count, scheduler_.scheduler_begin_frame_deadline_count());
+
+ scheduler_.SetVisible(true);
+ EXPECT_EQ(count, scheduler_.scheduler_begin_frame_deadline_count());
+
+ scheduler_.SetVisible(false);
+ EXPECT_EQ(++count, scheduler_.scheduler_begin_frame_deadline_count());
+
+ // Set the root surface while not visible.
+ scheduler_.SetNewRootSurface(root_surface_id);
+ EXPECT_EQ(++count, scheduler_.scheduler_begin_frame_deadline_count());
+
+ scheduler_.SetVisible(true);
+ EXPECT_EQ(++count, scheduler_.scheduler_begin_frame_deadline_count());
+
+ // Set the root surface while visible.
scheduler_.SetNewRootSurface(root_surface_id);
- EXPECT_EQ(count++, scheduler_.scheduler_begin_frame_deadline_count());
+ EXPECT_EQ(++count, scheduler_.scheduler_begin_frame_deadline_count());
BeginFrameForTest();
- EXPECT_EQ(count++, scheduler_.scheduler_begin_frame_deadline_count());
+ EXPECT_EQ(++count, scheduler_.scheduler_begin_frame_deadline_count());
scheduler_.BeginFrameDeadlineForTest();
scheduler_.DidSwapBuffers();
BeginFrameForTest();
- EXPECT_EQ(count++, scheduler_.scheduler_begin_frame_deadline_count());
+ EXPECT_EQ(++count, scheduler_.scheduler_begin_frame_deadline_count());
scheduler_.DidSwapBuffersComplete();
- EXPECT_EQ(count++, scheduler_.scheduler_begin_frame_deadline_count());
+ EXPECT_EQ(++count, scheduler_.scheduler_begin_frame_deadline_count());
scheduler_.DisplayResized();
- EXPECT_EQ(count++, scheduler_.scheduler_begin_frame_deadline_count());
+ EXPECT_EQ(++count, scheduler_.scheduler_begin_frame_deadline_count());
scheduler_.SetNewRootSurface(root_surface_id);
- EXPECT_EQ(count++, scheduler_.scheduler_begin_frame_deadline_count());
+ EXPECT_EQ(++count, scheduler_.scheduler_begin_frame_deadline_count());
scheduler_.SurfaceDamaged(sid1);
- EXPECT_EQ(count++, scheduler_.scheduler_begin_frame_deadline_count());
+ EXPECT_EQ(++count, scheduler_.scheduler_begin_frame_deadline_count());
scheduler_.SetRootSurfaceResourcesLocked(true);
- EXPECT_EQ(count++, scheduler_.scheduler_begin_frame_deadline_count());
+ EXPECT_EQ(++count, scheduler_.scheduler_begin_frame_deadline_count());
scheduler_.OutputSurfaceLost();
- EXPECT_EQ(count++, scheduler_.scheduler_begin_frame_deadline_count());
+ EXPECT_EQ(++count, scheduler_.scheduler_begin_frame_deadline_count());
}
} // namespace
« no previous file with comments | « cc/surfaces/display_scheduler.cc ('k') | cc/surfaces/display_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698