Index: cc/surfaces/display_scheduler_unittest.cc |
diff --git a/cc/surfaces/display_scheduler_unittest.cc b/cc/surfaces/display_scheduler_unittest.cc |
index ea7a22fba5a84d9bf54d197f19a0911a4101c81e..bc0dd5e0cc289b8cde3000c20996d1f6d5aac87c 100644 |
--- a/cc/surfaces/display_scheduler_unittest.cc |
+++ b/cc/surfaces/display_scheduler_unittest.cc |
@@ -5,11 +5,13 @@ |
#include "cc/surfaces/display_scheduler.h" |
#include "base/logging.h" |
+#include "base/memory/ptr_util.h" |
#include "base/test/null_task_runner.h" |
#include "base/test/simple_test_tick_clock.h" |
#include "base/trace_event/trace_event.h" |
#include "cc/output/begin_frame_args.h" |
#include "cc/surfaces/display.h" |
+#include "cc/surfaces/display_begin_frame_source.h" |
#include "cc/test/fake_external_begin_frame_source.h" |
#include "cc/test/scheduler_test_common.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -40,13 +42,19 @@ class FakeDisplaySchedulerClient : public DisplaySchedulerClient { |
int draw_and_swap_count_; |
}; |
+// TODO(eseckler): Test with a mocked DisplayBeginFrameSource. |
+// TODO(eseckler): Replace/add tests around expected child damages. |
+// TODO(eseckler): Add tests for DisplayBeginFrameSource (elsewhere). |
+ |
class TestDisplayScheduler : public DisplayScheduler { |
public: |
- TestDisplayScheduler(BeginFrameSource* begin_frame_source, |
+ TestDisplayScheduler(DisplayBeginFrameSource* begin_frame_source, |
base::SingleThreadTaskRunner* task_runner, |
int max_pending_swaps) |
- : DisplayScheduler(begin_frame_source, task_runner, max_pending_swaps), |
- scheduler_begin_frame_deadline_count_(0) {} |
+ : DisplayScheduler(task_runner, max_pending_swaps), |
+ scheduler_begin_frame_deadline_count_(0) { |
+ SetBeginFrameSource(begin_frame_source); |
+ } |
base::TimeTicks DesiredBeginFrameDeadlineTimeForTest() { |
return DesiredBeginFrameDeadlineTime(); |
@@ -67,14 +75,22 @@ class TestDisplayScheduler : public DisplayScheduler { |
int scheduler_begin_frame_deadline_count_; |
}; |
+// TODO(eseckler): Update all these tests. Consider mocking out DisplayBFS and |
+// testing it separately? |
class DisplaySchedulerTest : public testing::Test { |
public: |
DisplaySchedulerTest() |
- : fake_begin_frame_source_(0.f, false), |
+ : display_begin_frame_source_(nullptr), |
+ next_begin_frame_number_(1), |
task_runner_(new base::NullTaskRunner), |
- scheduler_(&fake_begin_frame_source_, |
+ scheduler_(&display_begin_frame_source_, |
task_runner_.get(), |
kMaxPendingSwaps) { |
+ std::unique_ptr<BeginFrameSource> fake_begin_frame_source = |
+ base::MakeUnique<FakeExternalBeginFrameSource>(0.f, false); |
+ fake_begin_frame_source_ = static_cast<FakeExternalBeginFrameSource*>( |
+ fake_begin_frame_source.get()); |
+ display_begin_frame_source_.SwapWrappedSource(&fake_begin_frame_source); |
now_src_.Advance(base::TimeDelta::FromMicroseconds(10000)); |
scheduler_.SetClient(&client_); |
} |
@@ -87,9 +103,10 @@ class DisplaySchedulerTest : public testing::Test { |
base::TimeTicks frame_time = now_src_.NowTicks(); |
base::TimeDelta interval = BeginFrameArgs::DefaultInterval(); |
base::TimeTicks deadline = frame_time + interval; |
- fake_begin_frame_source_.TestOnBeginFrame( |
- BeginFrameArgs::Create(BEGINFRAME_FROM_HERE, frame_time, deadline, |
- interval, BeginFrameArgs::NORMAL)); |
+ fake_begin_frame_source_->TestOnBeginFrame(BeginFrameArgs::Create( |
+ BEGINFRAME_FROM_HERE, fake_begin_frame_source_->source_id(), |
+ next_begin_frame_number_++, frame_time, deadline, interval, |
+ BeginFrameArgs::NORMAL)); |
} |
protected: |
@@ -97,7 +114,9 @@ class DisplaySchedulerTest : public testing::Test { |
FakeDisplaySchedulerClient& client() { return client_; } |
DisplayScheduler& scheduler() { return scheduler_; } |
- FakeExternalBeginFrameSource fake_begin_frame_source_; |
+ FakeExternalBeginFrameSource* fake_begin_frame_source_; // Not owned. |
+ DisplayBeginFrameSource display_begin_frame_source_; |
+ uint64_t next_begin_frame_number_; |
base::SimpleTestTickClock now_src_; |
scoped_refptr<base::NullTaskRunner> task_runner_; |
@@ -293,15 +312,15 @@ TEST_F(DisplaySchedulerTest, VisibleWithoutDamageNoTicks) { |
SurfaceId sid1(kArbitraryFrameSinkId, |
LocalFrameId(1, base::UnguessableToken::Create())); |
- EXPECT_EQ(0u, fake_begin_frame_source_.num_observers()); |
+ 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()); |
+ EXPECT_EQ(0u, fake_begin_frame_source_->num_observers()); |
scheduler_.SetNewRootSurface(root_surface_id); |
- EXPECT_EQ(1u, fake_begin_frame_source_.num_observers()); |
+ EXPECT_EQ(1u, fake_begin_frame_source_->num_observers()); |
} |
TEST_F(DisplaySchedulerTest, VisibleWithDamageTicks) { |
@@ -314,10 +333,10 @@ TEST_F(DisplaySchedulerTest, VisibleWithDamageTicks) { |
// When there is damage, start listening for begin frames once becoming |
// visible. |
- EXPECT_EQ(0u, fake_begin_frame_source_.num_observers()); |
+ EXPECT_EQ(0u, fake_begin_frame_source_->num_observers()); |
scheduler_.SetVisible(true); |
- EXPECT_EQ(1u, fake_begin_frame_source_.num_observers()); |
+ EXPECT_EQ(1u, fake_begin_frame_source_->num_observers()); |
} |
TEST_F(DisplaySchedulerTest, Visibility) { |
@@ -328,7 +347,7 @@ TEST_F(DisplaySchedulerTest, Visibility) { |
scheduler_.SetNewRootSurface(root_surface_id); |
scheduler_.SetVisible(true); |
- EXPECT_EQ(1u, fake_begin_frame_source_.num_observers()); |
+ EXPECT_EQ(1u, fake_begin_frame_source_->num_observers()); |
// DrawAndSwap normally. |
BeginFrameForTest(); |
@@ -347,28 +366,28 @@ TEST_F(DisplaySchedulerTest, Visibility) { |
scheduler_.SetVisible(false); |
// It will stop listening for begin frames after the current deadline. |
- EXPECT_EQ(1u, fake_begin_frame_source_.num_observers()); |
+ 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()); |
+ 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()); |
+ 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()); |
+ 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()); |
+ EXPECT_EQ(1u, fake_begin_frame_source_->num_observers()); |
} |
TEST_F(DisplaySchedulerTest, ResizeCausesSwap) { |