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..bbb644d26ac63923a6493f1a06f9f6a89c256919 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,60 @@ TEST_F(DisplaySchedulerTest, OutputSurfaceLost) { |
EXPECT_EQ(1, client_.draw_and_swap_count()); |
} |
+TEST_F(DisplaySchedulerTest, Visibility) { |
+ SurfaceId root_surface_id(0, 0, 0); |
+ SurfaceId sid1(0, 1, 0); |
+ |
+ // The scheduler doesn't listen for begin frames until being visible. |
+ EXPECT_EQ(0u, fake_begin_frame_source_.num_observers()); |
+ scheduler_.SetVisible(true); |
+ EXPECT_EQ(1u, fake_begin_frame_source_.num_observers()); |
sunnyps
2016/08/15 23:20:03
Should the scheduler ask for begin frames if we ha
danakj
2016/08/16 00:37:22
I think it would only do one, and then in the dead
|
+ |
+ // Set the root surface |
+ scheduler_.SetNewRootSurface(root_surface_id); |
+ |
+ // 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_.SurfaceDamaged(sid1); |
+ 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 damage arrives. |
+ scheduler_.SurfaceDamaged(sid1); |
+ EXPECT_EQ(0u, fake_begin_frame_source_.num_observers()); |
+ |
+ // But does when becoming visible. |
+ 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 +353,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 +401,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 +467,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 |