Chromium Code Reviews| Index: services/ui/ws/frame_generator_unittest.cc |
| diff --git a/services/ui/ws/frame_generator_unittest.cc b/services/ui/ws/frame_generator_unittest.cc |
| index b5c9b981ec682f149f161c89b96d513f12d8bd41..e195417f3852b61ecb023bcd01729c9e3b54fe3a 100644 |
| --- a/services/ui/ws/frame_generator_unittest.cc |
| +++ b/services/ui/ws/frame_generator_unittest.cc |
| @@ -87,7 +87,7 @@ class FakeCompositorFrameSink : public cc::CompositorFrameSink, |
| } |
| void OnDidFinishFrame(const cc::BeginFrameAck& ack) override { |
| - external_begin_frame_source_->DidFinishFrame(this, ack); |
| + begin_frame_source_->DidFinishFrame(this, ack); |
| } |
| void SetBeginFrameSource(cc::BeginFrameSource* source) { |
| @@ -175,6 +175,12 @@ class FrameGeneratorTest : public testing::Test { |
| return compositor_frame_sink_->last_metadata(); |
| } |
| + const cc::BeginFrameAck& LastBeginFrameAckFromFrameGenerator() { |
|
Fady Samuel
2017/03/20 18:33:13
nit: FromFrameGenerator is a bit redundant given t
Eric Seckler
2017/03/21 16:26:04
Done.
|
| + return begin_frame_source_->LastAckForObserver(compositor_frame_sink_); |
| + } |
| + |
| + ServerWindow* root_window() { return root_window_.get(); } |
| + |
| private: |
| FakeCompositorFrameSink* compositor_frame_sink_ = nullptr; |
| std::unique_ptr<cc::FakeExternalBeginFrameSource> begin_frame_source_; |
| @@ -193,6 +199,7 @@ TEST_F(FrameGeneratorTest, OnSurfaceCreated) { |
| // FrameGenerator does not request BeginFrames upon creation. |
| IssueBeginFrame(); |
| EXPECT_EQ(0, NumberOfFramesReceived()); |
| + EXPECT_EQ(cc::BeginFrameAck(), LastBeginFrameAckFromFrameGenerator()); |
| const cc::SurfaceId kArbitrarySurfaceId( |
| cc::FrameSinkId(1, 1), |
| @@ -213,10 +220,44 @@ TEST_F(FrameGeneratorTest, OnSurfaceCreated) { |
| EXPECT_EQ(1lu, referenced_surfaces.size()); |
| EXPECT_EQ(kArbitrarySurfaceId, referenced_surfaces.front()); |
| + cc::BeginFrameAck expected_ack(0, 2, 2, 0, true); |
| + EXPECT_EQ(expected_ack, LastBeginFrameAckFromFrameGenerator()); |
| + EXPECT_EQ(expected_ack, last_metadata.begin_frame_ack); |
| + |
| // FrameGenerator stops requesting BeginFrames after submitting a |
| // CompositorFrame. |
| IssueBeginFrame(); |
| EXPECT_EQ(1, NumberOfFramesReceived()); |
| + EXPECT_EQ(cc::BeginFrameAck(0, 2, 2, 0, true), |
| + LastBeginFrameAckFromFrameGenerator()); |
| +} |
| + |
| +TEST_F(FrameGeneratorTest, BeginFrameWhileInvisible) { |
| + EXPECT_EQ(0, NumberOfFramesReceived()); |
| + |
| + // A valid SurfaceInfo is required for BeginFrame processing. |
| + const cc::SurfaceId kArbitrarySurfaceId( |
| + cc::FrameSinkId(1, 1), |
| + cc::LocalSurfaceId(1, base::UnguessableToken::Create())); |
| + const cc::SurfaceInfo kArbitrarySurfaceInfo(kArbitrarySurfaceId, 1.0f, |
| + gfx::Size(100, 100)); |
| + frame_generator()->OnSurfaceCreated(kArbitrarySurfaceInfo); |
| + EXPECT_EQ(0, NumberOfFramesReceived()); |
| + |
| + // No frames are produced while invisible but in need of BeginFrames. |
| + root_window()->SetVisible(false); |
| + IssueBeginFrame(); |
| + EXPECT_EQ(0, NumberOfFramesReceived()); |
| + EXPECT_EQ(cc::BeginFrameAck(0, 1, 1, 0, false), |
| + LastBeginFrameAckFromFrameGenerator()); |
| + |
| + // When visible again, frame is produced. |
| + root_window()->SetVisible(true); |
| + IssueBeginFrame(); |
| + EXPECT_EQ(1, NumberOfFramesReceived()); |
| + cc::BeginFrameAck expected_ack(0, 2, 2, 0, true); |
| + EXPECT_EQ(expected_ack, LastBeginFrameAckFromFrameGenerator()); |
| + EXPECT_EQ(expected_ack, LastMetadata().begin_frame_ack); |
| } |
| TEST_F(FrameGeneratorTest, SetDeviceScaleFactor) { |