| 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
|
|
|