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

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

Issue 1122393003: CC: Plumb LayerSettings parameter for cc::Layer construction. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 years, 7 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/layers/layer_perftest.cc ('k') | cc/layers/nine_patch_layer.h » ('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 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 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/layer.h" 5 #include "cc/layers/layer.h"
6 6
7 #include "base/thread_task_runner_handle.h" 7 #include "base/thread_task_runner_handle.h"
8 #include "cc/animation/keyframed_animation_curve.h" 8 #include "cc/animation/keyframed_animation_curve.h"
9 #include "cc/base/math_util.h" 9 #include "cc/base/math_util.h"
10 #include "cc/layers/layer_impl.h" 10 #include "cc/layers/layer_impl.h"
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 EXPECT_EQ(child1_.get(), grand_child2_->parent()); 108 EXPECT_EQ(child1_.get(), grand_child2_->parent());
109 109
110 ASSERT_EQ(1U, child2_->children().size()); 110 ASSERT_EQ(1U, child2_->children().size());
111 EXPECT_EQ(grand_child3_, child2_->children()[0]); 111 EXPECT_EQ(grand_child3_, child2_->children()[0]);
112 EXPECT_EQ(child2_.get(), grand_child3_->parent()); 112 EXPECT_EQ(child2_.get(), grand_child3_->parent());
113 113
114 ASSERT_EQ(0U, child3_->children().size()); 114 ASSERT_EQ(0U, child3_->children().size());
115 } 115 }
116 116
117 void CreateSimpleTestTree() { 117 void CreateSimpleTestTree() {
118 parent_ = Layer::Create(); 118 parent_ = Layer::Create(layer_settings_);
119 child1_ = Layer::Create(); 119 child1_ = Layer::Create(layer_settings_);
120 child2_ = Layer::Create(); 120 child2_ = Layer::Create(layer_settings_);
121 child3_ = Layer::Create(); 121 child3_ = Layer::Create(layer_settings_);
122 grand_child1_ = Layer::Create(); 122 grand_child1_ = Layer::Create(layer_settings_);
123 grand_child2_ = Layer::Create(); 123 grand_child2_ = Layer::Create(layer_settings_);
124 grand_child3_ = Layer::Create(); 124 grand_child3_ = Layer::Create(layer_settings_);
125 125
126 EXPECT_CALL(*layer_tree_host_, SetNeedsFullTreeSync()).Times(AnyNumber()); 126 EXPECT_CALL(*layer_tree_host_, SetNeedsFullTreeSync()).Times(AnyNumber());
127 layer_tree_host_->SetRootLayer(parent_); 127 layer_tree_host_->SetRootLayer(parent_);
128 128
129 parent_->AddChild(child1_); 129 parent_->AddChild(child1_);
130 parent_->AddChild(child2_); 130 parent_->AddChild(child2_);
131 parent_->AddChild(child3_); 131 parent_->AddChild(child3_);
132 child1_->AddChild(grand_child1_); 132 child1_->AddChild(grand_child1_);
133 child1_->AddChild(grand_child2_); 133 child1_->AddChild(grand_child2_);
134 child2_->AddChild(grand_child3_); 134 child2_->AddChild(grand_child3_);
(...skipping 10 matching lines...) Expand all
145 145
146 FakeLayerTreeHostClient fake_client_; 146 FakeLayerTreeHostClient fake_client_;
147 scoped_ptr<StrictMock<MockLayerTreeHost>> layer_tree_host_; 147 scoped_ptr<StrictMock<MockLayerTreeHost>> layer_tree_host_;
148 scoped_refptr<Layer> parent_; 148 scoped_refptr<Layer> parent_;
149 scoped_refptr<Layer> child1_; 149 scoped_refptr<Layer> child1_;
150 scoped_refptr<Layer> child2_; 150 scoped_refptr<Layer> child2_;
151 scoped_refptr<Layer> child3_; 151 scoped_refptr<Layer> child3_;
152 scoped_refptr<Layer> grand_child1_; 152 scoped_refptr<Layer> grand_child1_;
153 scoped_refptr<Layer> grand_child2_; 153 scoped_refptr<Layer> grand_child2_;
154 scoped_refptr<Layer> grand_child3_; 154 scoped_refptr<Layer> grand_child3_;
155
156 LayerSettings layer_settings_;
155 }; 157 };
156 158
157 TEST_F(LayerTest, BasicCreateAndDestroy) { 159 TEST_F(LayerTest, BasicCreateAndDestroy) {
158 scoped_refptr<Layer> test_layer = Layer::Create(); 160 scoped_refptr<Layer> test_layer = Layer::Create(layer_settings_);
159 ASSERT_TRUE(test_layer.get()); 161 ASSERT_TRUE(test_layer.get());
160 162
161 EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(0); 163 EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(0);
162 test_layer->SetLayerTreeHost(layer_tree_host_.get()); 164 test_layer->SetLayerTreeHost(layer_tree_host_.get());
163 Mock::VerifyAndClearExpectations(layer_tree_host_.get()); 165 Mock::VerifyAndClearExpectations(layer_tree_host_.get());
164 166
165 EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(0); 167 EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(0);
166 test_layer->SetLayerTreeHost(nullptr); 168 test_layer->SetLayerTreeHost(nullptr);
167 } 169 }
168 170
169 TEST_F(LayerTest, AddAndRemoveChild) { 171 TEST_F(LayerTest, AddAndRemoveChild) {
170 scoped_refptr<Layer> parent = Layer::Create(); 172 scoped_refptr<Layer> parent = Layer::Create(layer_settings_);
171 scoped_refptr<Layer> child = Layer::Create(); 173 scoped_refptr<Layer> child = Layer::Create(layer_settings_);
172 174
173 // Upon creation, layers should not have children or parent. 175 // Upon creation, layers should not have children or parent.
174 ASSERT_EQ(0U, parent->children().size()); 176 ASSERT_EQ(0U, parent->children().size());
175 EXPECT_FALSE(child->parent()); 177 EXPECT_FALSE(child->parent());
176 178
177 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, layer_tree_host_->SetRootLayer(parent)); 179 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, layer_tree_host_->SetRootLayer(parent));
178 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, parent->AddChild(child)); 180 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, parent->AddChild(child));
179 181
180 ASSERT_EQ(1U, parent->children().size()); 182 ASSERT_EQ(1U, parent->children().size());
181 EXPECT_EQ(child.get(), parent->children()[0].get()); 183 EXPECT_EQ(child.get(), parent->children()[0].get());
182 EXPECT_EQ(parent.get(), child->parent()); 184 EXPECT_EQ(parent.get(), child->parent());
183 EXPECT_EQ(parent.get(), child->RootLayer()); 185 EXPECT_EQ(parent.get(), child->RootLayer());
184 186
185 EXPECT_SET_NEEDS_FULL_TREE_SYNC(AtLeast(1), child->RemoveFromParent()); 187 EXPECT_SET_NEEDS_FULL_TREE_SYNC(AtLeast(1), child->RemoveFromParent());
186 } 188 }
187 189
188 TEST_F(LayerTest, AddSameChildTwice) { 190 TEST_F(LayerTest, AddSameChildTwice) {
189 EXPECT_CALL(*layer_tree_host_, SetNeedsFullTreeSync()).Times(AtLeast(1)); 191 EXPECT_CALL(*layer_tree_host_, SetNeedsFullTreeSync()).Times(AtLeast(1));
190 192
191 scoped_refptr<Layer> parent = Layer::Create(); 193 scoped_refptr<Layer> parent = Layer::Create(layer_settings_);
192 scoped_refptr<Layer> child = Layer::Create(); 194 scoped_refptr<Layer> child = Layer::Create(layer_settings_);
193 195
194 layer_tree_host_->SetRootLayer(parent); 196 layer_tree_host_->SetRootLayer(parent);
195 197
196 ASSERT_EQ(0u, parent->children().size()); 198 ASSERT_EQ(0u, parent->children().size());
197 199
198 parent->AddChild(child); 200 parent->AddChild(child);
199 ASSERT_EQ(1u, parent->children().size()); 201 ASSERT_EQ(1u, parent->children().size());
200 EXPECT_EQ(parent.get(), child->parent()); 202 EXPECT_EQ(parent.get(), child->parent());
201 203
202 parent->AddChild(child); 204 parent->AddChild(child);
203 ASSERT_EQ(1u, parent->children().size()); 205 ASSERT_EQ(1u, parent->children().size());
204 EXPECT_EQ(parent.get(), child->parent()); 206 EXPECT_EQ(parent.get(), child->parent());
205 } 207 }
206 208
207 TEST_F(LayerTest, InsertChild) { 209 TEST_F(LayerTest, InsertChild) {
208 scoped_refptr<Layer> parent = Layer::Create(); 210 scoped_refptr<Layer> parent = Layer::Create(layer_settings_);
209 scoped_refptr<Layer> child1 = Layer::Create(); 211 scoped_refptr<Layer> child1 = Layer::Create(layer_settings_);
210 scoped_refptr<Layer> child2 = Layer::Create(); 212 scoped_refptr<Layer> child2 = Layer::Create(layer_settings_);
211 scoped_refptr<Layer> child3 = Layer::Create(); 213 scoped_refptr<Layer> child3 = Layer::Create(layer_settings_);
212 scoped_refptr<Layer> child4 = Layer::Create(); 214 scoped_refptr<Layer> child4 = Layer::Create(layer_settings_);
213 215
214 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, layer_tree_host_->SetRootLayer(parent)); 216 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, layer_tree_host_->SetRootLayer(parent));
215 217
216 ASSERT_EQ(0U, parent->children().size()); 218 ASSERT_EQ(0U, parent->children().size());
217 219
218 // Case 1: inserting to empty list. 220 // Case 1: inserting to empty list.
219 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, parent->InsertChild(child3, 0)); 221 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, parent->InsertChild(child3, 0));
220 ASSERT_EQ(1U, parent->children().size()); 222 ASSERT_EQ(1U, parent->children().size());
221 EXPECT_EQ(child3, parent->children()[0]); 223 EXPECT_EQ(child3, parent->children()[0]);
222 EXPECT_EQ(parent.get(), child3->parent()); 224 EXPECT_EQ(parent.get(), child3->parent());
(...skipping 20 matching lines...) Expand all
243 EXPECT_EQ(child1, parent->children()[0]); 245 EXPECT_EQ(child1, parent->children()[0]);
244 EXPECT_EQ(child2, parent->children()[1]); 246 EXPECT_EQ(child2, parent->children()[1]);
245 EXPECT_EQ(child3, parent->children()[2]); 247 EXPECT_EQ(child3, parent->children()[2]);
246 EXPECT_EQ(child4, parent->children()[3]); 248 EXPECT_EQ(child4, parent->children()[3]);
247 EXPECT_EQ(parent.get(), child4->parent()); 249 EXPECT_EQ(parent.get(), child4->parent());
248 250
249 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, layer_tree_host_->SetRootLayer(nullptr)); 251 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, layer_tree_host_->SetRootLayer(nullptr));
250 } 252 }
251 253
252 TEST_F(LayerTest, InsertChildPastEndOfList) { 254 TEST_F(LayerTest, InsertChildPastEndOfList) {
253 scoped_refptr<Layer> parent = Layer::Create(); 255 scoped_refptr<Layer> parent = Layer::Create(layer_settings_);
254 scoped_refptr<Layer> child1 = Layer::Create(); 256 scoped_refptr<Layer> child1 = Layer::Create(layer_settings_);
255 scoped_refptr<Layer> child2 = Layer::Create(); 257 scoped_refptr<Layer> child2 = Layer::Create(layer_settings_);
256 258
257 ASSERT_EQ(0U, parent->children().size()); 259 ASSERT_EQ(0U, parent->children().size());
258 260
259 // insert to an out-of-bounds index 261 // insert to an out-of-bounds index
260 parent->InsertChild(child1, 53); 262 parent->InsertChild(child1, 53);
261 263
262 ASSERT_EQ(1U, parent->children().size()); 264 ASSERT_EQ(1U, parent->children().size());
263 EXPECT_EQ(child1, parent->children()[0]); 265 EXPECT_EQ(child1, parent->children()[0]);
264 266
265 // insert another child to out-of-bounds, when list is not already empty. 267 // insert another child to out-of-bounds, when list is not already empty.
266 parent->InsertChild(child2, 2459); 268 parent->InsertChild(child2, 2459);
267 269
268 ASSERT_EQ(2U, parent->children().size()); 270 ASSERT_EQ(2U, parent->children().size());
269 EXPECT_EQ(child1, parent->children()[0]); 271 EXPECT_EQ(child1, parent->children()[0]);
270 EXPECT_EQ(child2, parent->children()[1]); 272 EXPECT_EQ(child2, parent->children()[1]);
271 } 273 }
272 274
273 TEST_F(LayerTest, InsertSameChildTwice) { 275 TEST_F(LayerTest, InsertSameChildTwice) {
274 scoped_refptr<Layer> parent = Layer::Create(); 276 scoped_refptr<Layer> parent = Layer::Create(layer_settings_);
275 scoped_refptr<Layer> child1 = Layer::Create(); 277 scoped_refptr<Layer> child1 = Layer::Create(layer_settings_);
276 scoped_refptr<Layer> child2 = Layer::Create(); 278 scoped_refptr<Layer> child2 = Layer::Create(layer_settings_);
277 279
278 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, layer_tree_host_->SetRootLayer(parent)); 280 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, layer_tree_host_->SetRootLayer(parent));
279 281
280 ASSERT_EQ(0U, parent->children().size()); 282 ASSERT_EQ(0U, parent->children().size());
281 283
282 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, parent->InsertChild(child1, 0)); 284 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, parent->InsertChild(child1, 0));
283 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, parent->InsertChild(child2, 1)); 285 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, parent->InsertChild(child2, 1));
284 286
285 ASSERT_EQ(2U, parent->children().size()); 287 ASSERT_EQ(2U, parent->children().size());
286 EXPECT_EQ(child1, parent->children()[0]); 288 EXPECT_EQ(child1, parent->children()[0]);
287 EXPECT_EQ(child2, parent->children()[1]); 289 EXPECT_EQ(child2, parent->children()[1]);
288 290
289 // Inserting the same child again should cause the child to be removed and 291 // Inserting the same child again should cause the child to be removed and
290 // re-inserted at the new location. 292 // re-inserted at the new location.
291 EXPECT_SET_NEEDS_FULL_TREE_SYNC(AtLeast(1), parent->InsertChild(child1, 1)); 293 EXPECT_SET_NEEDS_FULL_TREE_SYNC(AtLeast(1), parent->InsertChild(child1, 1));
292 294
293 // child1 should now be at the end of the list. 295 // child1 should now be at the end of the list.
294 ASSERT_EQ(2U, parent->children().size()); 296 ASSERT_EQ(2U, parent->children().size());
295 EXPECT_EQ(child2, parent->children()[0]); 297 EXPECT_EQ(child2, parent->children()[0]);
296 EXPECT_EQ(child1, parent->children()[1]); 298 EXPECT_EQ(child1, parent->children()[1]);
297 299
298 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, layer_tree_host_->SetRootLayer(nullptr)); 300 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, layer_tree_host_->SetRootLayer(nullptr));
299 } 301 }
300 302
301 TEST_F(LayerTest, ReplaceChildWithNewChild) { 303 TEST_F(LayerTest, ReplaceChildWithNewChild) {
302 CreateSimpleTestTree(); 304 CreateSimpleTestTree();
303 scoped_refptr<Layer> child4 = Layer::Create(); 305 scoped_refptr<Layer> child4 = Layer::Create(layer_settings_);
304 306
305 EXPECT_FALSE(child4->parent()); 307 EXPECT_FALSE(child4->parent());
306 308
307 EXPECT_SET_NEEDS_FULL_TREE_SYNC( 309 EXPECT_SET_NEEDS_FULL_TREE_SYNC(
308 AtLeast(1), parent_->ReplaceChild(child2_.get(), child4)); 310 AtLeast(1), parent_->ReplaceChild(child2_.get(), child4));
309 EXPECT_FALSE(parent_->NeedsDisplayForTesting()); 311 EXPECT_FALSE(parent_->NeedsDisplayForTesting());
310 EXPECT_FALSE(child1_->NeedsDisplayForTesting()); 312 EXPECT_FALSE(child1_->NeedsDisplayForTesting());
311 EXPECT_FALSE(child2_->NeedsDisplayForTesting()); 313 EXPECT_FALSE(child2_->NeedsDisplayForTesting());
312 EXPECT_FALSE(child3_->NeedsDisplayForTesting()); 314 EXPECT_FALSE(child3_->NeedsDisplayForTesting());
313 EXPECT_FALSE(child4->NeedsDisplayForTesting()); 315 EXPECT_FALSE(child4->NeedsDisplayForTesting());
314 316
315 ASSERT_EQ(static_cast<size_t>(3), parent_->children().size()); 317 ASSERT_EQ(static_cast<size_t>(3), parent_->children().size());
316 EXPECT_EQ(child1_, parent_->children()[0]); 318 EXPECT_EQ(child1_, parent_->children()[0]);
317 EXPECT_EQ(child4, parent_->children()[1]); 319 EXPECT_EQ(child4, parent_->children()[1]);
318 EXPECT_EQ(child3_, parent_->children()[2]); 320 EXPECT_EQ(child3_, parent_->children()[2]);
319 EXPECT_EQ(parent_.get(), child4->parent()); 321 EXPECT_EQ(parent_.get(), child4->parent());
320 322
321 EXPECT_FALSE(child2_->parent()); 323 EXPECT_FALSE(child2_->parent());
322 } 324 }
323 325
324 TEST_F(LayerTest, ReplaceChildWithNewChildThatHasOtherParent) { 326 TEST_F(LayerTest, ReplaceChildWithNewChildThatHasOtherParent) {
325 CreateSimpleTestTree(); 327 CreateSimpleTestTree();
326 328
327 // create another simple tree with test_layer and child4. 329 // create another simple tree with test_layer and child4.
328 scoped_refptr<Layer> test_layer = Layer::Create(); 330 scoped_refptr<Layer> test_layer = Layer::Create(layer_settings_);
329 scoped_refptr<Layer> child4 = Layer::Create(); 331 scoped_refptr<Layer> child4 = Layer::Create(layer_settings_);
330 test_layer->AddChild(child4); 332 test_layer->AddChild(child4);
331 ASSERT_EQ(1U, test_layer->children().size()); 333 ASSERT_EQ(1U, test_layer->children().size());
332 EXPECT_EQ(child4, test_layer->children()[0]); 334 EXPECT_EQ(child4, test_layer->children()[0]);
333 EXPECT_EQ(test_layer.get(), child4->parent()); 335 EXPECT_EQ(test_layer.get(), child4->parent());
334 336
335 EXPECT_SET_NEEDS_FULL_TREE_SYNC( 337 EXPECT_SET_NEEDS_FULL_TREE_SYNC(
336 AtLeast(1), parent_->ReplaceChild(child2_.get(), child4)); 338 AtLeast(1), parent_->ReplaceChild(child2_.get(), child4));
337 339
338 ASSERT_EQ(3U, parent_->children().size()); 340 ASSERT_EQ(3U, parent_->children().size());
339 EXPECT_EQ(child1_, parent_->children()[0]); 341 EXPECT_EQ(child1_, parent_->children()[0]);
340 EXPECT_EQ(child4, parent_->children()[1]); 342 EXPECT_EQ(child4, parent_->children()[1]);
341 EXPECT_EQ(child3_, parent_->children()[2]); 343 EXPECT_EQ(child3_, parent_->children()[2]);
342 EXPECT_EQ(parent_.get(), child4->parent()); 344 EXPECT_EQ(parent_.get(), child4->parent());
343 345
344 // test_layer should no longer have child4, 346 // test_layer should no longer have child4,
345 // and child2 should no longer have a parent. 347 // and child2 should no longer have a parent.
346 ASSERT_EQ(0U, test_layer->children().size()); 348 ASSERT_EQ(0U, test_layer->children().size());
347 EXPECT_FALSE(child2_->parent()); 349 EXPECT_FALSE(child2_->parent());
348 } 350 }
349 351
350 TEST_F(LayerTest, DeleteRemovedScrollParent) { 352 TEST_F(LayerTest, DeleteRemovedScrollParent) {
351 scoped_refptr<Layer> parent = Layer::Create(); 353 scoped_refptr<Layer> parent = Layer::Create(layer_settings_);
352 scoped_refptr<Layer> child1 = Layer::Create(); 354 scoped_refptr<Layer> child1 = Layer::Create(layer_settings_);
353 scoped_refptr<Layer> child2 = Layer::Create(); 355 scoped_refptr<Layer> child2 = Layer::Create(layer_settings_);
354 356
355 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, layer_tree_host_->SetRootLayer(parent)); 357 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, layer_tree_host_->SetRootLayer(parent));
356 358
357 ASSERT_EQ(0U, parent->children().size()); 359 ASSERT_EQ(0U, parent->children().size());
358 360
359 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, parent->InsertChild(child1, 0)); 361 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, parent->InsertChild(child1, 0));
360 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, parent->InsertChild(child2, 1)); 362 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, parent->InsertChild(child2, 1));
361 363
362 ASSERT_EQ(2U, parent->children().size()); 364 ASSERT_EQ(2U, parent->children().size());
363 EXPECT_EQ(child1, parent->children()[0]); 365 EXPECT_EQ(child1, parent->children()[0]);
364 EXPECT_EQ(child2, parent->children()[1]); 366 EXPECT_EQ(child2, parent->children()[1]);
365 367
366 EXPECT_SET_NEEDS_COMMIT(2, child1->SetScrollParent(child2.get())); 368 EXPECT_SET_NEEDS_COMMIT(2, child1->SetScrollParent(child2.get()));
367 369
368 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, child2->RemoveFromParent()); 370 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, child2->RemoveFromParent());
369 371
370 child1->reset_needs_push_properties_for_testing(); 372 child1->reset_needs_push_properties_for_testing();
371 373
372 EXPECT_SET_NEEDS_COMMIT(1, child2 = nullptr); 374 EXPECT_SET_NEEDS_COMMIT(1, child2 = nullptr);
373 375
374 EXPECT_TRUE(child1->needs_push_properties()); 376 EXPECT_TRUE(child1->needs_push_properties());
375 377
376 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, layer_tree_host_->SetRootLayer(nullptr)); 378 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, layer_tree_host_->SetRootLayer(nullptr));
377 } 379 }
378 380
379 TEST_F(LayerTest, DeleteRemovedScrollChild) { 381 TEST_F(LayerTest, DeleteRemovedScrollChild) {
380 scoped_refptr<Layer> parent = Layer::Create(); 382 scoped_refptr<Layer> parent = Layer::Create(layer_settings_);
381 scoped_refptr<Layer> child1 = Layer::Create(); 383 scoped_refptr<Layer> child1 = Layer::Create(layer_settings_);
382 scoped_refptr<Layer> child2 = Layer::Create(); 384 scoped_refptr<Layer> child2 = Layer::Create(layer_settings_);
383 385
384 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, layer_tree_host_->SetRootLayer(parent)); 386 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, layer_tree_host_->SetRootLayer(parent));
385 387
386 ASSERT_EQ(0U, parent->children().size()); 388 ASSERT_EQ(0U, parent->children().size());
387 389
388 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, parent->InsertChild(child1, 0)); 390 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, parent->InsertChild(child1, 0));
389 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, parent->InsertChild(child2, 1)); 391 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, parent->InsertChild(child2, 1));
390 392
391 ASSERT_EQ(2U, parent->children().size()); 393 ASSERT_EQ(2U, parent->children().size());
392 EXPECT_EQ(child1, parent->children()[0]); 394 EXPECT_EQ(child1, parent->children()[0]);
(...skipping 29 matching lines...) Expand all
422 424
423 EXPECT_SET_NEEDS_FULL_TREE_SYNC(AtLeast(3), parent_->RemoveAllChildren()); 425 EXPECT_SET_NEEDS_FULL_TREE_SYNC(AtLeast(3), parent_->RemoveAllChildren());
424 426
425 ASSERT_EQ(0U, parent_->children().size()); 427 ASSERT_EQ(0U, parent_->children().size());
426 EXPECT_FALSE(child1_->parent()); 428 EXPECT_FALSE(child1_->parent());
427 EXPECT_FALSE(child2_->parent()); 429 EXPECT_FALSE(child2_->parent());
428 EXPECT_FALSE(child3_->parent()); 430 EXPECT_FALSE(child3_->parent());
429 } 431 }
430 432
431 TEST_F(LayerTest, SetChildren) { 433 TEST_F(LayerTest, SetChildren) {
432 scoped_refptr<Layer> old_parent = Layer::Create(); 434 scoped_refptr<Layer> old_parent = Layer::Create(layer_settings_);
433 scoped_refptr<Layer> new_parent = Layer::Create(); 435 scoped_refptr<Layer> new_parent = Layer::Create(layer_settings_);
434 436
435 scoped_refptr<Layer> child1 = Layer::Create(); 437 scoped_refptr<Layer> child1 = Layer::Create(layer_settings_);
436 scoped_refptr<Layer> child2 = Layer::Create(); 438 scoped_refptr<Layer> child2 = Layer::Create(layer_settings_);
437 439
438 LayerList new_children; 440 LayerList new_children;
439 new_children.push_back(child1); 441 new_children.push_back(child1);
440 new_children.push_back(child2); 442 new_children.push_back(child2);
441 443
442 // Set up and verify initial test conditions: child1 has a parent, child2 has 444 // Set up and verify initial test conditions: child1 has a parent, child2 has
443 // no parent. 445 // no parent.
444 old_parent->AddChild(child1); 446 old_parent->AddChild(child1);
445 ASSERT_EQ(0U, new_parent->children().size()); 447 ASSERT_EQ(0U, new_parent->children().size());
446 EXPECT_EQ(old_parent.get(), child1->parent()); 448 EXPECT_EQ(old_parent.get(), child1->parent());
447 EXPECT_FALSE(child2->parent()); 449 EXPECT_FALSE(child2->parent());
448 450
449 EXPECT_SET_NEEDS_FULL_TREE_SYNC( 451 EXPECT_SET_NEEDS_FULL_TREE_SYNC(
450 1, layer_tree_host_->SetRootLayer(new_parent)); 452 1, layer_tree_host_->SetRootLayer(new_parent));
451 453
452 EXPECT_SET_NEEDS_FULL_TREE_SYNC( 454 EXPECT_SET_NEEDS_FULL_TREE_SYNC(
453 AtLeast(1), new_parent->SetChildren(new_children)); 455 AtLeast(1), new_parent->SetChildren(new_children));
454 456
455 ASSERT_EQ(2U, new_parent->children().size()); 457 ASSERT_EQ(2U, new_parent->children().size());
456 EXPECT_EQ(new_parent.get(), child1->parent()); 458 EXPECT_EQ(new_parent.get(), child1->parent());
457 EXPECT_EQ(new_parent.get(), child2->parent()); 459 EXPECT_EQ(new_parent.get(), child2->parent());
458 460
459 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, layer_tree_host_->SetRootLayer(nullptr)); 461 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, layer_tree_host_->SetRootLayer(nullptr));
460 } 462 }
461 463
462 TEST_F(LayerTest, HasAncestor) { 464 TEST_F(LayerTest, HasAncestor) {
463 scoped_refptr<Layer> parent = Layer::Create(); 465 scoped_refptr<Layer> parent = Layer::Create(layer_settings_);
464 EXPECT_FALSE(parent->HasAncestor(parent.get())); 466 EXPECT_FALSE(parent->HasAncestor(parent.get()));
465 467
466 scoped_refptr<Layer> child = Layer::Create(); 468 scoped_refptr<Layer> child = Layer::Create(layer_settings_);
467 parent->AddChild(child); 469 parent->AddChild(child);
468 470
469 EXPECT_FALSE(child->HasAncestor(child.get())); 471 EXPECT_FALSE(child->HasAncestor(child.get()));
470 EXPECT_TRUE(child->HasAncestor(parent.get())); 472 EXPECT_TRUE(child->HasAncestor(parent.get()));
471 EXPECT_FALSE(parent->HasAncestor(child.get())); 473 EXPECT_FALSE(parent->HasAncestor(child.get()));
472 474
473 scoped_refptr<Layer> child_child = Layer::Create(); 475 scoped_refptr<Layer> child_child = Layer::Create(layer_settings_);
474 child->AddChild(child_child); 476 child->AddChild(child_child);
475 477
476 EXPECT_FALSE(child_child->HasAncestor(child_child.get())); 478 EXPECT_FALSE(child_child->HasAncestor(child_child.get()));
477 EXPECT_TRUE(child_child->HasAncestor(parent.get())); 479 EXPECT_TRUE(child_child->HasAncestor(parent.get()));
478 EXPECT_TRUE(child_child->HasAncestor(child.get())); 480 EXPECT_TRUE(child_child->HasAncestor(child.get()));
479 EXPECT_FALSE(parent->HasAncestor(child.get())); 481 EXPECT_FALSE(parent->HasAncestor(child.get()));
480 EXPECT_FALSE(parent->HasAncestor(child_child.get())); 482 EXPECT_FALSE(parent->HasAncestor(child_child.get()));
481 } 483 }
482 484
483 TEST_F(LayerTest, GetRootLayerAfterTreeManipulations) { 485 TEST_F(LayerTest, GetRootLayerAfterTreeManipulations) {
484 CreateSimpleTestTree(); 486 CreateSimpleTestTree();
485 487
486 // For this test we don't care about SetNeedsFullTreeSync calls. 488 // For this test we don't care about SetNeedsFullTreeSync calls.
487 EXPECT_CALL(*layer_tree_host_, SetNeedsFullTreeSync()).Times(AnyNumber()); 489 EXPECT_CALL(*layer_tree_host_, SetNeedsFullTreeSync()).Times(AnyNumber());
488 490
489 scoped_refptr<Layer> child4 = Layer::Create(); 491 scoped_refptr<Layer> child4 = Layer::Create(layer_settings_);
490 492
491 EXPECT_EQ(parent_.get(), parent_->RootLayer()); 493 EXPECT_EQ(parent_.get(), parent_->RootLayer());
492 EXPECT_EQ(parent_.get(), child1_->RootLayer()); 494 EXPECT_EQ(parent_.get(), child1_->RootLayer());
493 EXPECT_EQ(parent_.get(), child2_->RootLayer()); 495 EXPECT_EQ(parent_.get(), child2_->RootLayer());
494 EXPECT_EQ(parent_.get(), child3_->RootLayer()); 496 EXPECT_EQ(parent_.get(), child3_->RootLayer());
495 EXPECT_EQ(child4.get(), child4->RootLayer()); 497 EXPECT_EQ(child4.get(), child4->RootLayer());
496 EXPECT_EQ(parent_.get(), grand_child1_->RootLayer()); 498 EXPECT_EQ(parent_.get(), grand_child1_->RootLayer());
497 EXPECT_EQ(parent_.get(), grand_child2_->RootLayer()); 499 EXPECT_EQ(parent_.get(), grand_child2_->RootLayer());
498 EXPECT_EQ(parent_.get(), grand_child3_->RootLayer()); 500 EXPECT_EQ(parent_.get(), grand_child3_->RootLayer());
499 501
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
534 EXPECT_EQ(parent_.get(), grand_child2_->RootLayer()); 536 EXPECT_EQ(parent_.get(), grand_child2_->RootLayer());
535 EXPECT_EQ(grand_child3_.get(), grand_child3_->RootLayer()); 537 EXPECT_EQ(grand_child3_.get(), grand_child3_->RootLayer());
536 } 538 }
537 539
538 TEST_F(LayerTest, CheckSetNeedsDisplayCausesCorrectBehavior) { 540 TEST_F(LayerTest, CheckSetNeedsDisplayCausesCorrectBehavior) {
539 // The semantics for SetNeedsDisplay which are tested here: 541 // The semantics for SetNeedsDisplay which are tested here:
540 // 1. sets NeedsDisplay flag appropriately. 542 // 1. sets NeedsDisplay flag appropriately.
541 // 2. indirectly calls SetNeedsUpdate, exactly once for each call to 543 // 2. indirectly calls SetNeedsUpdate, exactly once for each call to
542 // SetNeedsDisplay. 544 // SetNeedsDisplay.
543 545
544 scoped_refptr<Layer> test_layer = Layer::Create(); 546 scoped_refptr<Layer> test_layer = Layer::Create(layer_settings_);
545 EXPECT_SET_NEEDS_FULL_TREE_SYNC( 547 EXPECT_SET_NEEDS_FULL_TREE_SYNC(
546 1, layer_tree_host_->SetRootLayer(test_layer)); 548 1, layer_tree_host_->SetRootLayer(test_layer));
547 EXPECT_SET_NEEDS_COMMIT(1, test_layer->SetIsDrawable(true)); 549 EXPECT_SET_NEEDS_COMMIT(1, test_layer->SetIsDrawable(true));
548 550
549 gfx::Size test_bounds = gfx::Size(501, 508); 551 gfx::Size test_bounds = gfx::Size(501, 508);
550 552
551 gfx::Rect dirty1 = gfx::Rect(10, 15, 1, 2); 553 gfx::Rect dirty1 = gfx::Rect(10, 15, 1, 2);
552 gfx::Rect dirty2 = gfx::Rect(20, 25, 3, 4); 554 gfx::Rect dirty2 = gfx::Rect(20, 25, 3, 4);
553 gfx::Rect out_of_bounds_dirty_rect = gfx::Rect(400, 405, 500, 502); 555 gfx::Rect out_of_bounds_dirty_rect = gfx::Rect(400, 405, 500, 502);
554 556
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
587 589
588 // Case 4: SetNeedsDisplay() with a non-drawable layer 590 // Case 4: SetNeedsDisplay() with a non-drawable layer
589 EXPECT_SET_NEEDS_COMMIT(1, test_layer->SetIsDrawable(false)); 591 EXPECT_SET_NEEDS_COMMIT(1, test_layer->SetIsDrawable(false));
590 test_layer->ResetNeedsDisplayForTesting(); 592 test_layer->ResetNeedsDisplayForTesting();
591 EXPECT_FALSE(test_layer->NeedsDisplayForTesting()); 593 EXPECT_FALSE(test_layer->NeedsDisplayForTesting());
592 EXPECT_SET_NEEDS_UPDATE(0, test_layer->SetNeedsDisplayRect(dirty1)); 594 EXPECT_SET_NEEDS_UPDATE(0, test_layer->SetNeedsDisplayRect(dirty1));
593 EXPECT_TRUE(test_layer->NeedsDisplayForTesting()); 595 EXPECT_TRUE(test_layer->NeedsDisplayForTesting());
594 } 596 }
595 597
596 TEST_F(LayerTest, CheckPropertyChangeCausesCorrectBehavior) { 598 TEST_F(LayerTest, CheckPropertyChangeCausesCorrectBehavior) {
597 scoped_refptr<Layer> test_layer = Layer::Create(); 599 scoped_refptr<Layer> test_layer = Layer::Create(layer_settings_);
598 EXPECT_SET_NEEDS_FULL_TREE_SYNC( 600 EXPECT_SET_NEEDS_FULL_TREE_SYNC(
599 1, layer_tree_host_->SetRootLayer(test_layer)); 601 1, layer_tree_host_->SetRootLayer(test_layer));
600 EXPECT_SET_NEEDS_COMMIT(1, test_layer->SetIsDrawable(true)); 602 EXPECT_SET_NEEDS_COMMIT(1, test_layer->SetIsDrawable(true));
601 603
602 scoped_refptr<Layer> dummy_layer1 = Layer::Create(); 604 scoped_refptr<Layer> dummy_layer1 = Layer::Create(layer_settings_);
603 scoped_refptr<Layer> dummy_layer2 = Layer::Create(); 605 scoped_refptr<Layer> dummy_layer2 = Layer::Create(layer_settings_);
604 606
605 // sanity check of initial test condition 607 // sanity check of initial test condition
606 EXPECT_FALSE(test_layer->NeedsDisplayForTesting()); 608 EXPECT_FALSE(test_layer->NeedsDisplayForTesting());
607 609
608 // Next, test properties that should call SetNeedsCommit (but not 610 // Next, test properties that should call SetNeedsCommit (but not
609 // SetNeedsDisplay). All properties need to be set to new values in order for 611 // SetNeedsDisplay). All properties need to be set to new values in order for
610 // SetNeedsCommit to be called. 612 // SetNeedsCommit to be called.
611 EXPECT_SET_NEEDS_COMMIT( 613 EXPECT_SET_NEEDS_COMMIT(
612 1, test_layer->SetTransformOrigin(gfx::Point3F(1.23f, 4.56f, 0.f))); 614 1, test_layer->SetTransformOrigin(gfx::Point3F(1.23f, 4.56f, 0.f)));
613 EXPECT_SET_NEEDS_COMMIT(1, test_layer->SetBackgroundColor(SK_ColorLTGRAY)); 615 EXPECT_SET_NEEDS_COMMIT(1, test_layer->SetBackgroundColor(SK_ColorLTGRAY));
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
646 dummy_layer2.get())); 648 dummy_layer2.get()));
647 649
648 // The above tests should not have caused a change to the needs_display flag. 650 // The above tests should not have caused a change to the needs_display flag.
649 EXPECT_FALSE(test_layer->NeedsDisplayForTesting()); 651 EXPECT_FALSE(test_layer->NeedsDisplayForTesting());
650 652
651 // As layers are removed from the tree, they will cause a tree sync. 653 // As layers are removed from the tree, they will cause a tree sync.
652 EXPECT_CALL(*layer_tree_host_, SetNeedsFullTreeSync()).Times((AnyNumber())); 654 EXPECT_CALL(*layer_tree_host_, SetNeedsFullTreeSync()).Times((AnyNumber()));
653 } 655 }
654 656
655 TEST_F(LayerTest, PushPropertiesAccumulatesUpdateRect) { 657 TEST_F(LayerTest, PushPropertiesAccumulatesUpdateRect) {
656 scoped_refptr<Layer> test_layer = Layer::Create(); 658 scoped_refptr<Layer> test_layer = Layer::Create(layer_settings_);
657 scoped_ptr<LayerImpl> impl_layer = 659 scoped_ptr<LayerImpl> impl_layer =
658 LayerImpl::Create(host_impl_.active_tree(), 1); 660 LayerImpl::Create(host_impl_.active_tree(), 1);
659 661
660 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, 662 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1,
661 layer_tree_host_->SetRootLayer(test_layer)); 663 layer_tree_host_->SetRootLayer(test_layer));
662 664
663 test_layer->SetNeedsDisplayRect(gfx::Rect(5, 5)); 665 test_layer->SetNeedsDisplayRect(gfx::Rect(5, 5));
664 test_layer->PushPropertiesTo(impl_layer.get()); 666 test_layer->PushPropertiesTo(impl_layer.get());
665 EXPECT_FLOAT_RECT_EQ(gfx::RectF(0.f, 0.f, 5.f, 5.f), 667 EXPECT_FLOAT_RECT_EQ(gfx::RectF(0.f, 0.f, 5.f, 5.f),
666 impl_layer->update_rect()); 668 impl_layer->update_rect());
667 669
668 // The LayerImpl's update_rect() should be accumulated here, since we did not 670 // The LayerImpl's update_rect() should be accumulated here, since we did not
669 // do anything to clear it. 671 // do anything to clear it.
670 test_layer->SetNeedsDisplayRect(gfx::Rect(10, 10, 5, 5)); 672 test_layer->SetNeedsDisplayRect(gfx::Rect(10, 10, 5, 5));
671 test_layer->PushPropertiesTo(impl_layer.get()); 673 test_layer->PushPropertiesTo(impl_layer.get());
672 EXPECT_FLOAT_RECT_EQ(gfx::RectF(0.f, 0.f, 15.f, 15.f), 674 EXPECT_FLOAT_RECT_EQ(gfx::RectF(0.f, 0.f, 15.f, 15.f),
673 impl_layer->update_rect()); 675 impl_layer->update_rect());
674 676
675 // If we do clear the LayerImpl side, then the next update_rect() should be 677 // If we do clear the LayerImpl side, then the next update_rect() should be
676 // fresh without accumulation. 678 // fresh without accumulation.
677 impl_layer->ResetAllChangeTrackingForSubtree(); 679 impl_layer->ResetAllChangeTrackingForSubtree();
678 test_layer->SetNeedsDisplayRect(gfx::Rect(10, 10, 5, 5)); 680 test_layer->SetNeedsDisplayRect(gfx::Rect(10, 10, 5, 5));
679 test_layer->PushPropertiesTo(impl_layer.get()); 681 test_layer->PushPropertiesTo(impl_layer.get());
680 EXPECT_FLOAT_RECT_EQ(gfx::RectF(10.f, 10.f, 5.f, 5.f), 682 EXPECT_FLOAT_RECT_EQ(gfx::RectF(10.f, 10.f, 5.f, 5.f),
681 impl_layer->update_rect()); 683 impl_layer->update_rect());
682 } 684 }
683 685
684 TEST_F(LayerTest, PushPropertiesCausesLayerPropertyChangedForTransform) { 686 TEST_F(LayerTest, PushPropertiesCausesLayerPropertyChangedForTransform) {
685 scoped_refptr<Layer> test_layer = Layer::Create(); 687 scoped_refptr<Layer> test_layer = Layer::Create(layer_settings_);
686 scoped_ptr<LayerImpl> impl_layer = 688 scoped_ptr<LayerImpl> impl_layer =
687 LayerImpl::Create(host_impl_.active_tree(), 1); 689 LayerImpl::Create(host_impl_.active_tree(), 1);
688 690
689 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, 691 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1,
690 layer_tree_host_->SetRootLayer(test_layer)); 692 layer_tree_host_->SetRootLayer(test_layer));
691 693
692 gfx::Transform transform; 694 gfx::Transform transform;
693 transform.Rotate(45.0); 695 transform.Rotate(45.0);
694 EXPECT_SET_NEEDS_COMMIT(1, test_layer->SetTransform(transform)); 696 EXPECT_SET_NEEDS_COMMIT(1, test_layer->SetTransform(transform));
695 697
696 EXPECT_FALSE(impl_layer->LayerPropertyChanged()); 698 EXPECT_FALSE(impl_layer->LayerPropertyChanged());
697 699
698 test_layer->PushPropertiesTo(impl_layer.get()); 700 test_layer->PushPropertiesTo(impl_layer.get());
699 701
700 EXPECT_TRUE(impl_layer->LayerPropertyChanged()); 702 EXPECT_TRUE(impl_layer->LayerPropertyChanged());
701 } 703 }
702 704
703 TEST_F(LayerTest, PushPropertiesCausesLayerPropertyChangedForOpacity) { 705 TEST_F(LayerTest, PushPropertiesCausesLayerPropertyChangedForOpacity) {
704 scoped_refptr<Layer> test_layer = Layer::Create(); 706 scoped_refptr<Layer> test_layer = Layer::Create(layer_settings_);
705 scoped_ptr<LayerImpl> impl_layer = 707 scoped_ptr<LayerImpl> impl_layer =
706 LayerImpl::Create(host_impl_.active_tree(), 1); 708 LayerImpl::Create(host_impl_.active_tree(), 1);
707 709
708 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, 710 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1,
709 layer_tree_host_->SetRootLayer(test_layer)); 711 layer_tree_host_->SetRootLayer(test_layer));
710 712
711 EXPECT_SET_NEEDS_COMMIT(1, test_layer->SetOpacity(0.5f)); 713 EXPECT_SET_NEEDS_COMMIT(1, test_layer->SetOpacity(0.5f));
712 714
713 EXPECT_FALSE(impl_layer->LayerPropertyChanged()); 715 EXPECT_FALSE(impl_layer->LayerPropertyChanged());
714 716
715 test_layer->PushPropertiesTo(impl_layer.get()); 717 test_layer->PushPropertiesTo(impl_layer.get());
716 718
717 EXPECT_TRUE(impl_layer->LayerPropertyChanged()); 719 EXPECT_TRUE(impl_layer->LayerPropertyChanged());
718 } 720 }
719 721
720 TEST_F(LayerTest, 722 TEST_F(LayerTest,
721 PushPropsDoesntCauseLayerPropertyChangedDuringImplOnlyTransformAnim) { 723 PushPropsDoesntCauseLayerPropertyChangedDuringImplOnlyTransformAnim) {
722 scoped_refptr<Layer> test_layer = Layer::Create(); 724 scoped_refptr<Layer> test_layer = Layer::Create(layer_settings_);
723 scoped_ptr<LayerImpl> impl_layer = 725 scoped_ptr<LayerImpl> impl_layer =
724 LayerImpl::Create(host_impl_.active_tree(), 1); 726 LayerImpl::Create(host_impl_.active_tree(), 1);
725 727
726 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, 728 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1,
727 layer_tree_host_->SetRootLayer(test_layer)); 729 layer_tree_host_->SetRootLayer(test_layer));
728 730
729 scoped_ptr<AnimationRegistrar> registrar = AnimationRegistrar::Create(); 731 scoped_ptr<AnimationRegistrar> registrar = AnimationRegistrar::Create();
730 impl_layer->layer_animation_controller()->SetAnimationRegistrar( 732 impl_layer->layer_animation_controller()->SetAnimationRegistrar(
731 registrar.get()); 733 registrar.get());
732 734
(...skipping 21 matching lines...) Expand all
754 transform.Rotate(45.0); 756 transform.Rotate(45.0);
755 EXPECT_SET_NEEDS_COMMIT(1, test_layer->SetTransform(transform)); 757 EXPECT_SET_NEEDS_COMMIT(1, test_layer->SetTransform(transform));
756 758
757 EXPECT_FALSE(impl_layer->LayerPropertyChanged()); 759 EXPECT_FALSE(impl_layer->LayerPropertyChanged());
758 test_layer->PushPropertiesTo(impl_layer.get()); 760 test_layer->PushPropertiesTo(impl_layer.get());
759 EXPECT_FALSE(impl_layer->LayerPropertyChanged()); 761 EXPECT_FALSE(impl_layer->LayerPropertyChanged());
760 } 762 }
761 763
762 TEST_F(LayerTest, 764 TEST_F(LayerTest,
763 PushPropsDoesntCauseLayerPropertyChangedDuringImplOnlyOpacityAnim) { 765 PushPropsDoesntCauseLayerPropertyChangedDuringImplOnlyOpacityAnim) {
764 scoped_refptr<Layer> test_layer = Layer::Create(); 766 scoped_refptr<Layer> test_layer = Layer::Create(layer_settings_);
765 scoped_ptr<LayerImpl> impl_layer = 767 scoped_ptr<LayerImpl> impl_layer =
766 LayerImpl::Create(host_impl_.active_tree(), 1); 768 LayerImpl::Create(host_impl_.active_tree(), 1);
767 769
768 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, 770 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1,
769 layer_tree_host_->SetRootLayer(test_layer)); 771 layer_tree_host_->SetRootLayer(test_layer));
770 772
771 scoped_ptr<AnimationRegistrar> registrar = AnimationRegistrar::Create(); 773 scoped_ptr<AnimationRegistrar> registrar = AnimationRegistrar::Create();
772 impl_layer->layer_animation_controller()->SetAnimationRegistrar( 774 impl_layer->layer_animation_controller()->SetAnimationRegistrar(
773 registrar.get()); 775 registrar.get());
774 776
(...skipping 20 matching lines...) Expand all
795 ->set_is_impl_only(true); 797 ->set_is_impl_only(true);
796 EXPECT_SET_NEEDS_COMMIT(1, test_layer->SetOpacity(0.75f)); 798 EXPECT_SET_NEEDS_COMMIT(1, test_layer->SetOpacity(0.75f));
797 799
798 EXPECT_FALSE(impl_layer->LayerPropertyChanged()); 800 EXPECT_FALSE(impl_layer->LayerPropertyChanged());
799 test_layer->PushPropertiesTo(impl_layer.get()); 801 test_layer->PushPropertiesTo(impl_layer.get());
800 EXPECT_FALSE(impl_layer->LayerPropertyChanged()); 802 EXPECT_FALSE(impl_layer->LayerPropertyChanged());
801 } 803 }
802 804
803 TEST_F(LayerTest, 805 TEST_F(LayerTest,
804 PushPropsDoesntCauseLayerPropertyChangedDuringImplOnlyFilterAnim) { 806 PushPropsDoesntCauseLayerPropertyChangedDuringImplOnlyFilterAnim) {
805 scoped_refptr<Layer> test_layer = Layer::Create(); 807 scoped_refptr<Layer> test_layer = Layer::Create(layer_settings_);
806 scoped_ptr<LayerImpl> impl_layer = 808 scoped_ptr<LayerImpl> impl_layer =
807 LayerImpl::Create(host_impl_.active_tree(), 1); 809 LayerImpl::Create(host_impl_.active_tree(), 1);
808 810
809 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, 811 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1,
810 layer_tree_host_->SetRootLayer(test_layer)); 812 layer_tree_host_->SetRootLayer(test_layer));
811 813
812 scoped_ptr<AnimationRegistrar> registrar = AnimationRegistrar::Create(); 814 scoped_ptr<AnimationRegistrar> registrar = AnimationRegistrar::Create();
813 impl_layer->layer_animation_controller()->SetAnimationRegistrar( 815 impl_layer->layer_animation_controller()->SetAnimationRegistrar(
814 registrar.get()); 816 registrar.get());
815 817
(...skipping 16 matching lines...) Expand all
832 ->set_is_impl_only(true); 834 ->set_is_impl_only(true);
833 filters.Append(FilterOperation::CreateSepiaFilter(0.5f)); 835 filters.Append(FilterOperation::CreateSepiaFilter(0.5f));
834 EXPECT_SET_NEEDS_COMMIT(1, test_layer->SetFilters(filters)); 836 EXPECT_SET_NEEDS_COMMIT(1, test_layer->SetFilters(filters));
835 837
836 EXPECT_FALSE(impl_layer->LayerPropertyChanged()); 838 EXPECT_FALSE(impl_layer->LayerPropertyChanged());
837 test_layer->PushPropertiesTo(impl_layer.get()); 839 test_layer->PushPropertiesTo(impl_layer.get());
838 EXPECT_FALSE(impl_layer->LayerPropertyChanged()); 840 EXPECT_FALSE(impl_layer->LayerPropertyChanged());
839 } 841 }
840 842
841 TEST_F(LayerTest, MaskAndReplicaHasParent) { 843 TEST_F(LayerTest, MaskAndReplicaHasParent) {
842 scoped_refptr<Layer> parent = Layer::Create(); 844 scoped_refptr<Layer> parent = Layer::Create(layer_settings_);
843 scoped_refptr<Layer> child = Layer::Create(); 845 scoped_refptr<Layer> child = Layer::Create(layer_settings_);
844 scoped_refptr<Layer> mask = Layer::Create(); 846 scoped_refptr<Layer> mask = Layer::Create(layer_settings_);
845 scoped_refptr<Layer> replica = Layer::Create(); 847 scoped_refptr<Layer> replica = Layer::Create(layer_settings_);
846 scoped_refptr<Layer> replica_mask = Layer::Create(); 848 scoped_refptr<Layer> replica_mask = Layer::Create(layer_settings_);
847 scoped_refptr<Layer> mask_replacement = Layer::Create(); 849 scoped_refptr<Layer> mask_replacement = Layer::Create(layer_settings_);
848 scoped_refptr<Layer> replica_replacement = Layer::Create(); 850 scoped_refptr<Layer> replica_replacement = Layer::Create(layer_settings_);
849 scoped_refptr<Layer> replica_mask_replacement = Layer::Create(); 851 scoped_refptr<Layer> replica_mask_replacement =
852 Layer::Create(layer_settings_);
850 853
851 parent->AddChild(child); 854 parent->AddChild(child);
852 child->SetMaskLayer(mask.get()); 855 child->SetMaskLayer(mask.get());
853 child->SetReplicaLayer(replica.get()); 856 child->SetReplicaLayer(replica.get());
854 replica->SetMaskLayer(replica_mask.get()); 857 replica->SetMaskLayer(replica_mask.get());
855 858
856 EXPECT_EQ(parent.get(), child->parent()); 859 EXPECT_EQ(parent.get(), child->parent());
857 EXPECT_EQ(child.get(), mask->parent()); 860 EXPECT_EQ(child.get(), mask->parent());
858 EXPECT_EQ(child.get(), replica->parent()); 861 EXPECT_EQ(child.get(), replica->parent());
859 EXPECT_EQ(replica.get(), replica_mask->parent()); 862 EXPECT_EQ(replica.get(), replica_mask->parent());
860 863
861 replica->SetMaskLayer(replica_mask_replacement.get()); 864 replica->SetMaskLayer(replica_mask_replacement.get());
862 EXPECT_EQ(nullptr, replica_mask->parent()); 865 EXPECT_EQ(nullptr, replica_mask->parent());
863 EXPECT_EQ(replica.get(), replica_mask_replacement->parent()); 866 EXPECT_EQ(replica.get(), replica_mask_replacement->parent());
864 867
865 child->SetMaskLayer(mask_replacement.get()); 868 child->SetMaskLayer(mask_replacement.get());
866 EXPECT_EQ(nullptr, mask->parent()); 869 EXPECT_EQ(nullptr, mask->parent());
867 EXPECT_EQ(child.get(), mask_replacement->parent()); 870 EXPECT_EQ(child.get(), mask_replacement->parent());
868 871
869 child->SetReplicaLayer(replica_replacement.get()); 872 child->SetReplicaLayer(replica_replacement.get());
870 EXPECT_EQ(nullptr, replica->parent()); 873 EXPECT_EQ(nullptr, replica->parent());
871 EXPECT_EQ(child.get(), replica_replacement->parent()); 874 EXPECT_EQ(child.get(), replica_replacement->parent());
872 875
873 EXPECT_EQ(replica.get(), replica->mask_layer()->parent()); 876 EXPECT_EQ(replica.get(), replica->mask_layer()->parent());
874 } 877 }
875 878
876 TEST_F(LayerTest, CheckTranformIsInvertible) { 879 TEST_F(LayerTest, CheckTranformIsInvertible) {
877 scoped_refptr<Layer> layer = Layer::Create(); 880 scoped_refptr<Layer> layer = Layer::Create(layer_settings_);
878 scoped_ptr<LayerImpl> impl_layer = 881 scoped_ptr<LayerImpl> impl_layer =
879 LayerImpl::Create(host_impl_.active_tree(), 1); 882 LayerImpl::Create(host_impl_.active_tree(), 1);
880 EXPECT_CALL(*layer_tree_host_, SetNeedsFullTreeSync()).Times(1); 883 EXPECT_CALL(*layer_tree_host_, SetNeedsFullTreeSync()).Times(1);
881 EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AnyNumber()); 884 EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AnyNumber());
882 layer_tree_host_->SetRootLayer(layer); 885 layer_tree_host_->SetRootLayer(layer);
883 886
884 EXPECT_TRUE(layer->transform_is_invertible()); 887 EXPECT_TRUE(layer->transform_is_invertible());
885 888
886 gfx::Transform singular_transform; 889 gfx::Transform singular_transform;
887 singular_transform.Scale3d( 890 singular_transform.Scale3d(
(...skipping 10 matching lines...) Expand all
898 901
899 layer->SetTransform(rotation_transform); 902 layer->SetTransform(rotation_transform);
900 layer->PushPropertiesTo(impl_layer.get()); 903 layer->PushPropertiesTo(impl_layer.get());
901 EXPECT_TRUE(layer->transform_is_invertible()); 904 EXPECT_TRUE(layer->transform_is_invertible());
902 EXPECT_TRUE(impl_layer->transform_is_invertible()); 905 EXPECT_TRUE(impl_layer->transform_is_invertible());
903 906
904 Mock::VerifyAndClearExpectations(layer_tree_host_.get()); 907 Mock::VerifyAndClearExpectations(layer_tree_host_.get());
905 } 908 }
906 909
907 TEST_F(LayerTest, TranformIsInvertibleAnimation) { 910 TEST_F(LayerTest, TranformIsInvertibleAnimation) {
908 scoped_refptr<Layer> layer = Layer::Create(); 911 scoped_refptr<Layer> layer = Layer::Create(layer_settings_);
909 scoped_ptr<LayerImpl> impl_layer = 912 scoped_ptr<LayerImpl> impl_layer =
910 LayerImpl::Create(host_impl_.active_tree(), 1); 913 LayerImpl::Create(host_impl_.active_tree(), 1);
911 EXPECT_CALL(*layer_tree_host_, SetNeedsFullTreeSync()).Times(1); 914 EXPECT_CALL(*layer_tree_host_, SetNeedsFullTreeSync()).Times(1);
912 EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AnyNumber()); 915 EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AnyNumber());
913 layer_tree_host_->SetRootLayer(layer); 916 layer_tree_host_->SetRootLayer(layer);
914 917
915 EXPECT_TRUE(layer->transform_is_invertible()); 918 EXPECT_TRUE(layer->transform_is_invertible());
916 919
917 gfx::Transform singular_transform; 920 gfx::Transform singular_transform;
918 singular_transform.Scale3d( 921 singular_transform.Scale3d(
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
967 for (size_t i = 0; i < layer->children().size(); ++i) 970 for (size_t i = 0; i < layer->children().size(); ++i)
968 AssertLayerTreeHostMatchesForSubtree(layer->children()[i].get(), host); 971 AssertLayerTreeHostMatchesForSubtree(layer->children()[i].get(), host);
969 972
970 if (layer->mask_layer()) 973 if (layer->mask_layer())
971 AssertLayerTreeHostMatchesForSubtree(layer->mask_layer(), host); 974 AssertLayerTreeHostMatchesForSubtree(layer->mask_layer(), host);
972 975
973 if (layer->replica_layer()) 976 if (layer->replica_layer())
974 AssertLayerTreeHostMatchesForSubtree(layer->replica_layer(), host); 977 AssertLayerTreeHostMatchesForSubtree(layer->replica_layer(), host);
975 } 978 }
976 979
977 TEST(LayerLayerTreeHostTest, EnteringTree) { 980 class LayerLayerTreeHostTest : public testing::Test {
978 scoped_refptr<Layer> parent = Layer::Create(); 981 public:
979 scoped_refptr<Layer> child = Layer::Create(); 982 protected:
980 scoped_refptr<Layer> mask = Layer::Create(); 983 LayerSettings layer_settings_;
981 scoped_refptr<Layer> replica = Layer::Create(); 984 };
982 scoped_refptr<Layer> replica_mask = Layer::Create(); 985
986 TEST_F(LayerLayerTreeHostTest, EnteringTree) {
987 scoped_refptr<Layer> parent = Layer::Create(layer_settings_);
988 scoped_refptr<Layer> child = Layer::Create(layer_settings_);
989 scoped_refptr<Layer> mask = Layer::Create(layer_settings_);
990 scoped_refptr<Layer> replica = Layer::Create(layer_settings_);
991 scoped_refptr<Layer> replica_mask = Layer::Create(layer_settings_);
983 992
984 // Set up a detached tree of layers. The host pointer should be nil for these 993 // Set up a detached tree of layers. The host pointer should be nil for these
985 // layers. 994 // layers.
986 parent->AddChild(child); 995 parent->AddChild(child);
987 child->SetMaskLayer(mask.get()); 996 child->SetMaskLayer(mask.get());
988 child->SetReplicaLayer(replica.get()); 997 child->SetReplicaLayer(replica.get());
989 replica->SetMaskLayer(replica_mask.get()); 998 replica->SetMaskLayer(replica_mask.get());
990 999
991 AssertLayerTreeHostMatchesForSubtree(parent.get(), nullptr); 1000 AssertLayerTreeHostMatchesForSubtree(parent.get(), nullptr);
992 1001
993 LayerTreeHostFactory factory; 1002 LayerTreeHostFactory factory;
994 scoped_ptr<LayerTreeHost> layer_tree_host = factory.Create(); 1003 scoped_ptr<LayerTreeHost> layer_tree_host = factory.Create();
995 // Setting the root layer should set the host pointer for all layers in the 1004 // Setting the root layer should set the host pointer for all layers in the
996 // tree. 1005 // tree.
997 layer_tree_host->SetRootLayer(parent.get()); 1006 layer_tree_host->SetRootLayer(parent.get());
998 1007
999 AssertLayerTreeHostMatchesForSubtree(parent.get(), layer_tree_host.get()); 1008 AssertLayerTreeHostMatchesForSubtree(parent.get(), layer_tree_host.get());
1000 1009
1001 // Clearing the root layer should also clear out the host pointers for all 1010 // Clearing the root layer should also clear out the host pointers for all
1002 // layers in the tree. 1011 // layers in the tree.
1003 layer_tree_host->SetRootLayer(nullptr); 1012 layer_tree_host->SetRootLayer(nullptr);
1004 1013
1005 AssertLayerTreeHostMatchesForSubtree(parent.get(), nullptr); 1014 AssertLayerTreeHostMatchesForSubtree(parent.get(), nullptr);
1006 } 1015 }
1007 1016
1008 TEST(LayerLayerTreeHostTest, AddingLayerSubtree) { 1017 TEST_F(LayerLayerTreeHostTest, AddingLayerSubtree) {
1009 scoped_refptr<Layer> parent = Layer::Create(); 1018 scoped_refptr<Layer> parent = Layer::Create(layer_settings_);
1010 LayerTreeHostFactory factory; 1019 LayerTreeHostFactory factory;
1011 scoped_ptr<LayerTreeHost> layer_tree_host = factory.Create(); 1020 scoped_ptr<LayerTreeHost> layer_tree_host = factory.Create();
1012 1021
1013 layer_tree_host->SetRootLayer(parent.get()); 1022 layer_tree_host->SetRootLayer(parent.get());
1014 1023
1015 EXPECT_EQ(parent->layer_tree_host(), layer_tree_host.get()); 1024 EXPECT_EQ(parent->layer_tree_host(), layer_tree_host.get());
1016 1025
1017 // Adding a subtree to a layer already associated with a host should set the 1026 // Adding a subtree to a layer already associated with a host should set the
1018 // host pointer on all layers in that subtree. 1027 // host pointer on all layers in that subtree.
1019 scoped_refptr<Layer> child = Layer::Create(); 1028 scoped_refptr<Layer> child = Layer::Create(layer_settings_);
1020 scoped_refptr<Layer> grand_child = Layer::Create(); 1029 scoped_refptr<Layer> grand_child = Layer::Create(layer_settings_);
1021 child->AddChild(grand_child); 1030 child->AddChild(grand_child);
1022 1031
1023 // Masks, replicas, and replica masks should pick up the new host too. 1032 // Masks, replicas, and replica masks should pick up the new host too.
1024 scoped_refptr<Layer> child_mask = Layer::Create(); 1033 scoped_refptr<Layer> child_mask = Layer::Create(layer_settings_);
1025 child->SetMaskLayer(child_mask.get()); 1034 child->SetMaskLayer(child_mask.get());
1026 scoped_refptr<Layer> child_replica = Layer::Create(); 1035 scoped_refptr<Layer> child_replica = Layer::Create(layer_settings_);
1027 child->SetReplicaLayer(child_replica.get()); 1036 child->SetReplicaLayer(child_replica.get());
1028 scoped_refptr<Layer> child_replica_mask = Layer::Create(); 1037 scoped_refptr<Layer> child_replica_mask = Layer::Create(layer_settings_);
1029 child_replica->SetMaskLayer(child_replica_mask.get()); 1038 child_replica->SetMaskLayer(child_replica_mask.get());
1030 1039
1031 parent->AddChild(child); 1040 parent->AddChild(child);
1032 AssertLayerTreeHostMatchesForSubtree(parent.get(), layer_tree_host.get()); 1041 AssertLayerTreeHostMatchesForSubtree(parent.get(), layer_tree_host.get());
1033 1042
1034 layer_tree_host->SetRootLayer(nullptr); 1043 layer_tree_host->SetRootLayer(nullptr);
1035 } 1044 }
1036 1045
1037 TEST(LayerLayerTreeHostTest, ChangeHost) { 1046 TEST_F(LayerLayerTreeHostTest, ChangeHost) {
1038 scoped_refptr<Layer> parent = Layer::Create(); 1047 scoped_refptr<Layer> parent = Layer::Create(layer_settings_);
1039 scoped_refptr<Layer> child = Layer::Create(); 1048 scoped_refptr<Layer> child = Layer::Create(layer_settings_);
1040 scoped_refptr<Layer> mask = Layer::Create(); 1049 scoped_refptr<Layer> mask = Layer::Create(layer_settings_);
1041 scoped_refptr<Layer> replica = Layer::Create(); 1050 scoped_refptr<Layer> replica = Layer::Create(layer_settings_);
1042 scoped_refptr<Layer> replica_mask = Layer::Create(); 1051 scoped_refptr<Layer> replica_mask = Layer::Create(layer_settings_);
1043 1052
1044 // Same setup as the previous test. 1053 // Same setup as the previous test.
1045 parent->AddChild(child); 1054 parent->AddChild(child);
1046 child->SetMaskLayer(mask.get()); 1055 child->SetMaskLayer(mask.get());
1047 child->SetReplicaLayer(replica.get()); 1056 child->SetReplicaLayer(replica.get());
1048 replica->SetMaskLayer(replica_mask.get()); 1057 replica->SetMaskLayer(replica_mask.get());
1049 1058
1050 LayerTreeHostFactory factory; 1059 LayerTreeHostFactory factory;
1051 scoped_ptr<LayerTreeHost> first_layer_tree_host = factory.Create(); 1060 scoped_ptr<LayerTreeHost> first_layer_tree_host = factory.Create();
1052 first_layer_tree_host->SetRootLayer(parent.get()); 1061 first_layer_tree_host->SetRootLayer(parent.get());
1053 1062
1054 AssertLayerTreeHostMatchesForSubtree(parent.get(), 1063 AssertLayerTreeHostMatchesForSubtree(parent.get(),
1055 first_layer_tree_host.get()); 1064 first_layer_tree_host.get());
1056 1065
1057 // Now re-root the tree to a new host (simulating what we do on a context lost 1066 // Now re-root the tree to a new host (simulating what we do on a context lost
1058 // event). This should update the host pointers for all layers in the tree. 1067 // event). This should update the host pointers for all layers in the tree.
1059 scoped_ptr<LayerTreeHost> second_layer_tree_host = factory.Create(); 1068 scoped_ptr<LayerTreeHost> second_layer_tree_host = factory.Create();
1060 second_layer_tree_host->SetRootLayer(parent.get()); 1069 second_layer_tree_host->SetRootLayer(parent.get());
1061 1070
1062 AssertLayerTreeHostMatchesForSubtree(parent.get(), 1071 AssertLayerTreeHostMatchesForSubtree(parent.get(),
1063 second_layer_tree_host.get()); 1072 second_layer_tree_host.get());
1064 1073
1065 second_layer_tree_host->SetRootLayer(nullptr); 1074 second_layer_tree_host->SetRootLayer(nullptr);
1066 } 1075 }
1067 1076
1068 TEST(LayerLayerTreeHostTest, ChangeHostInSubtree) { 1077 TEST_F(LayerLayerTreeHostTest, ChangeHostInSubtree) {
1069 scoped_refptr<Layer> first_parent = Layer::Create(); 1078 scoped_refptr<Layer> first_parent = Layer::Create(layer_settings_);
1070 scoped_refptr<Layer> first_child = Layer::Create(); 1079 scoped_refptr<Layer> first_child = Layer::Create(layer_settings_);
1071 scoped_refptr<Layer> second_parent = Layer::Create(); 1080 scoped_refptr<Layer> second_parent = Layer::Create(layer_settings_);
1072 scoped_refptr<Layer> second_child = Layer::Create(); 1081 scoped_refptr<Layer> second_child = Layer::Create(layer_settings_);
1073 scoped_refptr<Layer> second_grand_child = Layer::Create(); 1082 scoped_refptr<Layer> second_grand_child = Layer::Create(layer_settings_);
1074 1083
1075 // First put all children under the first parent and set the first host. 1084 // First put all children under the first parent and set the first host.
1076 first_parent->AddChild(first_child); 1085 first_parent->AddChild(first_child);
1077 second_child->AddChild(second_grand_child); 1086 second_child->AddChild(second_grand_child);
1078 first_parent->AddChild(second_child); 1087 first_parent->AddChild(second_child);
1079 1088
1080 LayerTreeHostFactory factory; 1089 LayerTreeHostFactory factory;
1081 scoped_ptr<LayerTreeHost> first_layer_tree_host = factory.Create(); 1090 scoped_ptr<LayerTreeHost> first_layer_tree_host = factory.Create();
1082 first_layer_tree_host->SetRootLayer(first_parent.get()); 1091 first_layer_tree_host->SetRootLayer(first_parent.get());
1083 1092
(...skipping 10 matching lines...) Expand all
1094 // The moved layer and its children should point to the new host. 1103 // The moved layer and its children should point to the new host.
1095 EXPECT_EQ(second_layer_tree_host.get(), second_child->layer_tree_host()); 1104 EXPECT_EQ(second_layer_tree_host.get(), second_child->layer_tree_host());
1096 EXPECT_EQ(second_layer_tree_host.get(), 1105 EXPECT_EQ(second_layer_tree_host.get(),
1097 second_grand_child->layer_tree_host()); 1106 second_grand_child->layer_tree_host());
1098 1107
1099 // Test over, cleanup time. 1108 // Test over, cleanup time.
1100 first_layer_tree_host->SetRootLayer(nullptr); 1109 first_layer_tree_host->SetRootLayer(nullptr);
1101 second_layer_tree_host->SetRootLayer(nullptr); 1110 second_layer_tree_host->SetRootLayer(nullptr);
1102 } 1111 }
1103 1112
1104 TEST(LayerLayerTreeHostTest, ReplaceMaskAndReplicaLayer) { 1113 TEST_F(LayerLayerTreeHostTest, ReplaceMaskAndReplicaLayer) {
1105 scoped_refptr<Layer> parent = Layer::Create(); 1114 scoped_refptr<Layer> parent = Layer::Create(layer_settings_);
1106 scoped_refptr<Layer> mask = Layer::Create(); 1115 scoped_refptr<Layer> mask = Layer::Create(layer_settings_);
1107 scoped_refptr<Layer> replica = Layer::Create(); 1116 scoped_refptr<Layer> replica = Layer::Create(layer_settings_);
1108 scoped_refptr<Layer> mask_child = Layer::Create(); 1117 scoped_refptr<Layer> mask_child = Layer::Create(layer_settings_);
1109 scoped_refptr<Layer> replica_child = Layer::Create(); 1118 scoped_refptr<Layer> replica_child = Layer::Create(layer_settings_);
1110 scoped_refptr<Layer> mask_replacement = Layer::Create(); 1119 scoped_refptr<Layer> mask_replacement = Layer::Create(layer_settings_);
1111 scoped_refptr<Layer> replica_replacement = Layer::Create(); 1120 scoped_refptr<Layer> replica_replacement = Layer::Create(layer_settings_);
1112 1121
1113 parent->SetMaskLayer(mask.get()); 1122 parent->SetMaskLayer(mask.get());
1114 parent->SetReplicaLayer(replica.get()); 1123 parent->SetReplicaLayer(replica.get());
1115 mask->AddChild(mask_child); 1124 mask->AddChild(mask_child);
1116 replica->AddChild(replica_child); 1125 replica->AddChild(replica_child);
1117 1126
1118 LayerTreeHostFactory factory; 1127 LayerTreeHostFactory factory;
1119 scoped_ptr<LayerTreeHost> layer_tree_host = factory.Create(); 1128 scoped_ptr<LayerTreeHost> layer_tree_host = factory.Create();
1120 layer_tree_host->SetRootLayer(parent.get()); 1129 layer_tree_host->SetRootLayer(parent.get());
1121 1130
1122 AssertLayerTreeHostMatchesForSubtree(parent.get(), layer_tree_host.get()); 1131 AssertLayerTreeHostMatchesForSubtree(parent.get(), layer_tree_host.get());
1123 1132
1124 // Replacing the mask should clear out the old mask's subtree's host pointers. 1133 // Replacing the mask should clear out the old mask's subtree's host pointers.
1125 parent->SetMaskLayer(mask_replacement.get()); 1134 parent->SetMaskLayer(mask_replacement.get());
1126 EXPECT_EQ(nullptr, mask->layer_tree_host()); 1135 EXPECT_EQ(nullptr, mask->layer_tree_host());
1127 EXPECT_EQ(nullptr, mask_child->layer_tree_host()); 1136 EXPECT_EQ(nullptr, mask_child->layer_tree_host());
1128 1137
1129 // Same for replacing a replica layer. 1138 // Same for replacing a replica layer.
1130 parent->SetReplicaLayer(replica_replacement.get()); 1139 parent->SetReplicaLayer(replica_replacement.get());
1131 EXPECT_EQ(nullptr, replica->layer_tree_host()); 1140 EXPECT_EQ(nullptr, replica->layer_tree_host());
1132 EXPECT_EQ(nullptr, replica_child->layer_tree_host()); 1141 EXPECT_EQ(nullptr, replica_child->layer_tree_host());
1133 1142
1134 // Test over, cleanup time. 1143 // Test over, cleanup time.
1135 layer_tree_host->SetRootLayer(nullptr); 1144 layer_tree_host->SetRootLayer(nullptr);
1136 } 1145 }
1137 1146
1138 TEST(LayerLayerTreeHostTest, DestroyHostWithNonNullRootLayer) { 1147 TEST_F(LayerLayerTreeHostTest, DestroyHostWithNonNullRootLayer) {
1139 scoped_refptr<Layer> root = Layer::Create(); 1148 scoped_refptr<Layer> root = Layer::Create(layer_settings_);
1140 scoped_refptr<Layer> child = Layer::Create(); 1149 scoped_refptr<Layer> child = Layer::Create(layer_settings_);
1141 root->AddChild(child); 1150 root->AddChild(child);
1142 LayerTreeHostFactory factory; 1151 LayerTreeHostFactory factory;
1143 scoped_ptr<LayerTreeHost> layer_tree_host = factory.Create(); 1152 scoped_ptr<LayerTreeHost> layer_tree_host = factory.Create();
1144 layer_tree_host->SetRootLayer(root); 1153 layer_tree_host->SetRootLayer(root);
1145 } 1154 }
1146 1155
1147 static bool AddTestAnimation(Layer* layer) { 1156 static bool AddTestAnimation(Layer* layer) {
1148 scoped_ptr<KeyframedFloatAnimationCurve> curve = 1157 scoped_ptr<KeyframedFloatAnimationCurve> curve =
1149 KeyframedFloatAnimationCurve::Create(); 1158 KeyframedFloatAnimationCurve::Create();
1150 curve->AddKeyframe(FloatKeyframe::Create(base::TimeDelta(), 0.3f, nullptr)); 1159 curve->AddKeyframe(FloatKeyframe::Create(base::TimeDelta(), 0.3f, nullptr));
1151 curve->AddKeyframe( 1160 curve->AddKeyframe(
1152 FloatKeyframe::Create(base::TimeDelta::FromSecondsD(1.0), 0.7f, nullptr)); 1161 FloatKeyframe::Create(base::TimeDelta::FromSecondsD(1.0), 0.7f, nullptr));
1153 scoped_ptr<Animation> animation = 1162 scoped_ptr<Animation> animation =
1154 Animation::Create(curve.Pass(), 0, 0, Animation::OPACITY); 1163 Animation::Create(curve.Pass(), 0, 0, Animation::OPACITY);
1155 1164
1156 return layer->AddAnimation(animation.Pass()); 1165 return layer->AddAnimation(animation.Pass());
1157 } 1166 }
1158 1167
1159 TEST(LayerLayerTreeHostTest, ShouldNotAddAnimationWithoutAnimationRegistrar) { 1168 TEST_F(LayerLayerTreeHostTest, ShouldNotAddAnimationWithoutAnimationRegistrar) {
1160 scoped_refptr<Layer> layer = Layer::Create(); 1169 scoped_refptr<Layer> layer = Layer::Create(layer_settings_);
1161 1170
1162 // Case 1: without a LayerTreeHost and without an AnimationRegistrar, the 1171 // Case 1: without a LayerTreeHost and without an AnimationRegistrar, the
1163 // animation should not be accepted. 1172 // animation should not be accepted.
1164 EXPECT_FALSE(AddTestAnimation(layer.get())); 1173 EXPECT_FALSE(AddTestAnimation(layer.get()));
1165 1174
1166 scoped_ptr<AnimationRegistrar> registrar = AnimationRegistrar::Create(); 1175 scoped_ptr<AnimationRegistrar> registrar = AnimationRegistrar::Create();
1167 layer->layer_animation_controller()->SetAnimationRegistrar(registrar.get()); 1176 layer->layer_animation_controller()->SetAnimationRegistrar(registrar.get());
1168 1177
1169 // Case 2: with an AnimationRegistrar, the animation should be accepted. 1178 // Case 2: with an AnimationRegistrar, the animation should be accepted.
1170 EXPECT_TRUE(AddTestAnimation(layer.get())); 1179 EXPECT_TRUE(AddTestAnimation(layer.get()));
1171 1180
1172 LayerTreeSettings settings; 1181 LayerTreeSettings settings;
1173 settings.accelerated_animation_enabled = false; 1182 settings.accelerated_animation_enabled = false;
1174 LayerTreeHostFactory factory; 1183 LayerTreeHostFactory factory;
1175 scoped_ptr<LayerTreeHost> layer_tree_host = factory.Create(settings); 1184 scoped_ptr<LayerTreeHost> layer_tree_host = factory.Create(settings);
1176 layer_tree_host->SetRootLayer(layer); 1185 layer_tree_host->SetRootLayer(layer);
1177 AssertLayerTreeHostMatchesForSubtree(layer.get(), layer_tree_host.get()); 1186 AssertLayerTreeHostMatchesForSubtree(layer.get(), layer_tree_host.get());
1178 1187
1179 // Case 3: with a LayerTreeHost where accelerated animation is disabled, the 1188 // Case 3: with a LayerTreeHost where accelerated animation is disabled, the
1180 // animation should be rejected. 1189 // animation should be rejected.
1181 EXPECT_FALSE(AddTestAnimation(layer.get())); 1190 EXPECT_FALSE(AddTestAnimation(layer.get()));
1182 } 1191 }
1183 1192
1184 TEST_F(LayerTest, SafeOpaqueBackgroundColor) { 1193 TEST_F(LayerTest, SafeOpaqueBackgroundColor) {
1185 LayerTreeHostFactory factory; 1194 LayerTreeHostFactory factory;
1186 scoped_ptr<LayerTreeHost> layer_tree_host = factory.Create(); 1195 scoped_ptr<LayerTreeHost> layer_tree_host = factory.Create();
1187 1196
1188 scoped_refptr<Layer> layer = Layer::Create(); 1197 scoped_refptr<Layer> layer = Layer::Create(layer_settings_);
1189 layer_tree_host->SetRootLayer(layer); 1198 layer_tree_host->SetRootLayer(layer);
1190 1199
1191 for (int contents_opaque = 0; contents_opaque < 2; ++contents_opaque) { 1200 for (int contents_opaque = 0; contents_opaque < 2; ++contents_opaque) {
1192 for (int layer_opaque = 0; layer_opaque < 2; ++layer_opaque) { 1201 for (int layer_opaque = 0; layer_opaque < 2; ++layer_opaque) {
1193 for (int host_opaque = 0; host_opaque < 2; ++host_opaque) { 1202 for (int host_opaque = 0; host_opaque < 2; ++host_opaque) {
1194 layer->SetContentsOpaque(!!contents_opaque); 1203 layer->SetContentsOpaque(!!contents_opaque);
1195 layer->SetBackgroundColor(layer_opaque ? SK_ColorRED 1204 layer->SetBackgroundColor(layer_opaque ? SK_ColorRED
1196 : SK_ColorTRANSPARENT); 1205 : SK_ColorTRANSPARENT);
1197 layer_tree_host->set_background_color( 1206 layer_tree_host->set_background_color(
1198 host_opaque ? SK_ColorRED : SK_ColorTRANSPARENT); 1207 host_opaque ? SK_ColorRED : SK_ColorTRANSPARENT);
1199 1208
1200 SkColor safe_color = layer->SafeOpaqueBackgroundColor(); 1209 SkColor safe_color = layer->SafeOpaqueBackgroundColor();
1201 if (contents_opaque) { 1210 if (contents_opaque) {
1202 EXPECT_EQ(SkColorGetA(safe_color), 255u) 1211 EXPECT_EQ(SkColorGetA(safe_color), 255u)
1203 << "Flags: " << contents_opaque << ", " << layer_opaque << ", " 1212 << "Flags: " << contents_opaque << ", " << layer_opaque << ", "
1204 << host_opaque << "\n"; 1213 << host_opaque << "\n";
1205 } else { 1214 } else {
1206 EXPECT_NE(SkColorGetA(safe_color), 255u) 1215 EXPECT_NE(SkColorGetA(safe_color), 255u)
1207 << "Flags: " << contents_opaque << ", " << layer_opaque << ", " 1216 << "Flags: " << contents_opaque << ", " << layer_opaque << ", "
1208 << host_opaque << "\n"; 1217 << host_opaque << "\n";
1209 } 1218 }
1210 } 1219 }
1211 } 1220 }
1212 } 1221 }
1213 } 1222 }
1214 1223
1215 class DrawsContentChangeLayer : public Layer { 1224 class DrawsContentChangeLayer : public Layer {
1216 public: 1225 public:
1217 static scoped_refptr<DrawsContentChangeLayer> Create() { 1226 static scoped_refptr<DrawsContentChangeLayer> Create(
1218 return make_scoped_refptr(new DrawsContentChangeLayer()); 1227 const LayerSettings& settings) {
1228 return make_scoped_refptr(new DrawsContentChangeLayer(settings));
1219 } 1229 }
1220 1230
1221 void SetLayerTreeHost(LayerTreeHost* host) override { 1231 void SetLayerTreeHost(LayerTreeHost* host) override {
1222 Layer::SetLayerTreeHost(host); 1232 Layer::SetLayerTreeHost(host);
1223 SetFakeDrawsContent(!fake_draws_content_); 1233 SetFakeDrawsContent(!fake_draws_content_);
1224 } 1234 }
1225 1235
1226 bool HasDrawableContent() const override { 1236 bool HasDrawableContent() const override {
1227 return fake_draws_content_ && Layer::HasDrawableContent(); 1237 return fake_draws_content_ && Layer::HasDrawableContent();
1228 } 1238 }
1229 1239
1230 void SetFakeDrawsContent(bool fake_draws_content) { 1240 void SetFakeDrawsContent(bool fake_draws_content) {
1231 fake_draws_content_ = fake_draws_content; 1241 fake_draws_content_ = fake_draws_content;
1232 UpdateDrawsContent(HasDrawableContent()); 1242 UpdateDrawsContent(HasDrawableContent());
1233 } 1243 }
1234 1244
1235 private: 1245 private:
1236 DrawsContentChangeLayer() : Layer(), fake_draws_content_(false) {} 1246 explicit DrawsContentChangeLayer(const LayerSettings& settings)
1247 : Layer(settings), fake_draws_content_(false) {}
1237 ~DrawsContentChangeLayer() override {} 1248 ~DrawsContentChangeLayer() override {}
1238 1249
1239 bool fake_draws_content_; 1250 bool fake_draws_content_;
1240 }; 1251 };
1241 1252
1242 TEST_F(LayerTest, DrawsContentChangedInSetLayerTreeHost) { 1253 TEST_F(LayerTest, DrawsContentChangedInSetLayerTreeHost) {
1243 scoped_refptr<Layer> root_layer = Layer::Create(); 1254 scoped_refptr<Layer> root_layer = Layer::Create(layer_settings_);
1244 scoped_refptr<DrawsContentChangeLayer> becomes_not_draws_content = 1255 scoped_refptr<DrawsContentChangeLayer> becomes_not_draws_content =
1245 DrawsContentChangeLayer::Create(); 1256 DrawsContentChangeLayer::Create(layer_settings_);
1246 scoped_refptr<DrawsContentChangeLayer> becomes_draws_content = 1257 scoped_refptr<DrawsContentChangeLayer> becomes_draws_content =
1247 DrawsContentChangeLayer::Create(); 1258 DrawsContentChangeLayer::Create(layer_settings_);
1248 root_layer->SetIsDrawable(true); 1259 root_layer->SetIsDrawable(true);
1249 becomes_not_draws_content->SetIsDrawable(true); 1260 becomes_not_draws_content->SetIsDrawable(true);
1250 becomes_not_draws_content->SetFakeDrawsContent(true); 1261 becomes_not_draws_content->SetFakeDrawsContent(true);
1251 EXPECT_EQ(0, root_layer->NumDescendantsThatDrawContent()); 1262 EXPECT_EQ(0, root_layer->NumDescendantsThatDrawContent());
1252 root_layer->AddChild(becomes_not_draws_content); 1263 root_layer->AddChild(becomes_not_draws_content);
1253 EXPECT_EQ(0, root_layer->NumDescendantsThatDrawContent()); 1264 EXPECT_EQ(0, root_layer->NumDescendantsThatDrawContent());
1254 1265
1255 becomes_draws_content->SetIsDrawable(true); 1266 becomes_draws_content->SetIsDrawable(true);
1256 root_layer->AddChild(becomes_draws_content); 1267 root_layer->AddChild(becomes_draws_content);
1257 EXPECT_EQ(1, root_layer->NumDescendantsThatDrawContent()); 1268 EXPECT_EQ(1, root_layer->NumDescendantsThatDrawContent());
1258 } 1269 }
1259 1270
1260 void ReceiveCopyOutputResult(int* result_count, 1271 void ReceiveCopyOutputResult(int* result_count,
1261 scoped_ptr<CopyOutputResult> result) { 1272 scoped_ptr<CopyOutputResult> result) {
1262 ++(*result_count); 1273 ++(*result_count);
1263 } 1274 }
1264 1275
1265 TEST_F(LayerTest, DedupesCopyOutputRequestsBySource) { 1276 TEST_F(LayerTest, DedupesCopyOutputRequestsBySource) {
1266 scoped_refptr<Layer> layer = Layer::Create(); 1277 scoped_refptr<Layer> layer = Layer::Create(layer_settings_);
1267 int result_count = 0; 1278 int result_count = 0;
1268 1279
1269 // Create identical requests without the source being set, and expect the 1280 // Create identical requests without the source being set, and expect the
1270 // layer does not abort either one. 1281 // layer does not abort either one.
1271 scoped_ptr<CopyOutputRequest> request = CopyOutputRequest::CreateRequest( 1282 scoped_ptr<CopyOutputRequest> request = CopyOutputRequest::CreateRequest(
1272 base::Bind(&ReceiveCopyOutputResult, &result_count)); 1283 base::Bind(&ReceiveCopyOutputResult, &result_count));
1273 layer->RequestCopyOfOutput(request.Pass()); 1284 layer->RequestCopyOfOutput(request.Pass());
1274 EXPECT_EQ(0, result_count); 1285 EXPECT_EQ(0, result_count);
1275 request = CopyOutputRequest::CreateRequest( 1286 request = CopyOutputRequest::CreateRequest(
1276 base::Bind(&ReceiveCopyOutputResult, &result_count)); 1287 base::Bind(&ReceiveCopyOutputResult, &result_count));
1277 layer->RequestCopyOfOutput(request.Pass()); 1288 layer->RequestCopyOfOutput(request.Pass());
1278 EXPECT_EQ(0, result_count); 1289 EXPECT_EQ(0, result_count);
1279 1290
1280 // When the layer is destroyed, expect both requests to be aborted. 1291 // When the layer is destroyed, expect both requests to be aborted.
1281 layer = nullptr; 1292 layer = nullptr;
1282 EXPECT_EQ(2, result_count); 1293 EXPECT_EQ(2, result_count);
1283 1294
1284 layer = Layer::Create(); 1295 layer = Layer::Create(layer_settings_);
1285 result_count = 0; 1296 result_count = 0;
1286 1297
1287 // Create identical requests, but this time the source is being set. Expect 1298 // Create identical requests, but this time the source is being set. Expect
1288 // the first request from |this| source aborts immediately when the second 1299 // the first request from |this| source aborts immediately when the second
1289 // request from |this| source is made. 1300 // request from |this| source is made.
1290 int did_receive_first_result_from_this_source = 0; 1301 int did_receive_first_result_from_this_source = 0;
1291 request = CopyOutputRequest::CreateRequest(base::Bind( 1302 request = CopyOutputRequest::CreateRequest(base::Bind(
1292 &ReceiveCopyOutputResult, &did_receive_first_result_from_this_source)); 1303 &ReceiveCopyOutputResult, &did_receive_first_result_from_this_source));
1293 request->set_source(this); 1304 request->set_source(this);
1294 layer->RequestCopyOfOutput(request.Pass()); 1305 layer->RequestCopyOfOutput(request.Pass());
(...skipping 25 matching lines...) Expand all
1320 // When the layer is destroyed, the other three requests should be aborted. 1331 // When the layer is destroyed, the other three requests should be aborted.
1321 layer = nullptr; 1332 layer = nullptr;
1322 EXPECT_EQ(1, did_receive_first_result_from_this_source); 1333 EXPECT_EQ(1, did_receive_first_result_from_this_source);
1323 EXPECT_EQ(1, did_receive_result_from_different_source); 1334 EXPECT_EQ(1, did_receive_result_from_different_source);
1324 EXPECT_EQ(1, did_receive_result_from_anonymous_source); 1335 EXPECT_EQ(1, did_receive_result_from_anonymous_source);
1325 EXPECT_EQ(1, did_receive_second_result_from_this_source); 1336 EXPECT_EQ(1, did_receive_second_result_from_this_source);
1326 } 1337 }
1327 1338
1328 } // namespace 1339 } // namespace
1329 } // namespace cc 1340 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layers/layer_perftest.cc ('k') | cc/layers/nine_patch_layer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698