Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Side by Side Diff: cc/ipc/struct_traits_unittest.cc

Issue 2700533002: CopyOutputRequest must have a working result_callback_ when received over mojo (Closed)
Patch Set: c Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/ipc/copy_output_request_struct_traits.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « cc/ipc/copy_output_request_struct_traits.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698