| Index: cc/scheduler/begin_frame_source_unittest.cc
|
| diff --git a/cc/scheduler/begin_frame_source_unittest.cc b/cc/scheduler/begin_frame_source_unittest.cc
|
| index bce3439e31c0fc4e6809c7a201c156675e7a1805..96eb62a9ad33d8b489d8a93fa4d6e2a6bd9af122 100644
|
| --- a/cc/scheduler/begin_frame_source_unittest.cc
|
| +++ b/cc/scheduler/begin_frame_source_unittest.cc
|
| @@ -802,15 +802,23 @@ class MockExternalBeginFrameSourceClient
|
| MOCK_METHOD1(OnDidFinishFrame, void(const BeginFrameAck&));
|
| };
|
|
|
| +class ExternalBeginFrameSourceForTest : public ExternalBeginFrameSource {
|
| + public:
|
| + using ExternalBeginFrameSource::ExternalBeginFrameSource;
|
| + base::TimeTicks Now() const override { return now_; }
|
| +
|
| + base::TimeTicks now_;
|
| +};
|
| +
|
| class ExternalBeginFrameSourceTest : public ::testing::Test {
|
| public:
|
| std::unique_ptr<MockExternalBeginFrameSourceClient> client_;
|
| - std::unique_ptr<ExternalBeginFrameSource> source_;
|
| + std::unique_ptr<ExternalBeginFrameSourceForTest> source_;
|
| std::unique_ptr<MockBeginFrameObserver> obs_;
|
|
|
| void SetUp() override {
|
| client_.reset(new MockExternalBeginFrameSourceClient);
|
| - source_.reset(new ExternalBeginFrameSource(client_.get()));
|
| + source_.reset(new ExternalBeginFrameSourceForTest(client_.get()));
|
| obs_.reset(new MockBeginFrameObserver);
|
| }
|
|
|
| @@ -908,5 +916,36 @@ TEST_F(ExternalBeginFrameSourceTest, OnBeginFrameChecksBeginFrameContinuity) {
|
| source2.OnBeginFrame(args);
|
| }
|
|
|
| +TEST_F(ExternalBeginFrameSourceTest, AddObserverSendsMissedBeginFrame) {
|
| + BeginFrameArgs args = CreateBeginFrameArgsForTesting(
|
| + BEGINFRAME_FROM_HERE, 0, 2, base::TimeTicks::FromInternalValue(10000));
|
| + EXPECT_CALL((*client_), OnDidFinishFrame(BeginFrameAck(0, 2, 2, 0, false)))
|
| + .Times(1);
|
| + source_->OnBeginFrame(args);
|
| +
|
| + args.type = BeginFrameArgs::MISSED;
|
| + EXPECT_CALL((*client_), OnNeedsBeginFrames(true)).Times(1);
|
| + EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
|
| + EXPECT_BEGIN_FRAME_ARGS_USED(*obs_, args);
|
| + source_->AddObserver(obs_.get());
|
| +}
|
| +
|
| +TEST_F(ExternalBeginFrameSourceTest,
|
| + AddObserverDoesNotSendMissedBeginFrameAfterDeadline) {
|
| + BeginFrameArgs args = CreateBeginFrameArgsForTesting(
|
| + BEGINFRAME_FROM_HERE, 0, 2, base::TimeTicks::FromInternalValue(10000));
|
| + EXPECT_CALL((*client_), OnDidFinishFrame(BeginFrameAck(0, 2, 2, 0, false)))
|
| + .Times(1);
|
| + source_->OnBeginFrame(args);
|
| +
|
| + source_->now_ = args.deadline;
|
| + args.type = BeginFrameArgs::MISSED;
|
| + EXPECT_CALL((*client_), OnNeedsBeginFrames(true)).Times(1);
|
| + EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
|
| + // Should not call OnBeginFrame for missed BeginFrame with past deadline.
|
| + EXPECT_CALL((*obs_), OnBeginFrame(::testing::_)).Times(0);
|
| + source_->AddObserver(obs_.get());
|
| +}
|
| +
|
| } // namespace
|
| } // namespace cc
|
|
|