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