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