OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "base/message_loop/message_loop.h" | 5 #include "base/message_loop/message_loop.h" |
6 #include "base/run_loop.h" | 6 #include "base/run_loop.h" |
7 #include "cc/input/selection.h" | 7 #include "cc/input/selection.h" |
8 #include "cc/ipc/copy_output_request_struct_traits.h" | 8 #include "cc/ipc/copy_output_request_struct_traits.h" |
9 #include "cc/ipc/traits_test_service.mojom.h" | 9 #include "cc/ipc/traits_test_service.mojom.h" |
10 #include "cc/output/copy_output_result.h" | 10 #include "cc/output/copy_output_result.h" |
11 #include "cc/quads/debug_border_draw_quad.h" | 11 #include "cc/quads/debug_border_draw_quad.h" |
12 #include "cc/quads/render_pass.h" | 12 #include "cc/quads/render_pass.h" |
13 #include "cc/quads/render_pass_draw_quad.h" | 13 #include "cc/quads/render_pass_draw_quad.h" |
14 #include "cc/quads/solid_color_draw_quad.h" | 14 #include "cc/quads/solid_color_draw_quad.h" |
15 #include "cc/quads/stream_video_draw_quad.h" | 15 #include "cc/quads/stream_video_draw_quad.h" |
16 #include "cc/quads/surface_draw_quad.h" | 16 #include "cc/quads/surface_draw_quad.h" |
17 #include "cc/quads/texture_draw_quad.h" | 17 #include "cc/quads/texture_draw_quad.h" |
18 #include "cc/quads/yuv_video_draw_quad.h" | 18 #include "cc/quads/yuv_video_draw_quad.h" |
| 19 #include "cc/test/begin_frame_args_test.h" |
19 #include "mojo/public/cpp/bindings/binding_set.h" | 20 #include "mojo/public/cpp/bindings/binding_set.h" |
20 #include "testing/gtest/include/gtest/gtest.h" | 21 #include "testing/gtest/include/gtest/gtest.h" |
21 #include "third_party/skia/include/core/SkString.h" | 22 #include "third_party/skia/include/core/SkString.h" |
22 #include "third_party/skia/include/effects/SkDropShadowImageFilter.h" | 23 #include "third_party/skia/include/effects/SkDropShadowImageFilter.h" |
23 | 24 |
24 namespace cc { | 25 namespace cc { |
25 | 26 |
26 namespace { | 27 namespace { |
27 | 28 |
28 class StructTraitsTest : public testing::Test, public mojom::TraitsTestService { | 29 class StructTraitsTest : public testing::Test, public mojom::TraitsTestService { |
29 public: | 30 public: |
30 StructTraitsTest() {} | 31 StructTraitsTest() {} |
31 | 32 |
32 protected: | 33 protected: |
33 mojom::TraitsTestServicePtr GetTraitsTestProxy() { | 34 mojom::TraitsTestServicePtr GetTraitsTestProxy() { |
34 return traits_test_bindings_.CreateInterfacePtrAndBind(this); | 35 return traits_test_bindings_.CreateInterfacePtrAndBind(this); |
35 } | 36 } |
36 | 37 |
37 private: | 38 private: |
38 // TraitsTestService: | 39 // TraitsTestService: |
39 void EchoBeginFrameArgs(const BeginFrameArgs& b, | 40 void EchoBeginFrameArgs(const BeginFrameArgs& b, |
40 const EchoBeginFrameArgsCallback& callback) override { | 41 const EchoBeginFrameArgsCallback& callback) override { |
41 callback.Run(b); | 42 callback.Run(b); |
42 } | 43 } |
43 | 44 |
| 45 void EchoBeginFrameAck(const BeginFrameAck& b, |
| 46 const EchoBeginFrameAckCallback& callback) override { |
| 47 callback.Run(b); |
| 48 } |
| 49 |
44 void EchoCompositorFrame( | 50 void EchoCompositorFrame( |
45 CompositorFrame c, | 51 CompositorFrame c, |
46 const EchoCompositorFrameCallback& callback) override { | 52 const EchoCompositorFrameCallback& callback) override { |
47 callback.Run(std::move(c)); | 53 callback.Run(std::move(c)); |
48 } | 54 } |
49 | 55 |
50 void EchoCompositorFrameMetadata( | 56 void EchoCompositorFrameMetadata( |
51 CompositorFrameMetadata c, | 57 CompositorFrameMetadata c, |
52 const EchoCompositorFrameMetadataCallback& callback) override { | 58 const EchoCompositorFrameMetadataCallback& callback) override { |
53 callback.Run(std::move(c)); | 59 callback.Run(std::move(c)); |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
162 } | 168 } |
163 | 169 |
164 } // namespace | 170 } // namespace |
165 | 171 |
166 TEST_F(StructTraitsTest, BeginFrameArgs) { | 172 TEST_F(StructTraitsTest, BeginFrameArgs) { |
167 const base::TimeTicks frame_time = base::TimeTicks::Now(); | 173 const base::TimeTicks frame_time = base::TimeTicks::Now(); |
168 const base::TimeTicks deadline = base::TimeTicks::Now(); | 174 const base::TimeTicks deadline = base::TimeTicks::Now(); |
169 const base::TimeDelta interval = base::TimeDelta::FromMilliseconds(1337); | 175 const base::TimeDelta interval = base::TimeDelta::FromMilliseconds(1337); |
170 const BeginFrameArgs::BeginFrameArgsType type = BeginFrameArgs::NORMAL; | 176 const BeginFrameArgs::BeginFrameArgsType type = BeginFrameArgs::NORMAL; |
171 const bool on_critical_path = true; | 177 const bool on_critical_path = true; |
| 178 const uint32_t source_id = 5; |
| 179 const uint64_t sequence_number = 10; |
172 BeginFrameArgs input; | 180 BeginFrameArgs input; |
| 181 input.source_id = source_id; |
| 182 input.sequence_number = sequence_number; |
173 input.frame_time = frame_time; | 183 input.frame_time = frame_time; |
174 input.deadline = deadline; | 184 input.deadline = deadline; |
175 input.interval = interval; | 185 input.interval = interval; |
176 input.type = type; | 186 input.type = type; |
177 input.on_critical_path = on_critical_path; | 187 input.on_critical_path = on_critical_path; |
178 mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy(); | 188 mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy(); |
179 BeginFrameArgs output; | 189 BeginFrameArgs output; |
180 proxy->EchoBeginFrameArgs(input, &output); | 190 proxy->EchoBeginFrameArgs(input, &output); |
| 191 EXPECT_EQ(source_id, output.source_id); |
| 192 EXPECT_EQ(sequence_number, output.sequence_number); |
181 EXPECT_EQ(frame_time, output.frame_time); | 193 EXPECT_EQ(frame_time, output.frame_time); |
182 EXPECT_EQ(deadline, output.deadline); | 194 EXPECT_EQ(deadline, output.deadline); |
183 EXPECT_EQ(interval, output.interval); | 195 EXPECT_EQ(interval, output.interval); |
184 EXPECT_EQ(type, output.type); | 196 EXPECT_EQ(type, output.type); |
185 EXPECT_EQ(on_critical_path, output.on_critical_path); | 197 EXPECT_EQ(on_critical_path, output.on_critical_path); |
186 } | 198 } |
187 | 199 |
| 200 TEST_F(StructTraitsTest, BeginFrameAck) { |
| 201 const uint32_t source_id = 5; |
| 202 const uint64_t sequence_number = 10; |
| 203 const uint64_t latest_confirmed_sequence_number = 8; |
| 204 const uint32_t remaining_frames = 1; |
| 205 const bool has_damage = true; |
| 206 BeginFrameAck input; |
| 207 input.source_id = source_id; |
| 208 input.sequence_number = sequence_number; |
| 209 input.latest_confirmed_sequence_number = latest_confirmed_sequence_number; |
| 210 input.remaining_frames = remaining_frames; |
| 211 input.has_damage = has_damage; |
| 212 mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy(); |
| 213 BeginFrameAck output; |
| 214 proxy->EchoBeginFrameAck(input, &output); |
| 215 EXPECT_EQ(source_id, output.source_id); |
| 216 EXPECT_EQ(sequence_number, output.sequence_number); |
| 217 EXPECT_EQ(latest_confirmed_sequence_number, |
| 218 output.latest_confirmed_sequence_number); |
| 219 // |remaining_frames| and |has_damage| are not transmitted. |
| 220 EXPECT_EQ(0u, output.remaining_frames); |
| 221 EXPECT_FALSE(output.has_damage); |
| 222 } |
| 223 |
188 // Note that this is a fairly trivial test of CompositorFrame serialization as | 224 // Note that this is a fairly trivial test of CompositorFrame serialization as |
189 // most of the heavy lifting has already been done by CompositorFrameMetadata, | 225 // most of the heavy lifting has already been done by CompositorFrameMetadata, |
190 // RenderPass, and QuadListBasic unit tests. | 226 // RenderPass, and QuadListBasic unit tests. |
191 TEST_F(StructTraitsTest, CompositorFrame) { | 227 TEST_F(StructTraitsTest, CompositorFrame) { |
192 std::unique_ptr<RenderPass> render_pass = RenderPass::Create(); | 228 std::unique_ptr<RenderPass> render_pass = RenderPass::Create(); |
193 render_pass->SetNew(1, gfx::Rect(5, 6), gfx::Rect(2, 3), gfx::Transform()); | 229 render_pass->SetNew(1, gfx::Rect(5, 6), gfx::Rect(2, 3), gfx::Transform()); |
194 | 230 |
195 // SharedQuadState. | 231 // SharedQuadState. |
196 const gfx::Transform sqs_quad_to_target_transform( | 232 const gfx::Transform sqs_quad_to_target_transform( |
197 1.f, 2.f, 3.f, 4.f, 5.f, 6.f, 7.f, 8.f, 9.f, 10.f, 11.f, 12.f, 13.f, 14.f, | 233 1.f, 2.f, 3.f, 4.f, 5.f, 6.f, 7.f, 8.f, 9.f, 10.f, 11.f, 12.f, 13.f, 14.f, |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 resource.buffer_format = tr_buffer_format; | 272 resource.buffer_format = tr_buffer_format; |
237 resource.filter = tr_filter; | 273 resource.filter = tr_filter; |
238 resource.size = tr_size; | 274 resource.size = tr_size; |
239 | 275 |
240 // CompositorFrameMetadata constants. | 276 // CompositorFrameMetadata constants. |
241 const float device_scale_factor = 2.6f; | 277 const float device_scale_factor = 2.6f; |
242 const gfx::Vector2dF root_scroll_offset(1234.5f, 6789.1f); | 278 const gfx::Vector2dF root_scroll_offset(1234.5f, 6789.1f); |
243 const float page_scale_factor = 1337.5f; | 279 const float page_scale_factor = 1337.5f; |
244 const gfx::SizeF scrollable_viewport_size(1337.7f, 1234.5f); | 280 const gfx::SizeF scrollable_viewport_size(1337.7f, 1234.5f); |
245 const uint32_t content_source_id = 3; | 281 const uint32_t content_source_id = 3; |
| 282 const BeginFrameAck begin_frame_ack(5, 10, 8, 0, false); |
246 | 283 |
247 CompositorFrame input; | 284 CompositorFrame input; |
248 input.metadata.device_scale_factor = device_scale_factor; | 285 input.metadata.device_scale_factor = device_scale_factor; |
249 input.metadata.root_scroll_offset = root_scroll_offset; | 286 input.metadata.root_scroll_offset = root_scroll_offset; |
250 input.metadata.page_scale_factor = page_scale_factor; | 287 input.metadata.page_scale_factor = page_scale_factor; |
251 input.metadata.scrollable_viewport_size = scrollable_viewport_size; | 288 input.metadata.scrollable_viewport_size = scrollable_viewport_size; |
252 input.render_pass_list.push_back(std::move(render_pass)); | 289 input.render_pass_list.push_back(std::move(render_pass)); |
253 input.resource_list.push_back(resource); | 290 input.resource_list.push_back(resource); |
254 input.metadata.content_source_id = content_source_id; | 291 input.metadata.content_source_id = content_source_id; |
| 292 input.metadata.begin_frame_ack = begin_frame_ack; |
255 | 293 |
256 mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy(); | 294 mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy(); |
257 CompositorFrame output; | 295 CompositorFrame output; |
258 proxy->EchoCompositorFrame(std::move(input), &output); | 296 proxy->EchoCompositorFrame(std::move(input), &output); |
259 | 297 |
260 EXPECT_EQ(device_scale_factor, output.metadata.device_scale_factor); | 298 EXPECT_EQ(device_scale_factor, output.metadata.device_scale_factor); |
261 EXPECT_EQ(root_scroll_offset, output.metadata.root_scroll_offset); | 299 EXPECT_EQ(root_scroll_offset, output.metadata.root_scroll_offset); |
262 EXPECT_EQ(page_scale_factor, output.metadata.page_scale_factor); | 300 EXPECT_EQ(page_scale_factor, output.metadata.page_scale_factor); |
263 EXPECT_EQ(scrollable_viewport_size, output.metadata.scrollable_viewport_size); | 301 EXPECT_EQ(scrollable_viewport_size, output.metadata.scrollable_viewport_size); |
264 EXPECT_EQ(content_source_id, output.metadata.content_source_id); | 302 EXPECT_EQ(content_source_id, output.metadata.content_source_id); |
| 303 EXPECT_EQ(begin_frame_ack, output.metadata.begin_frame_ack); |
265 | 304 |
266 ASSERT_EQ(1u, output.resource_list.size()); | 305 ASSERT_EQ(1u, output.resource_list.size()); |
267 TransferableResource out_resource = output.resource_list[0]; | 306 TransferableResource out_resource = output.resource_list[0]; |
268 EXPECT_EQ(tr_id, out_resource.id); | 307 EXPECT_EQ(tr_id, out_resource.id); |
269 EXPECT_EQ(tr_format, out_resource.format); | 308 EXPECT_EQ(tr_format, out_resource.format); |
270 EXPECT_EQ(tr_buffer_format, out_resource.buffer_format); | 309 EXPECT_EQ(tr_buffer_format, out_resource.buffer_format); |
271 EXPECT_EQ(tr_filter, out_resource.filter); | 310 EXPECT_EQ(tr_filter, out_resource.filter); |
272 EXPECT_EQ(tr_size, out_resource.size); | 311 EXPECT_EQ(tr_size, out_resource.size); |
273 | 312 |
274 EXPECT_EQ(1u, output.render_pass_list.size()); | 313 EXPECT_EQ(1u, output.render_pass_list.size()); |
(...skipping 917 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1192 EXPECT_EQ(u_plane_resource_id, out_quad->u_plane_resource_id()); | 1231 EXPECT_EQ(u_plane_resource_id, out_quad->u_plane_resource_id()); |
1193 EXPECT_EQ(v_plane_resource_id, out_quad->v_plane_resource_id()); | 1232 EXPECT_EQ(v_plane_resource_id, out_quad->v_plane_resource_id()); |
1194 EXPECT_EQ(a_plane_resource_id, out_quad->a_plane_resource_id()); | 1233 EXPECT_EQ(a_plane_resource_id, out_quad->a_plane_resource_id()); |
1195 EXPECT_EQ(color_space, out_quad->color_space); | 1234 EXPECT_EQ(color_space, out_quad->color_space); |
1196 EXPECT_EQ(resource_offset, out_quad->resource_offset); | 1235 EXPECT_EQ(resource_offset, out_quad->resource_offset); |
1197 EXPECT_EQ(resource_multiplier, out_quad->resource_multiplier); | 1236 EXPECT_EQ(resource_multiplier, out_quad->resource_multiplier); |
1198 EXPECT_EQ(bits_per_channel, out_quad->bits_per_channel); | 1237 EXPECT_EQ(bits_per_channel, out_quad->bits_per_channel); |
1199 } | 1238 } |
1200 | 1239 |
1201 } // namespace cc | 1240 } // namespace cc |
OLD | NEW |