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

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

Issue 2686833003: CopyOutputResult must have a working release 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_result_struct_traits.cc ('k') | cc/ipc/texture_mailbox_releaser.mojom » ('j') | 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 "cc/input/selection.h" 7 #include "cc/input/selection.h"
7 #include "cc/ipc/traits_test_service.mojom.h" 8 #include "cc/ipc/traits_test_service.mojom.h"
8 #include "cc/output/copy_output_result.h" 9 #include "cc/output/copy_output_result.h"
9 #include "cc/quads/debug_border_draw_quad.h" 10 #include "cc/quads/debug_border_draw_quad.h"
10 #include "cc/quads/render_pass.h" 11 #include "cc/quads/render_pass.h"
11 #include "cc/quads/render_pass_draw_quad.h" 12 #include "cc/quads/render_pass_draw_quad.h"
12 #include "cc/quads/solid_color_draw_quad.h" 13 #include "cc/quads/solid_color_draw_quad.h"
13 #include "cc/quads/stream_video_draw_quad.h" 14 #include "cc/quads/stream_video_draw_quad.h"
14 #include "cc/quads/surface_draw_quad.h" 15 #include "cc/quads/surface_draw_quad.h"
15 #include "cc/quads/texture_draw_quad.h" 16 #include "cc/quads/texture_draw_quad.h"
16 #include "cc/quads/yuv_video_draw_quad.h" 17 #include "cc/quads/yuv_video_draw_quad.h"
17 #include "mojo/public/cpp/bindings/binding_set.h" 18 #include "mojo/public/cpp/bindings/binding_set.h"
18 #include "testing/gtest/include/gtest/gtest.h" 19 #include "testing/gtest/include/gtest/gtest.h"
19 #include "third_party/skia/include/core/SkString.h" 20 #include "third_party/skia/include/core/SkString.h"
20 #include "third_party/skia/include/effects/SkDropShadowImageFilter.h" 21 #include "third_party/skia/include/effects/SkDropShadowImageFilter.h"
21 22
22 namespace cc { 23 namespace cc {
23 24
24 namespace { 25 namespace {
25 26
27 class TextureMailboxReleaserImpl : public mojom::TextureMailboxReleaser {
Ken Rockot(use gerrit already) 2017/02/10 01:17:24 I don't understand why you need more than this imp
Saman Sami 2017/02/10 01:33:53 That's a great advice! The whole point of the Prov
28 public:
29 TextureMailboxReleaserImpl(
30 std::unique_ptr<SingleReleaseCallback> release_callback,
31 mojom::TextureMailboxReleaserRequest request,
32 base::Closure quit_closure)
33 : release_callback_(std::move(release_callback)),
34 quit_closure_(quit_closure),
35 binding_(this, std::move(request)) {}
36
37 // mojom::TextureMailboxReleaser implementation:
38 void Release(const gpu::SyncToken& sync_token, bool is_lost) override {
39 release_callback_->Run(sync_token, is_lost);
40 quit_closure_.Run();
41 }
42
43 private:
44 std::unique_ptr<SingleReleaseCallback> release_callback_;
45 base::Closure quit_closure_;
46 mojo::Binding<mojom::TextureMailboxReleaser> binding_;
47 };
48
49 class TestTextureMailboxReleaserProvider
50 : public TextureMailboxReleaserProvider {
51 public:
52 void RunAllRunLoops() {
53 for (const auto& run_loop : run_loops_)
54 run_loop->Run();
55 run_loops_.clear();
56 }
57
58 // TextureMailboxReleaserProvider implementation:
59 mojom::TextureMailboxReleaserPtr GetTextureMailboxReleaser(
60 std::unique_ptr<SingleReleaseCallback> release_callback) override {
61 mojom::TextureMailboxReleaserPtr ptr;
62 auto run_loop = base::MakeUnique<base::RunLoop>();
63 auto impl = base::MakeUnique<TextureMailboxReleaserImpl>(
64 std::move(release_callback), mojo::MakeRequest(&ptr),
65 run_loop->QuitClosure());
66 impls_.push_back(std::move(impl));
67 run_loops_.push_back(std::move(run_loop));
68 return ptr;
69 }
70
71 private:
72 std::vector<std::unique_ptr<base::RunLoop>> run_loops_;
73 std::vector<std::unique_ptr<TextureMailboxReleaserImpl>> impls_;
74 };
75
26 class StructTraitsTest : public testing::Test, public mojom::TraitsTestService { 76 class StructTraitsTest : public testing::Test, public mojom::TraitsTestService {
27 public: 77 public:
28 StructTraitsTest() {} 78 StructTraitsTest() {}
29 79
30 protected: 80 protected:
31 mojom::TraitsTestServicePtr GetTraitsTestProxy() { 81 mojom::TraitsTestServicePtr GetTraitsTestProxy() {
32 return traits_test_bindings_.CreateInterfacePtrAndBind(this); 82 return traits_test_bindings_.CreateInterfacePtrAndBind(this);
33 } 83 }
34 84
85 TestTextureMailboxReleaserProvider ptr_provider_;
86
35 private: 87 private:
36 // TraitsTestService: 88 // TraitsTestService:
37 void EchoBeginFrameArgs(const BeginFrameArgs& b, 89 void EchoBeginFrameArgs(const BeginFrameArgs& b,
38 const EchoBeginFrameArgsCallback& callback) override { 90 const EchoBeginFrameArgsCallback& callback) override {
39 callback.Run(b); 91 callback.Run(b);
40 } 92 }
41 93
42 void EchoCompositorFrame( 94 void EchoCompositorFrame(
43 CompositorFrame c, 95 CompositorFrame c,
44 const EchoCompositorFrameCallback& callback) override { 96 const EchoCompositorFrameCallback& callback) override {
45 callback.Run(std::move(c)); 97 callback.Run(std::move(c));
46 } 98 }
47 99
48 void EchoCompositorFrameMetadata( 100 void EchoCompositorFrameMetadata(
49 const CompositorFrameMetadata& c, 101 const CompositorFrameMetadata& c,
50 const EchoCompositorFrameMetadataCallback& callback) override { 102 const EchoCompositorFrameMetadataCallback& callback) override {
51 callback.Run(c); 103 callback.Run(c);
52 } 104 }
53 105
54 void EchoCopyOutputRequest( 106 void EchoCopyOutputRequest(
55 std::unique_ptr<CopyOutputRequest> c, 107 std::unique_ptr<CopyOutputRequest> c,
56 const EchoCopyOutputRequestCallback& callback) override { 108 const EchoCopyOutputRequestCallback& callback) override {
57 callback.Run(std::move(c)); 109 callback.Run(std::move(c));
58 } 110 }
59 111
60 void EchoCopyOutputResult( 112 void EchoCopyOutputResult(
61 std::unique_ptr<CopyOutputResult> c, 113 std::unique_ptr<CopyOutputResult> c,
62 const EchoCopyOutputResultCallback& callback) override { 114 const EchoCopyOutputResultCallback& callback) override {
115 c->set_ptr_provider(&ptr_provider_);
63 callback.Run(std::move(c)); 116 callback.Run(std::move(c));
64 } 117 }
65 118
66 void EchoFilterOperation( 119 void EchoFilterOperation(
67 const FilterOperation& f, 120 const FilterOperation& f,
68 const EchoFilterOperationCallback& callback) override { 121 const EchoFilterOperationCallback& callback) override {
69 callback.Run(f); 122 callback.Run(f);
70 } 123 }
71 124
72 void EchoFilterOperations( 125 void EchoFilterOperations(
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 const EchoTransferableResourceCallback& callback) override { 177 const EchoTransferableResourceCallback& callback) override {
125 callback.Run(t); 178 callback.Run(t);
126 } 179 }
127 180
128 mojo::BindingSet<TraitsTestService> traits_test_bindings_; 181 mojo::BindingSet<TraitsTestService> traits_test_bindings_;
129 DISALLOW_COPY_AND_ASSIGN(StructTraitsTest); 182 DISALLOW_COPY_AND_ASSIGN(StructTraitsTest);
130 }; 183 };
131 184
132 void StubCopyOutputRequestCallback(std::unique_ptr<CopyOutputResult> result) {} 185 void StubCopyOutputRequestCallback(std::unique_ptr<CopyOutputResult> result) {}
133 186
134 void StubCopyOutputResultCallback(const gpu::SyncToken& sync_token, 187 void CopyOutputResultCallback(bool* is_called,
135 bool is_lost) {} 188 const gpu::SyncToken& sync_token,
189 bool is_lost) {
190 *is_called = true;
191 }
136 192
137 } // namespace 193 } // namespace
138 194
139 TEST_F(StructTraitsTest, BeginFrameArgs) { 195 TEST_F(StructTraitsTest, BeginFrameArgs) {
140 const base::TimeTicks frame_time = base::TimeTicks::Now(); 196 const base::TimeTicks frame_time = base::TimeTicks::Now();
141 const base::TimeTicks deadline = base::TimeTicks::Now(); 197 const base::TimeTicks deadline = base::TimeTicks::Now();
142 const base::TimeDelta interval = base::TimeDelta::FromMilliseconds(1337); 198 const base::TimeDelta interval = base::TimeDelta::FromMilliseconds(1337);
143 const BeginFrameArgs::BeginFrameArgsType type = BeginFrameArgs::NORMAL; 199 const BeginFrameArgs::BeginFrameArgsType type = BeginFrameArgs::NORMAL;
144 const bool on_critical_path = true; 200 const bool on_critical_path = true;
145 BeginFrameArgs input; 201 BeginFrameArgs input;
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 EXPECT_EQ(in_bitmap->getSize(), out_bitmap->getSize()); 480 EXPECT_EQ(in_bitmap->getSize(), out_bitmap->getSize());
425 EXPECT_EQ(0, std::memcmp(in_bitmap->getPixels(), out_bitmap->getPixels(), 481 EXPECT_EQ(0, std::memcmp(in_bitmap->getPixels(), out_bitmap->getPixels(),
426 in_bitmap->getSize())); 482 in_bitmap->getSize()));
427 } 483 }
428 484
429 TEST_F(StructTraitsTest, CopyOutputResult_Texture) { 485 TEST_F(StructTraitsTest, CopyOutputResult_Texture) {
430 const gfx::Size size(1234, 5678); 486 const gfx::Size size(1234, 5678);
431 const int8_t mailbox_name[GL_MAILBOX_SIZE_CHROMIUM] = { 487 const int8_t mailbox_name[GL_MAILBOX_SIZE_CHROMIUM] = {
432 0, 9, 8, 7, 6, 5, 4, 3, 2, 1, 9, 7, 5, 3, 1, 3}; 488 0, 9, 8, 7, 6, 5, 4, 3, 2, 1, 9, 7, 5, 3, 1, 3};
433 const uint32_t target = 3; 489 const uint32_t target = 3;
434 auto callback = 490 bool is_called = false;
435 SingleReleaseCallback::Create(base::Bind(StubCopyOutputResultCallback)); 491 auto callback = SingleReleaseCallback::Create(
492 base::Bind(CopyOutputResultCallback, &is_called));
436 gpu::Mailbox mailbox; 493 gpu::Mailbox mailbox;
437 mailbox.SetName(mailbox_name); 494 mailbox.SetName(mailbox_name);
438 TextureMailbox texture_mailbox(mailbox, gpu::SyncToken(), target); 495 TextureMailbox texture_mailbox(mailbox, gpu::SyncToken(), target);
439 496
440 auto input = CopyOutputResult::CreateTextureResult(size, texture_mailbox, 497 auto input = CopyOutputResult::CreateTextureResult(size, texture_mailbox,
441 std::move(callback)); 498 std::move(callback));
499 input->set_ptr_provider(&ptr_provider_);
442 500
443 mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy(); 501 mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy();
444 std::unique_ptr<CopyOutputResult> output; 502 std::unique_ptr<CopyOutputResult> output;
445 proxy->EchoCopyOutputResult(std::move(input), &output); 503 proxy->EchoCopyOutputResult(std::move(input), &output);
446 504
447 EXPECT_FALSE(output->HasBitmap()); 505 EXPECT_FALSE(output->HasBitmap());
448 EXPECT_TRUE(output->HasTexture()); 506 EXPECT_TRUE(output->HasTexture());
449 EXPECT_EQ(size, output->size()); 507 EXPECT_EQ(size, output->size());
450 508
451 TextureMailbox out_mailbox; 509 TextureMailbox out_mailbox;
452 std::unique_ptr<SingleReleaseCallback> out_callback; 510 std::unique_ptr<SingleReleaseCallback> out_callback;
453 output->TakeTexture(&out_mailbox, &out_callback); 511 output->TakeTexture(&out_mailbox, &out_callback);
454 EXPECT_EQ(mailbox, out_mailbox.mailbox()); 512 EXPECT_EQ(mailbox, out_mailbox.mailbox());
513 EXPECT_FALSE(is_called);
514 out_callback->Run(gpu::SyncToken(), true);
515 ptr_provider_.RunAllRunLoops();
516 EXPECT_TRUE(is_called);
455 } 517 }
456 518
457 TEST_F(StructTraitsTest, FilterOperation) { 519 TEST_F(StructTraitsTest, FilterOperation) {
458 const FilterOperation inputs[] = { 520 const FilterOperation inputs[] = {
459 FilterOperation::CreateBlurFilter(20), 521 FilterOperation::CreateBlurFilter(20),
460 FilterOperation::CreateDropShadowFilter(gfx::Point(4, 4), 4.0f, 522 FilterOperation::CreateDropShadowFilter(gfx::Point(4, 4), 4.0f,
461 SkColorSetARGB(255, 40, 0, 0)), 523 SkColorSetARGB(255, 40, 0, 0)),
462 FilterOperation::CreateReferenceFilter(SkDropShadowImageFilter::Make( 524 FilterOperation::CreateReferenceFilter(SkDropShadowImageFilter::Make(
463 SkIntToScalar(3), SkIntToScalar(8), SkIntToScalar(4), 525 SkIntToScalar(3), SkIntToScalar(8), SkIntToScalar(4),
464 SkIntToScalar(9), SK_ColorBLACK, 526 SkIntToScalar(9), SK_ColorBLACK,
(...skipping 617 matching lines...) Expand 10 before | Expand all | Expand 10 after
1082 EXPECT_EQ(u_plane_resource_id, out_quad->u_plane_resource_id()); 1144 EXPECT_EQ(u_plane_resource_id, out_quad->u_plane_resource_id());
1083 EXPECT_EQ(v_plane_resource_id, out_quad->v_plane_resource_id()); 1145 EXPECT_EQ(v_plane_resource_id, out_quad->v_plane_resource_id());
1084 EXPECT_EQ(a_plane_resource_id, out_quad->a_plane_resource_id()); 1146 EXPECT_EQ(a_plane_resource_id, out_quad->a_plane_resource_id());
1085 EXPECT_EQ(color_space, out_quad->color_space); 1147 EXPECT_EQ(color_space, out_quad->color_space);
1086 EXPECT_EQ(resource_offset, out_quad->resource_offset); 1148 EXPECT_EQ(resource_offset, out_quad->resource_offset);
1087 EXPECT_EQ(resource_multiplier, out_quad->resource_multiplier); 1149 EXPECT_EQ(resource_multiplier, out_quad->resource_multiplier);
1088 EXPECT_EQ(bits_per_channel, out_quad->bits_per_channel); 1150 EXPECT_EQ(bits_per_channel, out_quad->bits_per_channel);
1089 } 1151 }
1090 1152
1091 } // namespace cc 1153 } // namespace cc
OLDNEW
« no previous file with comments | « cc/ipc/copy_output_result_struct_traits.cc ('k') | cc/ipc/texture_mailbox_releaser.mojom » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698