OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "cc/surfaces/direct_compositor_frame_sink.h" | 5 #include "cc/surfaces/direct_compositor_frame_sink.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 | 8 |
9 #include "base/memory/ptr_util.h" | 9 #include "base/memory/ptr_util.h" |
10 #include "cc/output/renderer_settings.h" | 10 #include "cc/output/renderer_settings.h" |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
102 | 102 |
103 ~DirectCompositorFrameSinkTest() override { | 103 ~DirectCompositorFrameSinkTest() override { |
104 compositor_frame_sink_->DetachFromClient(); | 104 compositor_frame_sink_->DetachFromClient(); |
105 } | 105 } |
106 | 106 |
107 void SwapBuffersWithDamage(const gfx::Rect& damage_rect) { | 107 void SwapBuffersWithDamage(const gfx::Rect& damage_rect) { |
108 std::unique_ptr<RenderPass> render_pass(RenderPass::Create()); | 108 std::unique_ptr<RenderPass> render_pass(RenderPass::Create()); |
109 render_pass->SetNew(1, display_rect_, damage_rect, gfx::Transform()); | 109 render_pass->SetNew(1, display_rect_, damage_rect, gfx::Transform()); |
110 | 110 |
111 CompositorFrame frame; | 111 CompositorFrame frame; |
| 112 frame.metadata.begin_frame_ack = BeginFrameAck(0, 1, 1, 0, true); |
112 frame.render_pass_list.push_back(std::move(render_pass)); | 113 frame.render_pass_list.push_back(std::move(render_pass)); |
113 | 114 |
114 compositor_frame_sink_->SubmitCompositorFrame(std::move(frame)); | 115 compositor_frame_sink_->SubmitCompositorFrame(std::move(frame)); |
115 } | 116 } |
116 | 117 |
117 void SetUp() override { | 118 void SetUp() override { |
118 // Draw the first frame to start in an "unlocked" state. | 119 // Draw the first frame to start in an "unlocked" state. |
119 SwapBuffersWithDamage(display_rect_); | 120 SwapBuffersWithDamage(display_rect_); |
120 | 121 |
121 EXPECT_EQ(0u, display_output_surface_->num_sent_frames()); | 122 EXPECT_EQ(0u, display_output_surface_->num_sent_frames()); |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
187 public: | 188 public: |
188 explicit TestBeginFrameObserver(BeginFrameSource* source) : source_(source) {} | 189 explicit TestBeginFrameObserver(BeginFrameSource* source) : source_(source) {} |
189 | 190 |
190 void FinishFrame() { source_->DidFinishFrame(this, ack()); } | 191 void FinishFrame() { source_->DidFinishFrame(this, ack()); } |
191 | 192 |
192 const BeginFrameAck& ack() const { return ack_; } | 193 const BeginFrameAck& ack() const { return ack_; } |
193 | 194 |
194 private: | 195 private: |
195 bool OnBeginFrameDerivedImpl(const BeginFrameArgs& args) override { | 196 bool OnBeginFrameDerivedImpl(const BeginFrameArgs& args) override { |
196 ack_ = BeginFrameAck(args.source_id, args.sequence_number, | 197 ack_ = BeginFrameAck(args.source_id, args.sequence_number, |
197 args.sequence_number, 0, true); | 198 args.sequence_number, 0, false); |
198 return true; | 199 return true; |
199 } | 200 } |
200 | 201 |
201 void OnBeginFrameSourcePausedChanged(bool paused) override{}; | 202 void OnBeginFrameSourcePausedChanged(bool paused) override{}; |
202 | 203 |
203 BeginFrameSource* source_; | 204 BeginFrameSource* source_; |
204 BeginFrameAck ack_; | 205 BeginFrameAck ack_; |
205 }; | 206 }; |
206 | 207 |
207 TEST_F(DirectCompositorFrameSinkTest, AcknowledgesBeginFrames) { | 208 TEST_F(DirectCompositorFrameSinkTest, AcknowledgesBeginFramesWithDamage) { |
| 209 // Verify that the frame sink acknowledged the BeginFrame attached to |
| 210 // CompositorFrame submitted during SetUp(). |
| 211 EXPECT_EQ(BeginFrameAck(0, 1, 1, 0, true), begin_frame_source_->last_ack()); |
| 212 } |
| 213 |
| 214 TEST_F(DirectCompositorFrameSinkTest, AcknowledgesBeginFramesWithoutDamage) { |
208 // Request a BeginFrame from the CompositorFrameSinkClient. | 215 // Request a BeginFrame from the CompositorFrameSinkClient. |
209 TestBeginFrameObserver observer(begin_frame_source_.get()); | 216 TestBeginFrameObserver observer(begin_frame_source_.get()); |
210 compositor_frame_sink_client_.begin_frame_source()->AddObserver(&observer); | 217 compositor_frame_sink_client_.begin_frame_source()->AddObserver(&observer); |
| 218 task_runner_->RunUntilIdle(); |
211 observer.FinishFrame(); | 219 observer.FinishFrame(); |
212 compositor_frame_sink_client_.begin_frame_source()->RemoveObserver(&observer); | 220 compositor_frame_sink_client_.begin_frame_source()->RemoveObserver(&observer); |
213 | 221 |
214 // Verify that the frame sink acknowledged the last BeginFrame. | 222 // Verify that the frame sink acknowledged the last BeginFrame. |
215 EXPECT_EQ(observer.ack(), begin_frame_source_->last_ack()); | 223 EXPECT_EQ(observer.ack(), begin_frame_source_->last_ack()); |
216 } | 224 } |
217 | 225 |
218 } // namespace | 226 } // namespace |
219 } // namespace cc | 227 } // namespace cc |
OLD | NEW |