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 c7b5bd81802681d0c567ca61e6b31e969a7026f0..9be259982482059fd30ce815d1a57aa8aabda3ba 100644 |
| --- a/cc/surfaces/display_scheduler_unittest.cc |
| +++ b/cc/surfaces/display_scheduler_unittest.cc |
| @@ -54,7 +54,13 @@ class TestDisplayScheduler : public DisplayScheduler { |
| return DesiredBeginFrameDeadlineTime(); |
| } |
| - void BeginFrameDeadlineForTest() { OnBeginFrameDeadline(); } |
| + void BeginFrameDeadlineForTest() { |
| + // Ensure that any missed BeginFrames were handled by the scheduler. We need |
| + // to run the scheduled task ourselves since the NullTaskRunner won't. |
| + if (!missed_begin_frame_task_.IsCancelled()) |
| + missed_begin_frame_task_.callback().Run(); |
| + OnBeginFrameDeadline(); |
| + } |
| void ScheduleBeginFrameDeadline() override { |
| scheduler_begin_frame_deadline_count_++; |
| @@ -65,6 +71,10 @@ class TestDisplayScheduler : public DisplayScheduler { |
| return scheduler_begin_frame_deadline_count_; |
| } |
| + bool inside_begin_frame_deadline_interval() { |
| + return inside_begin_frame_deadline_interval_; |
| + } |
| + |
| protected: |
| int scheduler_begin_frame_deadline_count_; |
| }; |
| @@ -86,6 +96,7 @@ class DisplaySchedulerTest : public testing::Test { |
| void SetUp() override { scheduler_.SetRootSurfaceResourcesLocked(false); } |
| void BeginFrameForTest() { |
| + now_src_.Advance(base::TimeDelta::FromMicroseconds(10000)); |
|
brianderson
2017/01/03 19:30:16
To help test readability, can you make it explicit
Eric Seckler
2017/01/04 10:14:49
Done.
|
| base::TimeTicks frame_time = now_src_.NowTicks(); |
| base::TimeDelta interval = BeginFrameArgs::DefaultInterval(); |
| base::TimeTicks deadline = frame_time + interval; |
| @@ -126,8 +137,8 @@ TEST_F(DisplaySchedulerTest, ResizeHasLateDeadlineUntilNewRootSurface) { |
| // Resize on the next begin frame cycle should cause the deadline to wait |
| // for a new root surface. |
| - late_deadline = now_src().NowTicks() + BeginFrameArgs::DefaultInterval(); |
| BeginFrameForTest(); |
| + late_deadline = now_src().NowTicks() + BeginFrameArgs::DefaultInterval(); |
| scheduler_.SurfaceDamaged(sid1); |
| EXPECT_GT(late_deadline, scheduler_.DesiredBeginFrameDeadlineTimeForTest()); |
| scheduler_.DisplayResized(); |
| @@ -164,8 +175,8 @@ TEST_F(DisplaySchedulerTest, ResizeHasLateDeadlineUntilDamagedSurface) { |
| // Resize on the next begin frame cycle should cause the deadline to wait |
| // for a new root surface. |
| - late_deadline = now_src().NowTicks() + BeginFrameArgs::DefaultInterval(); |
| BeginFrameForTest(); |
| + late_deadline = now_src().NowTicks() + BeginFrameArgs::DefaultInterval(); |
| scheduler_.SurfaceDamaged(sid1); |
| EXPECT_GT(late_deadline, scheduler_.DesiredBeginFrameDeadlineTimeForTest()); |
| scheduler_.DisplayResized(); |
| @@ -176,8 +187,8 @@ TEST_F(DisplaySchedulerTest, ResizeHasLateDeadlineUntilDamagedSurface) { |
| scheduler_.BeginFrameDeadlineForTest(); |
| // Verify deadline goes back to normal after resize. |
| - late_deadline = now_src().NowTicks() + BeginFrameArgs::DefaultInterval(); |
| BeginFrameForTest(); |
| + late_deadline = now_src().NowTicks() + BeginFrameArgs::DefaultInterval(); |
| scheduler_.SurfaceDamaged(sid1); |
| EXPECT_GT(late_deadline, scheduler_.DesiredBeginFrameDeadlineTimeForTest()); |
| scheduler_.SurfaceDamaged(root_surface_id); |
| @@ -242,13 +253,12 @@ TEST_F(DisplaySchedulerTest, SurfaceDamaged) { |
| BeginFrameForTest(); |
| scheduler_.BeginFrameDeadlineForTest(); |
| BeginFrameForTest(); |
| - scheduler_.BeginFrameDeadlineForTest(); |
| + EXPECT_FALSE(scheduler_.inside_begin_frame_deadline_interval()); |
| // Deadline should trigger early if child surfaces are idle and |
| // we get damage on the root surface. |
| BeginFrameForTest(); |
| - EXPECT_LT(now_src().NowTicks(), |
| - scheduler_.DesiredBeginFrameDeadlineTimeForTest()); |
| + EXPECT_FALSE(scheduler_.inside_begin_frame_deadline_interval()); |
| scheduler_.SurfaceDamaged(root_surface_id); |
| EXPECT_GE(now_src().NowTicks(), |
| scheduler_.DesiredBeginFrameDeadlineTimeForTest()); |
| @@ -423,8 +433,8 @@ TEST_F(DisplaySchedulerTest, RootSurfaceResourcesLocked) { |
| EXPECT_EQ(1, client_.draw_and_swap_count()); |
| // Deadline triggers late while root resources are locked. |
| - late_deadline = now_src().NowTicks() + BeginFrameArgs::DefaultInterval(); |
| BeginFrameForTest(); |
| + late_deadline = now_src().NowTicks() + BeginFrameArgs::DefaultInterval(); |
| scheduler_.SurfaceDamaged(sid1); |
| EXPECT_GT(late_deadline, scheduler_.DesiredBeginFrameDeadlineTimeForTest()); |
| scheduler_.SetRootSurfaceResourcesLocked(true); |
| @@ -437,8 +447,8 @@ TEST_F(DisplaySchedulerTest, RootSurfaceResourcesLocked) { |
| EXPECT_EQ(1, client_.draw_and_swap_count()); |
| // Deadline triggers normally when root resources are unlocked. |
| - late_deadline = now_src().NowTicks() + BeginFrameArgs::DefaultInterval(); |
| BeginFrameForTest(); |
| + late_deadline = now_src().NowTicks() + BeginFrameArgs::DefaultInterval(); |
| scheduler_.SurfaceDamaged(sid1); |
| EXPECT_EQ(late_deadline, scheduler_.DesiredBeginFrameDeadlineTimeForTest()); |
| scheduler_.SetRootSurfaceResourcesLocked(false); |
| @@ -486,9 +496,9 @@ TEST_F(DisplaySchedulerTest, DidSwapBuffers) { |
| scheduler_.DidSwapBuffers(); |
| // Deadline triggers late when swap throttled. |
| + BeginFrameForTest(); |
| base::TimeTicks late_deadline = |
| now_src().NowTicks() + BeginFrameArgs::DefaultInterval(); |
| - BeginFrameForTest(); |
| // Damage surface 1, but not surface 2 so we avoid triggering deadline |
| // early because all surfaces are ready. |
| scheduler_.SurfaceDamaged(sid1); |
| @@ -501,11 +511,11 @@ TEST_F(DisplaySchedulerTest, DidSwapBuffers) { |
| // Deadline triggers normally once not swap throttled. |
| // Damage from previous BeginFrame should cary over, so don't damage again. |
| + scheduler_.DidReceiveSwapBuffersAck(); |
| + BeginFrameForTest(); |
| base::TimeTicks expected_deadline = |
| scheduler_.LastUsedBeginFrameArgs().deadline - |
| BeginFrameArgs::DefaultEstimatedParentDrawTime(); |
| - scheduler_.DidReceiveSwapBuffersAck(); |
| - BeginFrameForTest(); |
| EXPECT_EQ(expected_deadline, |
| scheduler_.DesiredBeginFrameDeadlineTimeForTest()); |
| // Still waiting for surface 2. Once it updates, deadline should trigger |