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

Side by Side Diff: cc/layers/texture_layer_unittest.cc

Issue 812543002: Update from https://crrev.com/308331 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years 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/layers/texture_layer_impl.cc ('k') | cc/layers/tiled_layer_impl.cc » ('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 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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 "cc/layers/texture_layer.h" 5 #include "cc/layers/texture_layer.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 DISALLOW_COPY_AND_ASSIGN(FakeTextureLayerClient); 94 DISALLOW_COPY_AND_ASSIGN(FakeTextureLayerClient);
95 }; 95 };
96 96
97 class MockMailboxCallback { 97 class MockMailboxCallback {
98 public: 98 public:
99 MOCK_METHOD3(Release, 99 MOCK_METHOD3(Release,
100 void(const gpu::Mailbox& mailbox, 100 void(const gpu::Mailbox& mailbox,
101 uint32 sync_point, 101 uint32 sync_point,
102 bool lost_resource)); 102 bool lost_resource));
103 MOCK_METHOD3(Release2, 103 MOCK_METHOD3(Release2,
104 void(base::SharedMemory* shared_memory, 104 void(SharedBitmap* shared_bitmap,
105 uint32 sync_point, 105 uint32 sync_point,
106 bool lost_resource)); 106 bool lost_resource));
107 MOCK_METHOD4(ReleaseImpl, 107 MOCK_METHOD4(ReleaseImpl,
108 void(const gpu::Mailbox& mailbox, 108 void(const gpu::Mailbox& mailbox,
109 uint32 sync_point, 109 uint32 sync_point,
110 bool lost_resource, 110 bool lost_resource,
111 BlockingTaskRunner* main_thread_task_runner)); 111 BlockingTaskRunner* main_thread_task_runner));
112 MOCK_METHOD4(ReleaseImpl2, 112 MOCK_METHOD4(ReleaseImpl2,
113 void(base::SharedMemory* shared_memory, 113 void(SharedBitmap* shared_bitmap,
114 uint32 sync_point, 114 uint32 sync_point,
115 bool lost_resource, 115 bool lost_resource,
116 BlockingTaskRunner* main_thread_task_runner)); 116 BlockingTaskRunner* main_thread_task_runner));
117 }; 117 };
118 118
119 struct CommonMailboxObjects { 119 struct CommonMailboxObjects {
120 CommonMailboxObjects() 120 explicit CommonMailboxObjects(SharedBitmapManager* manager)
121 : mailbox_name1_(MailboxFromChar('1')), 121 : mailbox_name1_(MailboxFromChar('1')),
122 mailbox_name2_(MailboxFromChar('2')), 122 mailbox_name2_(MailboxFromChar('2')),
123 sync_point1_(1), 123 sync_point1_(1),
124 sync_point2_(2), 124 sync_point2_(2) {
125 shared_memory_(new base::SharedMemory) {
126 release_mailbox1_ = base::Bind(&MockMailboxCallback::Release, 125 release_mailbox1_ = base::Bind(&MockMailboxCallback::Release,
127 base::Unretained(&mock_callback_), 126 base::Unretained(&mock_callback_),
128 mailbox_name1_); 127 mailbox_name1_);
129 release_mailbox2_ = base::Bind(&MockMailboxCallback::Release, 128 release_mailbox2_ = base::Bind(&MockMailboxCallback::Release,
130 base::Unretained(&mock_callback_), 129 base::Unretained(&mock_callback_),
131 mailbox_name2_); 130 mailbox_name2_);
132 release_mailbox1_impl_ = base::Bind(&MockMailboxCallback::ReleaseImpl, 131 release_mailbox1_impl_ = base::Bind(&MockMailboxCallback::ReleaseImpl,
133 base::Unretained(&mock_callback_), 132 base::Unretained(&mock_callback_),
134 mailbox_name1_); 133 mailbox_name1_);
135 release_mailbox2_impl_ = base::Bind(&MockMailboxCallback::ReleaseImpl, 134 release_mailbox2_impl_ = base::Bind(&MockMailboxCallback::ReleaseImpl,
136 base::Unretained(&mock_callback_), 135 base::Unretained(&mock_callback_),
137 mailbox_name2_); 136 mailbox_name2_);
138 const uint32 arbitrary_target1 = GL_TEXTURE_2D; 137 const uint32 arbitrary_target1 = GL_TEXTURE_2D;
139 const uint32 arbitrary_target2 = GL_TEXTURE_EXTERNAL_OES; 138 const uint32 arbitrary_target2 = GL_TEXTURE_EXTERNAL_OES;
140 mailbox1_ = TextureMailbox(mailbox_name1_, arbitrary_target1, sync_point1_); 139 mailbox1_ = TextureMailbox(mailbox_name1_, arbitrary_target1, sync_point1_);
141 mailbox2_ = TextureMailbox(mailbox_name2_, arbitrary_target2, sync_point2_); 140 mailbox2_ = TextureMailbox(mailbox_name2_, arbitrary_target2, sync_point2_);
142 gfx::Size size(128, 128); 141 gfx::Size size(128, 128);
143 EXPECT_TRUE(shared_memory_->CreateAndMapAnonymous(4 * size.GetArea())); 142 shared_bitmap_ = manager->AllocateSharedBitmap(size);
144 release_mailbox3_ = base::Bind(&MockMailboxCallback::Release2, 143 DCHECK(shared_bitmap_);
145 base::Unretained(&mock_callback_), 144 release_mailbox3_ =
146 shared_memory_.get()); 145 base::Bind(&MockMailboxCallback::Release2,
147 release_mailbox3_impl_ = base::Bind(&MockMailboxCallback::ReleaseImpl2, 146 base::Unretained(&mock_callback_), shared_bitmap_.get());
148 base::Unretained(&mock_callback_), 147 release_mailbox3_impl_ =
149 shared_memory_.get()); 148 base::Bind(&MockMailboxCallback::ReleaseImpl2,
150 mailbox3_ = TextureMailbox(shared_memory_.get(), size); 149 base::Unretained(&mock_callback_), shared_bitmap_.get());
150 mailbox3_ = TextureMailbox(shared_bitmap_.get(), size);
151 } 151 }
152 152
153 gpu::Mailbox mailbox_name1_; 153 gpu::Mailbox mailbox_name1_;
154 gpu::Mailbox mailbox_name2_; 154 gpu::Mailbox mailbox_name2_;
155 MockMailboxCallback mock_callback_; 155 MockMailboxCallback mock_callback_;
156 ReleaseCallback release_mailbox1_; 156 ReleaseCallback release_mailbox1_;
157 ReleaseCallback release_mailbox2_; 157 ReleaseCallback release_mailbox2_;
158 ReleaseCallback release_mailbox3_; 158 ReleaseCallback release_mailbox3_;
159 ReleaseCallbackImpl release_mailbox1_impl_; 159 ReleaseCallbackImpl release_mailbox1_impl_;
160 ReleaseCallbackImpl release_mailbox2_impl_; 160 ReleaseCallbackImpl release_mailbox2_impl_;
161 ReleaseCallbackImpl release_mailbox3_impl_; 161 ReleaseCallbackImpl release_mailbox3_impl_;
162 TextureMailbox mailbox1_; 162 TextureMailbox mailbox1_;
163 TextureMailbox mailbox2_; 163 TextureMailbox mailbox2_;
164 TextureMailbox mailbox3_; 164 TextureMailbox mailbox3_;
165 uint32 sync_point1_; 165 uint32 sync_point1_;
166 uint32 sync_point2_; 166 uint32 sync_point2_;
167 scoped_ptr<base::SharedMemory> shared_memory_; 167 scoped_ptr<SharedBitmap> shared_bitmap_;
168 }; 168 };
169 169
170 class TextureLayerTest : public testing::Test { 170 class TextureLayerTest : public testing::Test {
171 public: 171 public:
172 TextureLayerTest() 172 TextureLayerTest()
173 : fake_client_( 173 : fake_client_(
174 FakeLayerTreeHostClient(FakeLayerTreeHostClient::DIRECT_3D)), 174 FakeLayerTreeHostClient(FakeLayerTreeHostClient::DIRECT_3D)),
175 host_impl_(&proxy_, &shared_bitmap_manager_) {} 175 host_impl_(&proxy_, &shared_bitmap_manager_),
176 test_data_(&shared_bitmap_manager_) {}
176 177
177 protected: 178 protected:
178 virtual void SetUp() { 179 virtual void SetUp() {
179 layer_tree_host_.reset(new MockLayerTreeHost(&fake_client_)); 180 layer_tree_host_.reset(new MockLayerTreeHost(&fake_client_));
180 EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AnyNumber()); 181 EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AnyNumber());
181 layer_tree_host_->SetViewportSize(gfx::Size(10, 10)); 182 layer_tree_host_->SetViewportSize(gfx::Size(10, 10));
182 Mock::VerifyAndClearExpectations(layer_tree_host_.get()); 183 Mock::VerifyAndClearExpectations(layer_tree_host_.get());
183 } 184 }
184 185
185 virtual void TearDown() { 186 virtual void TearDown() {
186 Mock::VerifyAndClearExpectations(layer_tree_host_.get()); 187 Mock::VerifyAndClearExpectations(layer_tree_host_.get());
187 EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AnyNumber()); 188 EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AnyNumber());
188 189
189 layer_tree_host_->SetRootLayer(nullptr); 190 layer_tree_host_->SetRootLayer(nullptr);
190 layer_tree_host_ = nullptr; 191 layer_tree_host_ = nullptr;
191 } 192 }
192 193
193 scoped_ptr<MockLayerTreeHost> layer_tree_host_; 194 scoped_ptr<MockLayerTreeHost> layer_tree_host_;
194 FakeImplProxy proxy_; 195 FakeImplProxy proxy_;
195 FakeLayerTreeHostClient fake_client_; 196 FakeLayerTreeHostClient fake_client_;
196 TestSharedBitmapManager shared_bitmap_manager_; 197 TestSharedBitmapManager shared_bitmap_manager_;
197 FakeLayerTreeHostImpl host_impl_; 198 FakeLayerTreeHostImpl host_impl_;
199 CommonMailboxObjects test_data_;
198 }; 200 };
199 201
200 TEST_F(TextureLayerTest, CheckPropertyChangeCausesCorrectBehavior) { 202 TEST_F(TextureLayerTest, CheckPropertyChangeCausesCorrectBehavior) {
201 scoped_refptr<TextureLayer> test_layer = 203 scoped_refptr<TextureLayer> test_layer =
202 TextureLayer::CreateForMailbox(nullptr); 204 TextureLayer::CreateForMailbox(nullptr);
203 EXPECT_SET_NEEDS_COMMIT(1, layer_tree_host_->SetRootLayer(test_layer)); 205 EXPECT_SET_NEEDS_COMMIT(1, layer_tree_host_->SetRootLayer(test_layer));
204 206
205 // Test properties that should call SetNeedsCommit. All properties need to 207 // Test properties that should call SetNeedsCommit. All properties need to
206 // be set to new values in order for SetNeedsCommit to be called. 208 // be set to new values in order for SetNeedsCommit to be called.
207 EXPECT_SET_NEEDS_COMMIT(1, test_layer->SetFlipped(false)); 209 EXPECT_SET_NEEDS_COMMIT(1, test_layer->SetFlipped(false));
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
302 class TextureLayerWithMailboxTest : public TextureLayerTest { 304 class TextureLayerWithMailboxTest : public TextureLayerTest {
303 protected: 305 protected:
304 virtual void TearDown() { 306 virtual void TearDown() {
305 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); 307 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_);
306 EXPECT_CALL(test_data_.mock_callback_, 308 EXPECT_CALL(test_data_.mock_callback_,
307 Release(test_data_.mailbox_name1_, 309 Release(test_data_.mailbox_name1_,
308 test_data_.sync_point1_, 310 test_data_.sync_point1_,
309 false)).Times(1); 311 false)).Times(1);
310 TextureLayerTest::TearDown(); 312 TextureLayerTest::TearDown();
311 } 313 }
312
313 CommonMailboxObjects test_data_;
314 }; 314 };
315 315
316 TEST_F(TextureLayerWithMailboxTest, ReplaceMailboxOnMainThreadBeforeCommit) { 316 TEST_F(TextureLayerWithMailboxTest, ReplaceMailboxOnMainThreadBeforeCommit) {
317 scoped_refptr<TextureLayer> test_layer = 317 scoped_refptr<TextureLayer> test_layer =
318 TextureLayer::CreateForMailbox(nullptr); 318 TextureLayer::CreateForMailbox(nullptr);
319 ASSERT_TRUE(test_layer.get()); 319 ASSERT_TRUE(test_layer.get());
320 320
321 EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AnyNumber()); 321 EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AnyNumber());
322 layer_tree_host_->SetRootLayer(test_layer); 322 layer_tree_host_->SetRootLayer(test_layer);
323 Mock::VerifyAndClearExpectations(layer_tree_host_.get()); 323 Mock::VerifyAndClearExpectations(layer_tree_host_.get());
(...skipping 28 matching lines...) Expand all
352 352
353 EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AtLeast(1)); 353 EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AtLeast(1));
354 test_layer->SetTextureMailbox( 354 test_layer->SetTextureMailbox(
355 test_data_.mailbox3_, 355 test_data_.mailbox3_,
356 SingleReleaseCallback::Create(test_data_.release_mailbox3_)); 356 SingleReleaseCallback::Create(test_data_.release_mailbox3_));
357 Mock::VerifyAndClearExpectations(layer_tree_host_.get()); 357 Mock::VerifyAndClearExpectations(layer_tree_host_.get());
358 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); 358 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_);
359 359
360 EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AtLeast(1)); 360 EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AtLeast(1));
361 EXPECT_CALL(test_data_.mock_callback_, 361 EXPECT_CALL(test_data_.mock_callback_,
362 Release2(test_data_.shared_memory_.get(), 362 Release2(test_data_.shared_bitmap_.get(), 0, false)).Times(1);
363 0, false))
364 .Times(1);
365 test_layer->SetTextureMailbox(TextureMailbox(), nullptr); 363 test_layer->SetTextureMailbox(TextureMailbox(), nullptr);
366 Mock::VerifyAndClearExpectations(layer_tree_host_.get()); 364 Mock::VerifyAndClearExpectations(layer_tree_host_.get());
367 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); 365 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_);
368 366
369 // Test destructor. 367 // Test destructor.
370 EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AtLeast(1)); 368 EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AtLeast(1));
371 test_layer->SetTextureMailbox( 369 test_layer->SetTextureMailbox(
372 test_data_.mailbox1_, 370 test_data_.mailbox1_,
373 SingleReleaseCallback::Create(test_data_.release_mailbox1_)); 371 SingleReleaseCallback::Create(test_data_.release_mailbox1_));
374 } 372 }
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
445 protected: 443 protected:
446 void InitializeOnMain() { 444 void InitializeOnMain() {
447 main_thread_task_runner_ = 445 main_thread_task_runner_ =
448 BlockingTaskRunner::Create(main_thread_.message_loop_proxy()); 446 BlockingTaskRunner::Create(main_thread_.message_loop_proxy());
449 } 447 }
450 448
451 scoped_ptr<TestMailboxHolder::MainThreadReference> 449 scoped_ptr<TestMailboxHolder::MainThreadReference>
452 main_ref_; 450 main_ref_;
453 base::Thread main_thread_; 451 base::Thread main_thread_;
454 scoped_ptr<BlockingTaskRunner> main_thread_task_runner_; 452 scoped_ptr<BlockingTaskRunner> main_thread_task_runner_;
455 CommonMailboxObjects test_data_;
456 }; 453 };
457 454
458 TEST_F(TextureLayerMailboxHolderTest, TwoCompositors_BothReleaseThenMain) { 455 TEST_F(TextureLayerMailboxHolderTest, TwoCompositors_BothReleaseThenMain) {
459 scoped_refptr<TextureLayer> test_layer = 456 scoped_refptr<TextureLayer> test_layer =
460 TextureLayer::CreateForMailbox(nullptr); 457 TextureLayer::CreateForMailbox(nullptr);
461 ASSERT_TRUE(test_layer.get()); 458 ASSERT_TRUE(test_layer.get());
462 459
463 main_thread_.message_loop()->PostTask( 460 main_thread_.message_loop()->PostTask(
464 FROM_HERE, 461 FROM_HERE,
465 base::Bind(&TextureLayerMailboxHolderTest::CreateMainRef, 462 base::Bind(&TextureLayerMailboxHolderTest::CreateMainRef,
(...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after
939 } 936 }
940 937
941 bool WillDraw(TextureLayerImpl* layer, DrawMode mode) { 938 bool WillDraw(TextureLayerImpl* layer, DrawMode mode) {
942 bool will_draw = layer->WillDraw( 939 bool will_draw = layer->WillDraw(
943 mode, host_impl_.active_tree()->resource_provider()); 940 mode, host_impl_.active_tree()->resource_provider());
944 if (will_draw) 941 if (will_draw)
945 layer->DidDraw(host_impl_.active_tree()->resource_provider()); 942 layer->DidDraw(host_impl_.active_tree()->resource_provider());
946 return will_draw; 943 return will_draw;
947 } 944 }
948 945
949 CommonMailboxObjects test_data_;
950 FakeLayerTreeHostClient fake_client_; 946 FakeLayerTreeHostClient fake_client_;
951 }; 947 };
952 948
953 // Test conditions for results of TextureLayerImpl::WillDraw under 949 // Test conditions for results of TextureLayerImpl::WillDraw under
954 // different configurations of different mailbox, texture_id, and draw_mode. 950 // different configurations of different mailbox, texture_id, and draw_mode.
955 TEST_F(TextureLayerImplWithMailboxTest, TestWillDraw) { 951 TEST_F(TextureLayerImplWithMailboxTest, TestWillDraw) {
956 EXPECT_CALL( 952 EXPECT_CALL(
957 test_data_.mock_callback_, 953 test_data_.mock_callback_,
958 ReleaseImpl(test_data_.mailbox_name1_, test_data_.sync_point1_, false, _)) 954 ReleaseImpl(test_data_.mailbox_name1_, test_data_.sync_point1_, false, _))
959 .Times(AnyNumber()); 955 .Times(AnyNumber());
960 EXPECT_CALL(test_data_.mock_callback_, 956 EXPECT_CALL(test_data_.mock_callback_,
961 ReleaseImpl2(test_data_.shared_memory_.get(), 0, false, _)) 957 ReleaseImpl2(test_data_.shared_bitmap_.get(), 0, false, _))
962 .Times(AnyNumber()); 958 .Times(AnyNumber());
963 // Hardware mode. 959 // Hardware mode.
964 { 960 {
965 scoped_ptr<TextureLayerImpl> impl_layer = 961 scoped_ptr<TextureLayerImpl> impl_layer =
966 TextureLayerImpl::Create(host_impl_.active_tree(), 1); 962 TextureLayerImpl::Create(host_impl_.active_tree(), 1);
967 impl_layer->SetTextureMailbox( 963 impl_layer->SetTextureMailbox(
968 test_data_.mailbox1_, 964 test_data_.mailbox1_,
969 SingleReleaseCallbackImpl::Create(test_data_.release_mailbox1_impl_)); 965 SingleReleaseCallbackImpl::Create(test_data_.release_mailbox1_impl_));
970 EXPECT_TRUE(WillDraw(impl_layer.get(), DRAW_MODE_HARDWARE)); 966 EXPECT_TRUE(WillDraw(impl_layer.get(), DRAW_MODE_HARDWARE));
971 } 967 }
(...skipping 590 matching lines...) Expand 10 before | Expand all | Expand 10 after
1562 int callback_count_; 1558 int callback_count_;
1563 scoped_refptr<Layer> root_; 1559 scoped_refptr<Layer> root_;
1564 scoped_refptr<TextureLayer> layer_; 1560 scoped_refptr<TextureLayer> layer_;
1565 }; 1561 };
1566 1562
1567 SINGLE_AND_MULTI_THREAD_DIRECT_RENDERER_TEST_F( 1563 SINGLE_AND_MULTI_THREAD_DIRECT_RENDERER_TEST_F(
1568 TextureLayerWithMailboxImplThreadDeleted); 1564 TextureLayerWithMailboxImplThreadDeleted);
1569 1565
1570 } // namespace 1566 } // namespace
1571 } // namespace cc 1567 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layers/texture_layer_impl.cc ('k') | cc/layers/tiled_layer_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698