| 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..5d6a66b6de33f71685c42c1eed4929e127d468cb 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 damage.
|
| +// 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_(BeginFrameArgs::kStartingFrameNumber),
|
| 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) {
|
|
|