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/traits_test_service.mojom.h" | 9 #include "cc/ipc/traits_test_service.mojom.h" |
9 #include "cc/output/copy_output_result.h" | 10 #include "cc/output/copy_output_result.h" |
10 #include "cc/quads/debug_border_draw_quad.h" | 11 #include "cc/quads/debug_border_draw_quad.h" |
11 #include "cc/quads/render_pass.h" | 12 #include "cc/quads/render_pass.h" |
12 #include "cc/quads/render_pass_draw_quad.h" | 13 #include "cc/quads/render_pass_draw_quad.h" |
13 #include "cc/quads/solid_color_draw_quad.h" | 14 #include "cc/quads/solid_color_draw_quad.h" |
14 #include "cc/quads/stream_video_draw_quad.h" | 15 #include "cc/quads/stream_video_draw_quad.h" |
15 #include "cc/quads/surface_draw_quad.h" | 16 #include "cc/quads/surface_draw_quad.h" |
16 #include "cc/quads/texture_draw_quad.h" | 17 #include "cc/quads/texture_draw_quad.h" |
17 #include "cc/quads/yuv_video_draw_quad.h" | 18 #include "cc/quads/yuv_video_draw_quad.h" |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
123 void EchoTransferableResource( | 124 void EchoTransferableResource( |
124 const TransferableResource& t, | 125 const TransferableResource& t, |
125 const EchoTransferableResourceCallback& callback) override { | 126 const EchoTransferableResourceCallback& callback) override { |
126 callback.Run(t); | 127 callback.Run(t); |
127 } | 128 } |
128 | 129 |
129 mojo::BindingSet<TraitsTestService> traits_test_bindings_; | 130 mojo::BindingSet<TraitsTestService> traits_test_bindings_; |
130 DISALLOW_COPY_AND_ASSIGN(StructTraitsTest); | 131 DISALLOW_COPY_AND_ASSIGN(StructTraitsTest); |
131 }; | 132 }; |
132 | 133 |
133 void StubCopyOutputRequestCallback(std::unique_ptr<CopyOutputResult> result) {} | 134 void CopyOutputRequestCallback(base::Closure quit_closure, |
| 135 gfx::Size expected_size, |
| 136 std::unique_ptr<CopyOutputResult> result) { |
| 137 EXPECT_EQ(expected_size, result->size()); |
| 138 quit_closure.Run(); |
| 139 } |
| 140 |
| 141 void CopyOutputRequestCallbackRunsOnceCallback( |
| 142 int* n_called, |
| 143 std::unique_ptr<CopyOutputResult> result) { |
| 144 ++*n_called; |
| 145 } |
| 146 |
| 147 void CopyOutputRequestMessagePipeBrokenCallback( |
| 148 base::Closure closure, |
| 149 std::unique_ptr<CopyOutputResult> result) { |
| 150 EXPECT_TRUE(result->IsEmpty()); |
| 151 closure.Run(); |
| 152 } |
134 | 153 |
135 void CopyOutputResultCallback(base::Closure quit_closure, | 154 void CopyOutputResultCallback(base::Closure quit_closure, |
136 const gpu::SyncToken& expected_sync_token, | 155 const gpu::SyncToken& expected_sync_token, |
137 bool expected_is_lost, | 156 bool expected_is_lost, |
138 const gpu::SyncToken& sync_token, | 157 const gpu::SyncToken& sync_token, |
139 bool is_lost) { | 158 bool is_lost) { |
140 EXPECT_EQ(expected_sync_token, sync_token); | 159 EXPECT_EQ(expected_sync_token, sync_token); |
141 EXPECT_EQ(expected_is_lost, is_lost); | 160 EXPECT_EQ(expected_is_lost, is_lost); |
142 quit_closure.Run(); | 161 quit_closure.Run(); |
143 } | 162 } |
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
363 ui::LatencyInfo::LatencyComponent component; | 382 ui::LatencyInfo::LatencyComponent component; |
364 EXPECT_TRUE(output.latency_info[0].FindLatency( | 383 EXPECT_TRUE(output.latency_info[0].FindLatency( |
365 ui::LATENCY_BEGIN_SCROLL_LISTENER_UPDATE_MAIN_COMPONENT, 1337, | 384 ui::LATENCY_BEGIN_SCROLL_LISTENER_UPDATE_MAIN_COMPONENT, 1337, |
366 &component)); | 385 &component)); |
367 EXPECT_EQ(7331, component.sequence_number); | 386 EXPECT_EQ(7331, component.sequence_number); |
368 EXPECT_EQ(referenced_surfaces.size(), output.referenced_surfaces.size()); | 387 EXPECT_EQ(referenced_surfaces.size(), output.referenced_surfaces.size()); |
369 for (uint32_t i = 0; i < referenced_surfaces.size(); ++i) | 388 for (uint32_t i = 0; i < referenced_surfaces.size(); ++i) |
370 EXPECT_EQ(referenced_surfaces[i], output.referenced_surfaces[i]); | 389 EXPECT_EQ(referenced_surfaces[i], output.referenced_surfaces[i]); |
371 } | 390 } |
372 | 391 |
373 TEST_F(StructTraitsTest, CopyOutputRequest) { | 392 TEST_F(StructTraitsTest, CopyOutputRequest_BitmapRequest) { |
374 const gfx::Rect area(5, 7, 44, 55); | 393 const gfx::Rect area(5, 7, 44, 55); |
375 const auto callback = base::Bind(StubCopyOutputRequestCallback); | |
376 const int8_t mailbox_name[GL_MAILBOX_SIZE_CHROMIUM] = { | |
377 0, 9, 8, 7, 6, 5, 4, 3, 2, 1, 9, 7, 5, 3, 1, 3}; | |
378 const uint32_t target = 3; | |
379 const auto source = | 394 const auto source = |
380 base::UnguessableToken::Deserialize(0xdeadbeef, 0xdeadf00d); | 395 base::UnguessableToken::Deserialize(0xdeadbeef, 0xdeadf00d); |
381 gpu::Mailbox mailbox; | 396 gfx::Size size(9, 8); |
382 mailbox.SetName(mailbox_name); | 397 auto bitmap = base::MakeUnique<SkBitmap>(); |
383 TextureMailbox texture_mailbox(mailbox, gpu::SyncToken(), target); | 398 bitmap->allocN32Pixels(size.width(), size.height()); |
| 399 base::RunLoop run_loop; |
| 400 auto callback = |
| 401 base::Bind(CopyOutputRequestCallback, run_loop.QuitClosure(), size); |
384 | 402 |
385 // Test with bitmap. | |
386 std::unique_ptr<CopyOutputRequest> input; | 403 std::unique_ptr<CopyOutputRequest> input; |
387 input = CopyOutputRequest::CreateBitmapRequest(callback); | 404 input = CopyOutputRequest::CreateBitmapRequest(callback); |
388 input->set_area(area); | 405 input->set_area(area); |
389 input->set_source(source); | 406 input->set_source(source); |
390 mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy(); | 407 mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy(); |
391 std::unique_ptr<CopyOutputRequest> output; | 408 std::unique_ptr<CopyOutputRequest> output; |
392 proxy->EchoCopyOutputRequest(std::move(input), &output); | 409 proxy->EchoCopyOutputRequest(std::move(input), &output); |
393 | 410 |
394 EXPECT_TRUE(output->force_bitmap_result()); | 411 EXPECT_TRUE(output->force_bitmap_result()); |
395 EXPECT_FALSE(output->has_texture_mailbox()); | 412 EXPECT_FALSE(output->has_texture_mailbox()); |
396 EXPECT_TRUE(output->has_area()); | 413 EXPECT_TRUE(output->has_area()); |
397 EXPECT_EQ(area, output->area()); | 414 EXPECT_EQ(area, output->area()); |
398 EXPECT_EQ(source, output->source()); | 415 EXPECT_EQ(source, output->source()); |
| 416 output->SendBitmapResult(std::move(bitmap)); |
| 417 // If CopyOutputRequestCallback is called, this ends. Otherwise, the test |
| 418 // will time out and fail. |
| 419 run_loop.Run(); |
| 420 } |
399 | 421 |
400 // Test with texture mailbox. | 422 TEST_F(StructTraitsTest, CopyOutputRequest_TextureRequest) { |
401 input = CopyOutputRequest::CreateRequest(callback); | 423 const int8_t mailbox_name[GL_MAILBOX_SIZE_CHROMIUM] = { |
| 424 0, 9, 8, 7, 6, 5, 4, 3, 2, 1, 9, 7, 5, 3, 1, 3}; |
| 425 const uint32_t target = 3; |
| 426 gpu::Mailbox mailbox; |
| 427 mailbox.SetName(mailbox_name); |
| 428 TextureMailbox texture_mailbox(mailbox, gpu::SyncToken(), target); |
| 429 base::RunLoop run_loop; |
| 430 auto callback = base::Bind(CopyOutputRequestCallback, run_loop.QuitClosure(), |
| 431 gfx::Size()); |
| 432 |
| 433 auto input = CopyOutputRequest::CreateRequest(callback); |
402 input->SetTextureMailbox(texture_mailbox); | 434 input->SetTextureMailbox(texture_mailbox); |
403 | 435 |
404 std::unique_ptr<CopyOutputRequest> output2; | 436 mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy(); |
405 proxy->EchoCopyOutputRequest(std::move(input), &output2); | 437 std::unique_ptr<CopyOutputRequest> output; |
| 438 proxy->EchoCopyOutputRequest(std::move(input), &output); |
406 | 439 |
407 EXPECT_TRUE(output2->has_texture_mailbox()); | 440 EXPECT_TRUE(output->has_texture_mailbox()); |
408 EXPECT_FALSE(output2->has_area()); | 441 EXPECT_FALSE(output->has_area()); |
409 EXPECT_EQ(mailbox, output2->texture_mailbox().mailbox()); | 442 EXPECT_EQ(mailbox, output->texture_mailbox().mailbox()); |
410 EXPECT_EQ(target, output2->texture_mailbox().target()); | 443 EXPECT_EQ(target, output->texture_mailbox().target()); |
411 EXPECT_FALSE(output2->has_source()); | 444 EXPECT_FALSE(output->has_source()); |
| 445 output->SendEmptyResult(); |
| 446 // If CopyOutputRequestCallback is called, this ends. Otherwise, the test |
| 447 // will time out and fail. |
| 448 run_loop.Run(); |
| 449 } |
| 450 |
| 451 TEST_F(StructTraitsTest, CopyOutputRequest_CallbackRunsOnce) { |
| 452 int n_called = 0; |
| 453 auto request = CopyOutputRequest::CreateRequest( |
| 454 base::Bind(CopyOutputRequestCallbackRunsOnceCallback, &n_called)); |
| 455 auto result_sender = mojo::StructTraits< |
| 456 mojom::CopyOutputRequestDataView, |
| 457 std::unique_ptr<CopyOutputRequest>>::result_sender(request); |
| 458 for (int i = 0; i < 10; i++) |
| 459 result_sender->SendResult(CopyOutputResult::CreateEmptyResult()); |
| 460 EXPECT_EQ(0, n_called); |
| 461 result_sender.FlushForTesting(); |
| 462 EXPECT_EQ(1, n_called); |
| 463 } |
| 464 |
| 465 TEST_F(StructTraitsTest, CopyOutputRequest_MessagePipeBroken) { |
| 466 base::RunLoop run_loop; |
| 467 auto request = CopyOutputRequest::CreateRequest(base::Bind( |
| 468 CopyOutputRequestMessagePipeBrokenCallback, run_loop.QuitClosure())); |
| 469 auto result_sender = mojo::StructTraits< |
| 470 mojom::CopyOutputRequestDataView, |
| 471 std::unique_ptr<CopyOutputRequest>>::result_sender(request); |
| 472 result_sender.reset(); |
| 473 // The callback must be called with an empty CopyOutputResult. If it's never |
| 474 // called, this will never end and the test times out. |
| 475 run_loop.Run(); |
412 } | 476 } |
413 | 477 |
414 TEST_F(StructTraitsTest, CopyOutputResult_Bitmap) { | 478 TEST_F(StructTraitsTest, CopyOutputResult_Bitmap) { |
415 auto bitmap = base::MakeUnique<SkBitmap>(); | 479 auto bitmap = base::MakeUnique<SkBitmap>(); |
416 bitmap->allocN32Pixels(7, 8); | 480 bitmap->allocN32Pixels(7, 8); |
417 bitmap->eraseARGB(123, 213, 77, 33); | 481 bitmap->eraseARGB(123, 213, 77, 33); |
418 auto in_bitmap = base::MakeUnique<SkBitmap>(); | 482 auto in_bitmap = base::MakeUnique<SkBitmap>(); |
419 bitmap->deepCopyTo(in_bitmap.get()); | 483 bitmap->deepCopyTo(in_bitmap.get()); |
420 auto input = CopyOutputResult::CreateBitmapResult(std::move(bitmap)); | 484 auto input = CopyOutputResult::CreateBitmapResult(std::move(bitmap)); |
421 auto size = input->size(); | 485 auto size = input->size(); |
(...skipping 683 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1105 EXPECT_EQ(u_plane_resource_id, out_quad->u_plane_resource_id()); | 1169 EXPECT_EQ(u_plane_resource_id, out_quad->u_plane_resource_id()); |
1106 EXPECT_EQ(v_plane_resource_id, out_quad->v_plane_resource_id()); | 1170 EXPECT_EQ(v_plane_resource_id, out_quad->v_plane_resource_id()); |
1107 EXPECT_EQ(a_plane_resource_id, out_quad->a_plane_resource_id()); | 1171 EXPECT_EQ(a_plane_resource_id, out_quad->a_plane_resource_id()); |
1108 EXPECT_EQ(color_space, out_quad->color_space); | 1172 EXPECT_EQ(color_space, out_quad->color_space); |
1109 EXPECT_EQ(resource_offset, out_quad->resource_offset); | 1173 EXPECT_EQ(resource_offset, out_quad->resource_offset); |
1110 EXPECT_EQ(resource_multiplier, out_quad->resource_multiplier); | 1174 EXPECT_EQ(resource_multiplier, out_quad->resource_multiplier); |
1111 EXPECT_EQ(bits_per_channel, out_quad->bits_per_channel); | 1175 EXPECT_EQ(bits_per_channel, out_quad->bits_per_channel); |
1112 } | 1176 } |
1113 | 1177 |
1114 } // namespace cc | 1178 } // namespace cc |
OLD | NEW |