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 |