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..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()); |
|
sunnyps
2016/08/16 20:18:13
This isn't related to your CL but I think this tes
danakj
2016/08/16 20:33:06
Ya it's just making sure each function calls Sched
|
| - // 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 |