Chromium Code Reviews| 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 |