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

Side by Side Diff: cc/trees/layer_tree_impl_unittest.cc

Issue 817653003: Update from https://crrev.com/309717 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 11 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/trees/layer_tree_host_unittest_scroll.cc ('k') | cc/trees/occlusion_tracker_perftest.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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/trees/layer_tree_impl.h" 5 #include "cc/trees/layer_tree_impl.h"
6 6
7 #include "cc/layers/heads_up_display_layer_impl.h" 7 #include "cc/layers/heads_up_display_layer_impl.h"
8 #include "cc/layers/layer.h" 8 #include "cc/layers/layer.h"
9 #include "cc/test/fake_impl_proxy.h" 9 #include "cc/test/fake_impl_proxy.h"
10 #include "cc/test/fake_layer_tree_host_impl.h" 10 #include "cc/test/fake_layer_tree_host_impl.h"
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 }; 43 };
44 44
45 TEST_F(LayerTreeImplTest, HitTestingForSingleLayer) { 45 TEST_F(LayerTreeImplTest, HitTestingForSingleLayer) {
46 scoped_ptr<LayerImpl> root = 46 scoped_ptr<LayerImpl> root =
47 LayerImpl::Create(host_impl().active_tree(), 12345); 47 LayerImpl::Create(host_impl().active_tree(), 12345);
48 48
49 gfx::Transform identity_matrix; 49 gfx::Transform identity_matrix;
50 gfx::Point3F transform_origin; 50 gfx::Point3F transform_origin;
51 gfx::PointF position; 51 gfx::PointF position;
52 gfx::Size bounds(100, 100); 52 gfx::Size bounds(100, 100);
53 SetLayerPropertiesForTesting(root.get(), 53 SetLayerPropertiesForTesting(root.get(), identity_matrix, transform_origin,
54 identity_matrix, 54 position, bounds, true, false, true);
55 transform_origin,
56 position,
57 bounds,
58 true,
59 false);
60 root->SetDrawsContent(true); 55 root->SetDrawsContent(true);
61 56
62 host_impl().SetViewportSize(root->bounds()); 57 host_impl().SetViewportSize(root->bounds());
63 host_impl().active_tree()->SetRootLayer(root.Pass()); 58 host_impl().active_tree()->SetRootLayer(root.Pass());
64 host_impl().UpdateNumChildrenAndDrawPropertiesForActiveTree(); 59 host_impl().UpdateNumChildrenAndDrawPropertiesForActiveTree();
65 60
66 // Sanity check the scenario we just created. 61 // Sanity check the scenario we just created.
67 ASSERT_EQ(1u, RenderSurfaceLayerList().size()); 62 ASSERT_EQ(1u, RenderSurfaceLayerList().size());
68 ASSERT_EQ(1u, root_layer()->render_surface()->layer_list().size()); 63 ASSERT_EQ(1u, root_layer()->render_surface()->layer_list().size());
69 64
(...skipping 25 matching lines...) Expand all
95 TEST_F(LayerTreeImplTest, HitTestingForSingleLayerAndHud) { 90 TEST_F(LayerTreeImplTest, HitTestingForSingleLayerAndHud) {
96 scoped_ptr<LayerImpl> root = 91 scoped_ptr<LayerImpl> root =
97 LayerImpl::Create(host_impl().active_tree(), 12345); 92 LayerImpl::Create(host_impl().active_tree(), 12345);
98 scoped_ptr<HeadsUpDisplayLayerImpl> hud = 93 scoped_ptr<HeadsUpDisplayLayerImpl> hud =
99 HeadsUpDisplayLayerImpl::Create(host_impl().active_tree(), 11111); 94 HeadsUpDisplayLayerImpl::Create(host_impl().active_tree(), 11111);
100 95
101 gfx::Transform identity_matrix; 96 gfx::Transform identity_matrix;
102 gfx::Point3F transform_origin; 97 gfx::Point3F transform_origin;
103 gfx::PointF position; 98 gfx::PointF position;
104 gfx::Size bounds(100, 100); 99 gfx::Size bounds(100, 100);
105 SetLayerPropertiesForTesting(root.get(), 100 SetLayerPropertiesForTesting(root.get(), identity_matrix, transform_origin,
106 identity_matrix, 101 position, bounds, true, false, true);
107 transform_origin,
108 position,
109 bounds,
110 true,
111 false);
112 root->SetDrawsContent(true); 102 root->SetDrawsContent(true);
113 103
114 // Create hud and add it as a child of root. 104 // Create hud and add it as a child of root.
115 gfx::Size hud_bounds(200, 200); 105 gfx::Size hud_bounds(200, 200);
116 SetLayerPropertiesForTesting(hud.get(), 106 SetLayerPropertiesForTesting(hud.get(), identity_matrix, transform_origin,
117 identity_matrix, 107 position, hud_bounds, true, false, false);
118 transform_origin,
119 position,
120 hud_bounds,
121 true,
122 false);
123 hud->SetDrawsContent(true); 108 hud->SetDrawsContent(true);
124 109
125 host_impl().active_tree()->set_hud_layer(hud.get()); 110 host_impl().active_tree()->set_hud_layer(hud.get());
126 root->AddChild(hud.Pass()); 111 root->AddChild(hud.Pass());
127 112
128 host_impl().SetViewportSize(hud_bounds); 113 host_impl().SetViewportSize(hud_bounds);
129 host_impl().active_tree()->SetRootLayer(root.Pass()); 114 host_impl().active_tree()->SetRootLayer(root.Pass());
130 host_impl().UpdateNumChildrenAndDrawPropertiesForActiveTree(); 115 host_impl().UpdateNumChildrenAndDrawPropertiesForActiveTree();
131 116
132 // Sanity check the scenario we just created. 117 // Sanity check the scenario we just created.
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 uninvertible_transform.matrix().set(0, 0, 0.0); 152 uninvertible_transform.matrix().set(0, 0, 0.0);
168 uninvertible_transform.matrix().set(1, 1, 0.0); 153 uninvertible_transform.matrix().set(1, 1, 0.0);
169 uninvertible_transform.matrix().set(2, 2, 0.0); 154 uninvertible_transform.matrix().set(2, 2, 0.0);
170 uninvertible_transform.matrix().set(3, 3, 0.0); 155 uninvertible_transform.matrix().set(3, 3, 0.0);
171 ASSERT_FALSE(uninvertible_transform.IsInvertible()); 156 ASSERT_FALSE(uninvertible_transform.IsInvertible());
172 157
173 gfx::Transform identity_matrix; 158 gfx::Transform identity_matrix;
174 gfx::Point3F transform_origin; 159 gfx::Point3F transform_origin;
175 gfx::PointF position; 160 gfx::PointF position;
176 gfx::Size bounds(100, 100); 161 gfx::Size bounds(100, 100);
177 SetLayerPropertiesForTesting(root.get(), 162 SetLayerPropertiesForTesting(root.get(), uninvertible_transform,
178 uninvertible_transform, 163 transform_origin, position, bounds, true, false,
179 transform_origin, 164 true);
180 position,
181 bounds,
182 true,
183 false);
184 root->SetDrawsContent(true); 165 root->SetDrawsContent(true);
185 166
186 host_impl().SetViewportSize(root->bounds()); 167 host_impl().SetViewportSize(root->bounds());
187 host_impl().active_tree()->SetRootLayer(root.Pass()); 168 host_impl().active_tree()->SetRootLayer(root.Pass());
188 host_impl().UpdateNumChildrenAndDrawPropertiesForActiveTree(); 169 host_impl().UpdateNumChildrenAndDrawPropertiesForActiveTree();
189 // Sanity check the scenario we just created. 170 // Sanity check the scenario we just created.
190 ASSERT_EQ(1u, RenderSurfaceLayerList().size()); 171 ASSERT_EQ(1u, RenderSurfaceLayerList().size());
191 ASSERT_EQ(1u, root_layer()->render_surface()->layer_list().size()); 172 ASSERT_EQ(1u, root_layer()->render_surface()->layer_list().size());
192 ASSERT_FALSE(root_layer()->screen_space_transform().IsInvertible()); 173 ASSERT_FALSE(root_layer()->screen_space_transform().IsInvertible());
193 174
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 TEST_F(LayerTreeImplTest, HitTestingForSinglePositionedLayer) { 214 TEST_F(LayerTreeImplTest, HitTestingForSinglePositionedLayer) {
234 scoped_ptr<LayerImpl> root = 215 scoped_ptr<LayerImpl> root =
235 LayerImpl::Create(host_impl().active_tree(), 12345); 216 LayerImpl::Create(host_impl().active_tree(), 12345);
236 217
237 gfx::Transform identity_matrix; 218 gfx::Transform identity_matrix;
238 gfx::Point3F transform_origin; 219 gfx::Point3F transform_origin;
239 // this layer is positioned, and hit testing should correctly know where the 220 // this layer is positioned, and hit testing should correctly know where the
240 // layer is located. 221 // layer is located.
241 gfx::PointF position(50.f, 50.f); 222 gfx::PointF position(50.f, 50.f);
242 gfx::Size bounds(100, 100); 223 gfx::Size bounds(100, 100);
243 SetLayerPropertiesForTesting(root.get(), 224 SetLayerPropertiesForTesting(root.get(), identity_matrix, transform_origin,
244 identity_matrix, 225 position, bounds, true, false, true);
245 transform_origin,
246 position,
247 bounds,
248 true,
249 false);
250 root->SetDrawsContent(true); 226 root->SetDrawsContent(true);
251 227
252 host_impl().SetViewportSize(root->bounds()); 228 host_impl().SetViewportSize(root->bounds());
253 host_impl().active_tree()->SetRootLayer(root.Pass()); 229 host_impl().active_tree()->SetRootLayer(root.Pass());
254 host_impl().UpdateNumChildrenAndDrawPropertiesForActiveTree(); 230 host_impl().UpdateNumChildrenAndDrawPropertiesForActiveTree();
255 231
256 // Sanity check the scenario we just created. 232 // Sanity check the scenario we just created.
257 ASSERT_EQ(1u, RenderSurfaceLayerList().size()); 233 ASSERT_EQ(1u, RenderSurfaceLayerList().size());
258 ASSERT_EQ(1u, root_layer()->render_surface()->layer_list().size()); 234 ASSERT_EQ(1u, root_layer()->render_surface()->layer_list().size());
259 235
(...skipping 29 matching lines...) Expand all
289 LayerImpl::Create(host_impl().active_tree(), 12345); 265 LayerImpl::Create(host_impl().active_tree(), 12345);
290 266
291 gfx::Transform identity_matrix; 267 gfx::Transform identity_matrix;
292 gfx::Transform rotation45_degrees_about_center; 268 gfx::Transform rotation45_degrees_about_center;
293 rotation45_degrees_about_center.Translate(50.0, 50.0); 269 rotation45_degrees_about_center.Translate(50.0, 50.0);
294 rotation45_degrees_about_center.RotateAboutZAxis(45.0); 270 rotation45_degrees_about_center.RotateAboutZAxis(45.0);
295 rotation45_degrees_about_center.Translate(-50.0, -50.0); 271 rotation45_degrees_about_center.Translate(-50.0, -50.0);
296 gfx::Point3F transform_origin; 272 gfx::Point3F transform_origin;
297 gfx::PointF position; 273 gfx::PointF position;
298 gfx::Size bounds(100, 100); 274 gfx::Size bounds(100, 100);
299 SetLayerPropertiesForTesting(root.get(), 275 SetLayerPropertiesForTesting(root.get(), rotation45_degrees_about_center,
300 rotation45_degrees_about_center, 276 transform_origin, position, bounds, true, false,
301 transform_origin, 277 true);
302 position,
303 bounds,
304 true,
305 false);
306 root->SetDrawsContent(true); 278 root->SetDrawsContent(true);
307 279
308 host_impl().SetViewportSize(root->bounds()); 280 host_impl().SetViewportSize(root->bounds());
309 host_impl().active_tree()->SetRootLayer(root.Pass()); 281 host_impl().active_tree()->SetRootLayer(root.Pass());
310 host_impl().UpdateNumChildrenAndDrawPropertiesForActiveTree(); 282 host_impl().UpdateNumChildrenAndDrawPropertiesForActiveTree();
311 283
312 // Sanity check the scenario we just created. 284 // Sanity check the scenario we just created.
313 ASSERT_EQ(1u, RenderSurfaceLayerList().size()); 285 ASSERT_EQ(1u, RenderSurfaceLayerList().size());
314 ASSERT_EQ(1u, root_layer()->render_surface()->layer_list().size()); 286 ASSERT_EQ(1u, root_layer()->render_surface()->layer_list().size());
315 287
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 perspective_projection_about_center.Translate(50.0, 50.0); 330 perspective_projection_about_center.Translate(50.0, 50.0);
359 perspective_projection_about_center.ApplyPerspectiveDepth(1.0); 331 perspective_projection_about_center.ApplyPerspectiveDepth(1.0);
360 perspective_projection_about_center.Translate(-50.0, -50.0); 332 perspective_projection_about_center.Translate(-50.0, -50.0);
361 gfx::Transform translation_by_z; 333 gfx::Transform translation_by_z;
362 translation_by_z.Translate3d(0.0, 0.0, -1.0); 334 translation_by_z.Translate3d(0.0, 0.0, -1.0);
363 335
364 gfx::Point3F transform_origin; 336 gfx::Point3F transform_origin;
365 gfx::PointF position; 337 gfx::PointF position;
366 gfx::Size bounds(100, 100); 338 gfx::Size bounds(100, 100);
367 SetLayerPropertiesForTesting( 339 SetLayerPropertiesForTesting(
368 root.get(), 340 root.get(), perspective_projection_about_center * translation_by_z,
369 perspective_projection_about_center * translation_by_z, 341 transform_origin, position, bounds, true, false, true);
370 transform_origin,
371 position,
372 bounds,
373 true,
374 false);
375 root->SetDrawsContent(true); 342 root->SetDrawsContent(true);
376 343
377 host_impl().SetViewportSize(root->bounds()); 344 host_impl().SetViewportSize(root->bounds());
378 host_impl().active_tree()->SetRootLayer(root.Pass()); 345 host_impl().active_tree()->SetRootLayer(root.Pass());
379 host_impl().UpdateNumChildrenAndDrawPropertiesForActiveTree(); 346 host_impl().UpdateNumChildrenAndDrawPropertiesForActiveTree();
380 347
381 // Sanity check the scenario we just created. 348 // Sanity check the scenario we just created.
382 ASSERT_EQ(1u, RenderSurfaceLayerList().size()); 349 ASSERT_EQ(1u, RenderSurfaceLayerList().size());
383 ASSERT_EQ(1u, root_layer()->render_surface()->layer_list().size()); 350 ASSERT_EQ(1u, root_layer()->render_surface()->layer_list().size());
384 351
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
419 // 386 //
420 // To test this, the layer is positioned at (25, 25), and is size (50, 50). If 387 // To test this, the layer is positioned at (25, 25), and is size (50, 50). If
421 // contents scale is ignored, then hit testing will mis-interpret the visible 388 // contents scale is ignored, then hit testing will mis-interpret the visible
422 // content rect as being larger than the actual bounds of the layer. 389 // content rect as being larger than the actual bounds of the layer.
423 // 390 //
424 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl().active_tree(), 1); 391 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl().active_tree(), 1);
425 392
426 gfx::Transform identity_matrix; 393 gfx::Transform identity_matrix;
427 gfx::Point3F transform_origin; 394 gfx::Point3F transform_origin;
428 395
429 SetLayerPropertiesForTesting(root.get(), 396 SetLayerPropertiesForTesting(root.get(), identity_matrix, transform_origin,
430 identity_matrix, 397 gfx::PointF(), gfx::Size(100, 100), true, false,
431 transform_origin, 398 true);
432 gfx::PointF(),
433 gfx::Size(100, 100),
434 true,
435 false);
436 { 399 {
437 gfx::PointF position(25.f, 25.f); 400 gfx::PointF position(25.f, 25.f);
438 gfx::Size bounds(50, 50); 401 gfx::Size bounds(50, 50);
439 scoped_ptr<LayerImpl> test_layer = 402 scoped_ptr<LayerImpl> test_layer =
440 LayerImpl::Create(host_impl().active_tree(), 12345); 403 LayerImpl::Create(host_impl().active_tree(), 12345);
441 SetLayerPropertiesForTesting(test_layer.get(), 404 SetLayerPropertiesForTesting(test_layer.get(), identity_matrix,
442 identity_matrix, 405 transform_origin, position, bounds, true,
443 transform_origin, 406 false, false);
444 position,
445 bounds,
446 true,
447 false);
448 407
449 // override content bounds and contents scale 408 // override content bounds and contents scale
450 test_layer->SetContentBounds(gfx::Size(100, 100)); 409 test_layer->SetContentBounds(gfx::Size(100, 100));
451 test_layer->SetContentsScale(2, 2); 410 test_layer->SetContentsScale(2, 2);
452 411
453 test_layer->SetDrawsContent(true); 412 test_layer->SetDrawsContent(true);
454 root->AddChild(test_layer.Pass()); 413 root->AddChild(test_layer.Pass());
455 } 414 }
456 415
457 host_impl().SetViewportSize(root->bounds()); 416 host_impl().SetViewportSize(root->bounds());
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
499 } 458 }
500 459
501 TEST_F(LayerTreeImplTest, HitTestingForSimpleClippedLayer) { 460 TEST_F(LayerTreeImplTest, HitTestingForSimpleClippedLayer) {
502 // Test that hit-testing will only work for the visible portion of a layer, 461 // Test that hit-testing will only work for the visible portion of a layer,
503 // and not the entire layer bounds. Here we just test the simple axis-aligned 462 // and not the entire layer bounds. Here we just test the simple axis-aligned
504 // case. 463 // case.
505 gfx::Transform identity_matrix; 464 gfx::Transform identity_matrix;
506 gfx::Point3F transform_origin; 465 gfx::Point3F transform_origin;
507 466
508 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl().active_tree(), 1); 467 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl().active_tree(), 1);
509 SetLayerPropertiesForTesting(root.get(), 468 SetLayerPropertiesForTesting(root.get(), identity_matrix, transform_origin,
510 identity_matrix, 469 gfx::PointF(), gfx::Size(100, 100), true, false,
511 transform_origin, 470 true);
512 gfx::PointF(),
513 gfx::Size(100, 100),
514 true,
515 false);
516 { 471 {
517 scoped_ptr<LayerImpl> clipping_layer = 472 scoped_ptr<LayerImpl> clipping_layer =
518 LayerImpl::Create(host_impl().active_tree(), 123); 473 LayerImpl::Create(host_impl().active_tree(), 123);
519 // this layer is positioned, and hit testing should correctly know where the 474 // this layer is positioned, and hit testing should correctly know where the
520 // layer is located. 475 // layer is located.
521 gfx::PointF position(25.f, 25.f); 476 gfx::PointF position(25.f, 25.f);
522 gfx::Size bounds(50, 50); 477 gfx::Size bounds(50, 50);
523 SetLayerPropertiesForTesting(clipping_layer.get(), 478 SetLayerPropertiesForTesting(clipping_layer.get(), identity_matrix,
524 identity_matrix, 479 transform_origin, position, bounds, true,
525 transform_origin, 480 false, false);
526 position,
527 bounds,
528 true,
529 false);
530 clipping_layer->SetMasksToBounds(true); 481 clipping_layer->SetMasksToBounds(true);
531 482
532 scoped_ptr<LayerImpl> child = 483 scoped_ptr<LayerImpl> child =
533 LayerImpl::Create(host_impl().active_tree(), 456); 484 LayerImpl::Create(host_impl().active_tree(), 456);
534 position = gfx::PointF(-50.f, -50.f); 485 position = gfx::PointF(-50.f, -50.f);
535 bounds = gfx::Size(300, 300); 486 bounds = gfx::Size(300, 300);
536 SetLayerPropertiesForTesting(child.get(), 487 SetLayerPropertiesForTesting(child.get(), identity_matrix, transform_origin,
537 identity_matrix, 488 position, bounds, true, false, false);
538 transform_origin,
539 position,
540 bounds,
541 true,
542 false);
543 child->SetDrawsContent(true); 489 child->SetDrawsContent(true);
544 clipping_layer->AddChild(child.Pass()); 490 clipping_layer->AddChild(child.Pass());
545 root->AddChild(clipping_layer.Pass()); 491 root->AddChild(clipping_layer.Pass());
546 } 492 }
547 493
548 host_impl().SetViewportSize(root->bounds()); 494 host_impl().SetViewportSize(root->bounds());
549 host_impl().active_tree()->SetRootLayer(root.Pass()); 495 host_impl().active_tree()->SetRootLayer(root.Pass());
550 host_impl().UpdateNumChildrenAndDrawPropertiesForActiveTree(); 496 host_impl().UpdateNumChildrenAndDrawPropertiesForActiveTree();
551 497
552 // Sanity check the scenario we just created. 498 // Sanity check the scenario we just created.
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
594 // the root + child clips combined create a triangle. The rotated_leaf will 540 // the root + child clips combined create a triangle. The rotated_leaf will
595 // only be visible where it overlaps this triangle. 541 // only be visible where it overlaps this triangle.
596 // 542 //
597 scoped_ptr<LayerImpl> root = 543 scoped_ptr<LayerImpl> root =
598 LayerImpl::Create(host_impl().active_tree(), 123); 544 LayerImpl::Create(host_impl().active_tree(), 123);
599 545
600 gfx::Transform identity_matrix; 546 gfx::Transform identity_matrix;
601 gfx::Point3F transform_origin; 547 gfx::Point3F transform_origin;
602 gfx::PointF position; 548 gfx::PointF position;
603 gfx::Size bounds(100, 100); 549 gfx::Size bounds(100, 100);
604 SetLayerPropertiesForTesting(root.get(), 550 SetLayerPropertiesForTesting(root.get(), identity_matrix, transform_origin,
605 identity_matrix, 551 position, bounds, true, false, true);
606 transform_origin,
607 position,
608 bounds,
609 true,
610 false);
611 root->SetMasksToBounds(true); 552 root->SetMasksToBounds(true);
612 { 553 {
613 scoped_ptr<LayerImpl> child = 554 scoped_ptr<LayerImpl> child =
614 LayerImpl::Create(host_impl().active_tree(), 456); 555 LayerImpl::Create(host_impl().active_tree(), 456);
615 scoped_ptr<LayerImpl> grand_child = 556 scoped_ptr<LayerImpl> grand_child =
616 LayerImpl::Create(host_impl().active_tree(), 789); 557 LayerImpl::Create(host_impl().active_tree(), 789);
617 scoped_ptr<LayerImpl> rotated_leaf = 558 scoped_ptr<LayerImpl> rotated_leaf =
618 LayerImpl::Create(host_impl().active_tree(), 2468); 559 LayerImpl::Create(host_impl().active_tree(), 2468);
619 560
620 position = gfx::PointF(10.f, 10.f); 561 position = gfx::PointF(10.f, 10.f);
621 bounds = gfx::Size(80, 80); 562 bounds = gfx::Size(80, 80);
622 SetLayerPropertiesForTesting(child.get(), 563 SetLayerPropertiesForTesting(child.get(), identity_matrix, transform_origin,
623 identity_matrix, 564 position, bounds, true, false, false);
624 transform_origin,
625 position,
626 bounds,
627 true,
628 false);
629 child->SetMasksToBounds(true); 565 child->SetMasksToBounds(true);
630 566
631 gfx::Transform rotation45_degrees_about_corner; 567 gfx::Transform rotation45_degrees_about_corner;
632 rotation45_degrees_about_corner.RotateAboutZAxis(45.0); 568 rotation45_degrees_about_corner.RotateAboutZAxis(45.0);
633 569
634 // remember, positioned with respect to its parent which is already at 10, 570 // remember, positioned with respect to its parent which is already at 10,
635 // 10 571 // 10
636 position = gfx::PointF(); 572 position = gfx::PointF();
637 bounds = 573 bounds =
638 gfx::Size(200, 200); // to ensure it covers at least sqrt(2) * 100. 574 gfx::Size(200, 200); // to ensure it covers at least sqrt(2) * 100.
639 SetLayerPropertiesForTesting(grand_child.get(), 575 SetLayerPropertiesForTesting(
640 rotation45_degrees_about_corner, 576 grand_child.get(), rotation45_degrees_about_corner, transform_origin,
641 transform_origin, 577 position, bounds, true, false, false);
642 position,
643 bounds,
644 true,
645 false);
646 grand_child->SetMasksToBounds(true); 578 grand_child->SetMasksToBounds(true);
647 579
648 // Rotates about the center of the layer 580 // Rotates about the center of the layer
649 gfx::Transform rotated_leaf_transform; 581 gfx::Transform rotated_leaf_transform;
650 rotated_leaf_transform.Translate( 582 rotated_leaf_transform.Translate(
651 -10.0, -10.0); // cancel out the grand_parent's position 583 -10.0, -10.0); // cancel out the grand_parent's position
652 rotated_leaf_transform.RotateAboutZAxis( 584 rotated_leaf_transform.RotateAboutZAxis(
653 -45.0); // cancel out the corner 45-degree rotation of the parent. 585 -45.0); // cancel out the corner 45-degree rotation of the parent.
654 rotated_leaf_transform.Translate(50.0, 50.0); 586 rotated_leaf_transform.Translate(50.0, 50.0);
655 rotated_leaf_transform.RotateAboutZAxis(45.0); 587 rotated_leaf_transform.RotateAboutZAxis(45.0);
656 rotated_leaf_transform.Translate(-50.0, -50.0); 588 rotated_leaf_transform.Translate(-50.0, -50.0);
657 position = gfx::PointF(); 589 position = gfx::PointF();
658 bounds = gfx::Size(100, 100); 590 bounds = gfx::Size(100, 100);
659 SetLayerPropertiesForTesting(rotated_leaf.get(), 591 SetLayerPropertiesForTesting(rotated_leaf.get(), rotated_leaf_transform,
660 rotated_leaf_transform, 592 transform_origin, position, bounds, true,
661 transform_origin, 593 false, false);
662 position,
663 bounds,
664 true,
665 false);
666 rotated_leaf->SetDrawsContent(true); 594 rotated_leaf->SetDrawsContent(true);
667 595
668 grand_child->AddChild(rotated_leaf.Pass()); 596 grand_child->AddChild(rotated_leaf.Pass());
669 child->AddChild(grand_child.Pass()); 597 child->AddChild(grand_child.Pass());
670 root->AddChild(child.Pass()); 598 root->AddChild(child.Pass());
671 } 599 }
672 600
673 host_impl().SetViewportSize(root->bounds()); 601 host_impl().SetViewportSize(root->bounds());
674 host_impl().active_tree()->SetRootLayer(root.Pass()); 602 host_impl().active_tree()->SetRootLayer(root.Pass());
675 host_impl().UpdateNumChildrenAndDrawPropertiesForActiveTree(); 603 host_impl().UpdateNumChildrenAndDrawPropertiesForActiveTree();
676 604
677 // Sanity check the scenario we just created.
678 // The grand_child is expected to create a render surface because it
679 // MasksToBounds and is not axis aligned.
680 ASSERT_EQ(2u, RenderSurfaceLayerList().size());
681 ASSERT_EQ(
682 1u,
683 RenderSurfaceLayerList().at(0)->render_surface()->layer_list().size());
684 ASSERT_EQ(789,
685 RenderSurfaceLayerList()
686 .at(0)
687 ->render_surface()
688 ->layer_list()
689 .at(0)
690 ->id()); // grand_child's surface.
691 ASSERT_EQ(
692 1u,
693 RenderSurfaceLayerList().at(1)->render_surface()->layer_list().size());
694 ASSERT_EQ(
695 2468,
696 RenderSurfaceLayerList()[1]->render_surface()->layer_list().at(0)->id());
697
698 // (11, 89) is close to the the bottom left corner within the clip, but it is 605 // (11, 89) is close to the the bottom left corner within the clip, but it is
699 // not inside the layer. 606 // not inside the layer.
700 gfx::Point test_point(11, 89); 607 gfx::Point test_point(11, 89);
701 LayerImpl* result_layer = 608 LayerImpl* result_layer =
702 host_impl().active_tree()->FindLayerThatIsHitByPoint(test_point); 609 host_impl().active_tree()->FindLayerThatIsHitByPoint(test_point);
703 EXPECT_FALSE(result_layer); 610 EXPECT_FALSE(result_layer);
704 611
705 // Closer inwards from the bottom left will overlap the layer. 612 // Closer inwards from the bottom left will overlap the layer.
706 test_point = gfx::Point(25, 75); 613 test_point = gfx::Point(25, 75);
707 result_layer = 614 result_layer =
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
742 EXPECT_EQ(2468, result_layer->id()); 649 EXPECT_EQ(2468, result_layer->id());
743 } 650 }
744 651
745 TEST_F(LayerTreeImplTest, HitTestingForNonClippingIntermediateLayer) { 652 TEST_F(LayerTreeImplTest, HitTestingForNonClippingIntermediateLayer) {
746 // This test checks that hit testing code does not accidentally clip to layer 653 // This test checks that hit testing code does not accidentally clip to layer
747 // bounds for a layer that actually does not clip. 654 // bounds for a layer that actually does not clip.
748 gfx::Transform identity_matrix; 655 gfx::Transform identity_matrix;
749 gfx::Point3F transform_origin; 656 gfx::Point3F transform_origin;
750 657
751 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl().active_tree(), 1); 658 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl().active_tree(), 1);
752 SetLayerPropertiesForTesting(root.get(), 659 SetLayerPropertiesForTesting(root.get(), identity_matrix, transform_origin,
753 identity_matrix, 660 gfx::PointF(), gfx::Size(100, 100), true, false,
754 transform_origin, 661 true);
755 gfx::PointF(),
756 gfx::Size(100, 100),
757 true,
758 false);
759 { 662 {
760 scoped_ptr<LayerImpl> intermediate_layer = 663 scoped_ptr<LayerImpl> intermediate_layer =
761 LayerImpl::Create(host_impl().active_tree(), 123); 664 LayerImpl::Create(host_impl().active_tree(), 123);
762 // this layer is positioned, and hit testing should correctly know where the 665 // this layer is positioned, and hit testing should correctly know where the
763 // layer is located. 666 // layer is located.
764 gfx::PointF position(10.f, 10.f); 667 gfx::PointF position(10.f, 10.f);
765 gfx::Size bounds(50, 50); 668 gfx::Size bounds(50, 50);
766 SetLayerPropertiesForTesting(intermediate_layer.get(), 669 SetLayerPropertiesForTesting(intermediate_layer.get(), identity_matrix,
767 identity_matrix, 670 transform_origin, position, bounds, true,
768 transform_origin, 671 false, false);
769 position,
770 bounds,
771 true,
772 false);
773 // Sanity check the intermediate layer should not clip. 672 // Sanity check the intermediate layer should not clip.
774 ASSERT_FALSE(intermediate_layer->masks_to_bounds()); 673 ASSERT_FALSE(intermediate_layer->masks_to_bounds());
775 ASSERT_FALSE(intermediate_layer->mask_layer()); 674 ASSERT_FALSE(intermediate_layer->mask_layer());
776 675
777 // The child of the intermediate_layer is translated so that it does not 676 // The child of the intermediate_layer is translated so that it does not
778 // overlap intermediate_layer at all. If child is incorrectly clipped, we 677 // overlap intermediate_layer at all. If child is incorrectly clipped, we
779 // would not be able to hit it successfully. 678 // would not be able to hit it successfully.
780 scoped_ptr<LayerImpl> child = 679 scoped_ptr<LayerImpl> child =
781 LayerImpl::Create(host_impl().active_tree(), 456); 680 LayerImpl::Create(host_impl().active_tree(), 456);
782 position = gfx::PointF(60.f, 60.f); // 70, 70 in screen space 681 position = gfx::PointF(60.f, 60.f); // 70, 70 in screen space
783 bounds = gfx::Size(20, 20); 682 bounds = gfx::Size(20, 20);
784 SetLayerPropertiesForTesting(child.get(), 683 SetLayerPropertiesForTesting(child.get(), identity_matrix, transform_origin,
785 identity_matrix, 684 position, bounds, true, false, false);
786 transform_origin,
787 position,
788 bounds,
789 true,
790 false);
791 child->SetDrawsContent(true); 685 child->SetDrawsContent(true);
792 intermediate_layer->AddChild(child.Pass()); 686 intermediate_layer->AddChild(child.Pass());
793 root->AddChild(intermediate_layer.Pass()); 687 root->AddChild(intermediate_layer.Pass());
794 } 688 }
795 689
796 host_impl().SetViewportSize(root->bounds()); 690 host_impl().SetViewportSize(root->bounds());
797 host_impl().active_tree()->SetRootLayer(root.Pass()); 691 host_impl().active_tree()->SetRootLayer(root.Pass());
798 host_impl().UpdateNumChildrenAndDrawPropertiesForActiveTree(); 692 host_impl().UpdateNumChildrenAndDrawPropertiesForActiveTree();
799 693
800 // Sanity check the scenario we just created. 694 // Sanity check the scenario we just created.
(...skipping 26 matching lines...) Expand all
827 EXPECT_EQ(456, result_layer->id()); 721 EXPECT_EQ(456, result_layer->id());
828 } 722 }
829 723
830 TEST_F(LayerTreeImplTest, HitTestingForMultipleLayers) { 724 TEST_F(LayerTreeImplTest, HitTestingForMultipleLayers) {
831 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl().active_tree(), 1); 725 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl().active_tree(), 1);
832 726
833 gfx::Transform identity_matrix; 727 gfx::Transform identity_matrix;
834 gfx::Point3F transform_origin; 728 gfx::Point3F transform_origin;
835 gfx::PointF position; 729 gfx::PointF position;
836 gfx::Size bounds(100, 100); 730 gfx::Size bounds(100, 100);
837 SetLayerPropertiesForTesting(root.get(), 731 SetLayerPropertiesForTesting(root.get(), identity_matrix, transform_origin,
838 identity_matrix, 732 position, bounds, true, false, true);
839 transform_origin,
840 position,
841 bounds,
842 true,
843 false);
844 root->SetDrawsContent(true); 733 root->SetDrawsContent(true);
845 { 734 {
846 // child 1 and child2 are initialized to overlap between x=50 and x=60. 735 // child 1 and child2 are initialized to overlap between x=50 and x=60.
847 // grand_child is set to overlap both child1 and child2 between y=50 and 736 // grand_child is set to overlap both child1 and child2 between y=50 and
848 // y=60. The expected stacking order is: (front) child2, (second) 737 // y=60. The expected stacking order is: (front) child2, (second)
849 // grand_child, (third) child1, and (back) the root layer behind all other 738 // grand_child, (third) child1, and (back) the root layer behind all other
850 // layers. 739 // layers.
851 740
852 scoped_ptr<LayerImpl> child1 = 741 scoped_ptr<LayerImpl> child1 =
853 LayerImpl::Create(host_impl().active_tree(), 2); 742 LayerImpl::Create(host_impl().active_tree(), 2);
854 scoped_ptr<LayerImpl> child2 = 743 scoped_ptr<LayerImpl> child2 =
855 LayerImpl::Create(host_impl().active_tree(), 3); 744 LayerImpl::Create(host_impl().active_tree(), 3);
856 scoped_ptr<LayerImpl> grand_child1 = 745 scoped_ptr<LayerImpl> grand_child1 =
857 LayerImpl::Create(host_impl().active_tree(), 4); 746 LayerImpl::Create(host_impl().active_tree(), 4);
858 747
859 position = gfx::PointF(10.f, 10.f); 748 position = gfx::PointF(10.f, 10.f);
860 bounds = gfx::Size(50, 50); 749 bounds = gfx::Size(50, 50);
861 SetLayerPropertiesForTesting(child1.get(), 750 SetLayerPropertiesForTesting(child1.get(), identity_matrix,
862 identity_matrix, 751 transform_origin, position, bounds, true,
863 transform_origin, 752 false, false);
864 position,
865 bounds,
866 true,
867 false);
868 child1->SetDrawsContent(true); 753 child1->SetDrawsContent(true);
869 754
870 position = gfx::PointF(50.f, 10.f); 755 position = gfx::PointF(50.f, 10.f);
871 bounds = gfx::Size(50, 50); 756 bounds = gfx::Size(50, 50);
872 SetLayerPropertiesForTesting(child2.get(), 757 SetLayerPropertiesForTesting(child2.get(), identity_matrix,
873 identity_matrix, 758 transform_origin, position, bounds, true,
874 transform_origin, 759 false, false);
875 position,
876 bounds,
877 true,
878 false);
879 child2->SetDrawsContent(true); 760 child2->SetDrawsContent(true);
880 761
881 // Remember that grand_child is positioned with respect to its parent (i.e. 762 // Remember that grand_child is positioned with respect to its parent (i.e.
882 // child1). In screen space, the intended position is (10, 50), with size 763 // child1). In screen space, the intended position is (10, 50), with size
883 // 100 x 50. 764 // 100 x 50.
884 position = gfx::PointF(0.f, 40.f); 765 position = gfx::PointF(0.f, 40.f);
885 bounds = gfx::Size(100, 50); 766 bounds = gfx::Size(100, 50);
886 SetLayerPropertiesForTesting(grand_child1.get(), 767 SetLayerPropertiesForTesting(grand_child1.get(), identity_matrix,
887 identity_matrix, 768 transform_origin, position, bounds, true,
888 transform_origin, 769 false, false);
889 position,
890 bounds,
891 true,
892 false);
893 grand_child1->SetDrawsContent(true); 770 grand_child1->SetDrawsContent(true);
894 771
895 child1->AddChild(grand_child1.Pass()); 772 child1->AddChild(grand_child1.Pass());
896 root->AddChild(child1.Pass()); 773 root->AddChild(child1.Pass());
897 root->AddChild(child2.Pass()); 774 root->AddChild(child2.Pass());
898 } 775 }
899 776
900 LayerImpl* child1 = root->children()[0]; 777 LayerImpl* child1 = root->children()[0];
901 LayerImpl* child2 = root->children()[1]; 778 LayerImpl* child2 = root->children()[1];
902 LayerImpl* grand_child1 = child1->children()[0]; 779 LayerImpl* grand_child1 = child1->children()[0];
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
966 EXPECT_EQ(4, result_layer->id()); 843 EXPECT_EQ(4, result_layer->id());
967 } 844 }
968 845
969 TEST_F(LayerTreeImplTest, HitTestingForMultipleLayersAtVaryingDepths) { 846 TEST_F(LayerTreeImplTest, HitTestingForMultipleLayersAtVaryingDepths) {
970 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl().active_tree(), 1); 847 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl().active_tree(), 1);
971 848
972 gfx::Transform identity_matrix; 849 gfx::Transform identity_matrix;
973 gfx::Point3F transform_origin; 850 gfx::Point3F transform_origin;
974 gfx::PointF position; 851 gfx::PointF position;
975 gfx::Size bounds(100, 100); 852 gfx::Size bounds(100, 100);
976 SetLayerPropertiesForTesting(root.get(), 853 SetLayerPropertiesForTesting(root.get(), identity_matrix, transform_origin,
977 identity_matrix, 854 position, bounds, true, false, true);
978 transform_origin,
979 position,
980 bounds,
981 true,
982 false);
983 root->SetDrawsContent(true); 855 root->SetDrawsContent(true);
984 root->SetShouldFlattenTransform(false); 856 root->SetShouldFlattenTransform(false);
985 root->Set3dSortingContextId(1); 857 root->Set3dSortingContextId(1);
986 { 858 {
987 // child 1 and child2 are initialized to overlap between x=50 and x=60. 859 // child 1 and child2 are initialized to overlap between x=50 and x=60.
988 // grand_child is set to overlap both child1 and child2 between y=50 and 860 // grand_child is set to overlap both child1 and child2 between y=50 and
989 // y=60. The expected stacking order is: (front) child2, (second) 861 // y=60. The expected stacking order is: (front) child2, (second)
990 // grand_child, (third) child1, and (back) the root layer behind all other 862 // grand_child, (third) child1, and (back) the root layer behind all other
991 // layers. 863 // layers.
992 864
993 scoped_ptr<LayerImpl> child1 = 865 scoped_ptr<LayerImpl> child1 =
994 LayerImpl::Create(host_impl().active_tree(), 2); 866 LayerImpl::Create(host_impl().active_tree(), 2);
995 scoped_ptr<LayerImpl> child2 = 867 scoped_ptr<LayerImpl> child2 =
996 LayerImpl::Create(host_impl().active_tree(), 3); 868 LayerImpl::Create(host_impl().active_tree(), 3);
997 scoped_ptr<LayerImpl> grand_child1 = 869 scoped_ptr<LayerImpl> grand_child1 =
998 LayerImpl::Create(host_impl().active_tree(), 4); 870 LayerImpl::Create(host_impl().active_tree(), 4);
999 871
1000 position = gfx::PointF(10.f, 10.f); 872 position = gfx::PointF(10.f, 10.f);
1001 bounds = gfx::Size(50, 50); 873 bounds = gfx::Size(50, 50);
1002 SetLayerPropertiesForTesting(child1.get(), 874 SetLayerPropertiesForTesting(child1.get(), identity_matrix,
1003 identity_matrix, 875 transform_origin, position, bounds, true,
1004 transform_origin, 876 false, false);
1005 position,
1006 bounds,
1007 true,
1008 false);
1009 child1->SetDrawsContent(true); 877 child1->SetDrawsContent(true);
1010 child1->SetShouldFlattenTransform(false); 878 child1->SetShouldFlattenTransform(false);
1011 child1->Set3dSortingContextId(1); 879 child1->Set3dSortingContextId(1);
1012 880
1013 position = gfx::PointF(50.f, 10.f); 881 position = gfx::PointF(50.f, 10.f);
1014 bounds = gfx::Size(50, 50); 882 bounds = gfx::Size(50, 50);
1015 gfx::Transform translate_z; 883 gfx::Transform translate_z;
1016 translate_z.Translate3d(0, 0, -10.f); 884 translate_z.Translate3d(0, 0, -10.f);
1017 SetLayerPropertiesForTesting(child2.get(), 885 SetLayerPropertiesForTesting(child2.get(), translate_z, transform_origin,
1018 translate_z, 886 position, bounds, true, false, false);
1019 transform_origin,
1020 position,
1021 bounds,
1022 true,
1023 false);
1024 child2->SetDrawsContent(true); 887 child2->SetDrawsContent(true);
1025 child2->SetShouldFlattenTransform(false); 888 child2->SetShouldFlattenTransform(false);
1026 child2->Set3dSortingContextId(1); 889 child2->Set3dSortingContextId(1);
1027 890
1028 // Remember that grand_child is positioned with respect to its parent (i.e. 891 // Remember that grand_child is positioned with respect to its parent (i.e.
1029 // child1). In screen space, the intended position is (10, 50), with size 892 // child1). In screen space, the intended position is (10, 50), with size
1030 // 100 x 50. 893 // 100 x 50.
1031 position = gfx::PointF(0.f, 40.f); 894 position = gfx::PointF(0.f, 40.f);
1032 bounds = gfx::Size(100, 50); 895 bounds = gfx::Size(100, 50);
1033 SetLayerPropertiesForTesting(grand_child1.get(), 896 SetLayerPropertiesForTesting(grand_child1.get(), identity_matrix,
1034 identity_matrix, 897 transform_origin, position, bounds, true,
1035 transform_origin, 898 false, false);
1036 position,
1037 bounds,
1038 true,
1039 false);
1040 grand_child1->SetDrawsContent(true); 899 grand_child1->SetDrawsContent(true);
1041 grand_child1->SetShouldFlattenTransform(false); 900 grand_child1->SetShouldFlattenTransform(false);
1042 901
1043 child1->AddChild(grand_child1.Pass()); 902 child1->AddChild(grand_child1.Pass());
1044 root->AddChild(child1.Pass()); 903 root->AddChild(child1.Pass());
1045 root->AddChild(child2.Pass()); 904 root->AddChild(child2.Pass());
1046 } 905 }
1047 906
1048 LayerImpl* child1 = root->children()[0]; 907 LayerImpl* child1 = root->children()[0];
1049 LayerImpl* child2 = root->children()[1]; 908 LayerImpl* child2 = root->children()[1];
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
1115 ASSERT_TRUE(result_layer); 974 ASSERT_TRUE(result_layer);
1116 EXPECT_EQ(4, result_layer->id()); 975 EXPECT_EQ(4, result_layer->id());
1117 } 976 }
1118 977
1119 TEST_F(LayerTreeImplTest, HitTestingRespectsClipParents) { 978 TEST_F(LayerTreeImplTest, HitTestingRespectsClipParents) {
1120 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl().active_tree(), 1); 979 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl().active_tree(), 1);
1121 gfx::Transform identity_matrix; 980 gfx::Transform identity_matrix;
1122 gfx::Point3F transform_origin; 981 gfx::Point3F transform_origin;
1123 gfx::PointF position; 982 gfx::PointF position;
1124 gfx::Size bounds(100, 100); 983 gfx::Size bounds(100, 100);
1125 SetLayerPropertiesForTesting(root.get(), 984 SetLayerPropertiesForTesting(root.get(), identity_matrix, transform_origin,
1126 identity_matrix, 985 position, bounds, true, false, true);
1127 transform_origin,
1128 position,
1129 bounds,
1130 true,
1131 false);
1132 root->SetDrawsContent(true); 986 root->SetDrawsContent(true);
1133 { 987 {
1134 scoped_ptr<LayerImpl> child = 988 scoped_ptr<LayerImpl> child =
1135 LayerImpl::Create(host_impl().active_tree(), 2); 989 LayerImpl::Create(host_impl().active_tree(), 2);
1136 scoped_ptr<LayerImpl> grand_child = 990 scoped_ptr<LayerImpl> grand_child =
1137 LayerImpl::Create(host_impl().active_tree(), 4); 991 LayerImpl::Create(host_impl().active_tree(), 4);
1138 992
1139 position = gfx::PointF(10.f, 10.f); 993 position = gfx::PointF(10.f, 10.f);
1140 bounds = gfx::Size(1, 1); 994 bounds = gfx::Size(1, 1);
1141 SetLayerPropertiesForTesting(child.get(), 995 SetLayerPropertiesForTesting(child.get(), identity_matrix, transform_origin,
1142 identity_matrix, 996 position, bounds, true, false, false);
1143 transform_origin,
1144 position,
1145 bounds,
1146 true,
1147 false);
1148 child->SetDrawsContent(true); 997 child->SetDrawsContent(true);
1149 child->SetMasksToBounds(true); 998 child->SetMasksToBounds(true);
1150 999
1151 position = gfx::PointF(0.f, 40.f); 1000 position = gfx::PointF(0.f, 40.f);
1152 bounds = gfx::Size(100, 50); 1001 bounds = gfx::Size(100, 50);
1153 SetLayerPropertiesForTesting(grand_child.get(), 1002 SetLayerPropertiesForTesting(grand_child.get(), identity_matrix,
1154 identity_matrix, 1003 transform_origin, position, bounds, true,
1155 transform_origin, 1004 false, false);
1156 position,
1157 bounds,
1158 true,
1159 false);
1160 grand_child->SetDrawsContent(true); 1005 grand_child->SetDrawsContent(true);
1161 grand_child->SetForceRenderSurface(true); 1006 grand_child->SetHasRenderSurface(true);
1162 1007
1163 // This should let |grand_child| "escape" |child|'s clip. 1008 // This should let |grand_child| "escape" |child|'s clip.
1164 grand_child->SetClipParent(root.get()); 1009 grand_child->SetClipParent(root.get());
1165 1010
1166 child->AddChild(grand_child.Pass()); 1011 child->AddChild(grand_child.Pass());
1167 root->AddChild(child.Pass()); 1012 root->AddChild(child.Pass());
1168 } 1013 }
1169 1014
1170 host_impl().SetViewportSize(root->bounds()); 1015 host_impl().SetViewportSize(root->bounds());
1171 host_impl().active_tree()->SetRootLayer(root.Pass()); 1016 host_impl().active_tree()->SetRootLayer(root.Pass());
1172 host_impl().UpdateNumChildrenAndDrawPropertiesForActiveTree(); 1017 host_impl().UpdateNumChildrenAndDrawPropertiesForActiveTree();
1173 1018
1174 gfx::Point test_point = gfx::Point(12, 52); 1019 gfx::Point test_point = gfx::Point(12, 52);
1175 LayerImpl* result_layer = 1020 LayerImpl* result_layer =
1176 host_impl().active_tree()->FindLayerThatIsHitByPoint(test_point); 1021 host_impl().active_tree()->FindLayerThatIsHitByPoint(test_point);
1177 ASSERT_TRUE(result_layer); 1022 ASSERT_TRUE(result_layer);
1178 EXPECT_EQ(4, result_layer->id()); 1023 EXPECT_EQ(4, result_layer->id());
1179 } 1024 }
1180 1025
1181 TEST_F(LayerTreeImplTest, HitTestingRespectsScrollParents) { 1026 TEST_F(LayerTreeImplTest, HitTestingRespectsScrollParents) {
1182 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl().active_tree(), 1); 1027 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl().active_tree(), 1);
1183 gfx::Transform identity_matrix; 1028 gfx::Transform identity_matrix;
1184 gfx::Point3F transform_origin; 1029 gfx::Point3F transform_origin;
1185 gfx::PointF position; 1030 gfx::PointF position;
1186 gfx::Size bounds(100, 100); 1031 gfx::Size bounds(100, 100);
1187 SetLayerPropertiesForTesting(root.get(), 1032 SetLayerPropertiesForTesting(root.get(), identity_matrix, transform_origin,
1188 identity_matrix, 1033 position, bounds, true, false, true);
1189 transform_origin,
1190 position,
1191 bounds,
1192 true,
1193 false);
1194 root->SetDrawsContent(true); 1034 root->SetDrawsContent(true);
1195 { 1035 {
1196 scoped_ptr<LayerImpl> child = 1036 scoped_ptr<LayerImpl> child =
1197 LayerImpl::Create(host_impl().active_tree(), 2); 1037 LayerImpl::Create(host_impl().active_tree(), 2);
1198 scoped_ptr<LayerImpl> scroll_child = 1038 scoped_ptr<LayerImpl> scroll_child =
1199 LayerImpl::Create(host_impl().active_tree(), 3); 1039 LayerImpl::Create(host_impl().active_tree(), 3);
1200 scoped_ptr<LayerImpl> grand_child = 1040 scoped_ptr<LayerImpl> grand_child =
1201 LayerImpl::Create(host_impl().active_tree(), 4); 1041 LayerImpl::Create(host_impl().active_tree(), 4);
1202 1042
1203 position = gfx::PointF(10.f, 10.f); 1043 position = gfx::PointF(10.f, 10.f);
1204 bounds = gfx::Size(1, 1); 1044 bounds = gfx::Size(1, 1);
1205 SetLayerPropertiesForTesting(child.get(), 1045 SetLayerPropertiesForTesting(child.get(), identity_matrix, transform_origin,
1206 identity_matrix, 1046 position, bounds, true, false, false);
1207 transform_origin,
1208 position,
1209 bounds,
1210 true,
1211 false);
1212 child->SetDrawsContent(true); 1047 child->SetDrawsContent(true);
1213 child->SetMasksToBounds(true); 1048 child->SetMasksToBounds(true);
1214 1049
1215 position = gfx::PointF(); 1050 position = gfx::PointF();
1216 bounds = gfx::Size(200, 200); 1051 bounds = gfx::Size(200, 200);
1217 SetLayerPropertiesForTesting(scroll_child.get(), 1052 SetLayerPropertiesForTesting(scroll_child.get(), identity_matrix,
1218 identity_matrix, 1053 transform_origin, position, bounds, true,
1219 transform_origin, 1054 false, false);
1220 position,
1221 bounds,
1222 true,
1223 false);
1224 scroll_child->SetDrawsContent(true); 1055 scroll_child->SetDrawsContent(true);
1225 1056
1226 // This should cause scroll child and its descendants to be affected by 1057 // This should cause scroll child and its descendants to be affected by
1227 // |child|'s clip. 1058 // |child|'s clip.
1228 scroll_child->SetScrollParent(child.get()); 1059 scroll_child->SetScrollParent(child.get());
1229 1060
1230 SetLayerPropertiesForTesting(grand_child.get(), 1061 SetLayerPropertiesForTesting(grand_child.get(), identity_matrix,
1231 identity_matrix, 1062 transform_origin, position, bounds, true,
1232 transform_origin, 1063 false, false);
1233 position,
1234 bounds,
1235 true,
1236 false);
1237 grand_child->SetDrawsContent(true); 1064 grand_child->SetDrawsContent(true);
1238 grand_child->SetForceRenderSurface(true); 1065 grand_child->SetHasRenderSurface(true);
1239 1066
1240 scroll_child->AddChild(grand_child.Pass()); 1067 scroll_child->AddChild(grand_child.Pass());
1241 root->AddChild(scroll_child.Pass()); 1068 root->AddChild(scroll_child.Pass());
1242 root->AddChild(child.Pass()); 1069 root->AddChild(child.Pass());
1243 } 1070 }
1244 1071
1245 host_impl().SetViewportSize(root->bounds()); 1072 host_impl().SetViewportSize(root->bounds());
1246 host_impl().active_tree()->SetRootLayer(root.Pass()); 1073 host_impl().active_tree()->SetRootLayer(root.Pass());
1247 host_impl().UpdateNumChildrenAndDrawPropertiesForActiveTree(); 1074 host_impl().UpdateNumChildrenAndDrawPropertiesForActiveTree();
1248 1075
1249 gfx::Point test_point = gfx::Point(12, 52); 1076 gfx::Point test_point = gfx::Point(12, 52);
1250 LayerImpl* result_layer = 1077 LayerImpl* result_layer =
1251 host_impl().active_tree()->FindLayerThatIsHitByPoint(test_point); 1078 host_impl().active_tree()->FindLayerThatIsHitByPoint(test_point);
1252 // The |test_point| should have been clipped away by |child|, the scroll 1079 // The |test_point| should have been clipped away by |child|, the scroll
1253 // parent, so the only thing that should be hit is |root|. 1080 // parent, so the only thing that should be hit is |root|.
1254 ASSERT_TRUE(result_layer); 1081 ASSERT_TRUE(result_layer);
1255 ASSERT_EQ(1, result_layer->id()); 1082 ASSERT_EQ(1, result_layer->id());
1256 } 1083 }
1257 TEST_F(LayerTreeImplTest, HitTestingForMultipleLayerLists) { 1084 TEST_F(LayerTreeImplTest, HitTestingForMultipleLayerLists) {
1258 // 1085 //
1259 // The geometry is set up similarly to the previous case, but 1086 // The geometry is set up similarly to the previous case, but
1260 // all layers are forced to be render surfaces now. 1087 // all layers are forced to be render surfaces now.
1261 // 1088 //
1262 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl().active_tree(), 1); 1089 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl().active_tree(), 1);
1263 1090
1264 gfx::Transform identity_matrix; 1091 gfx::Transform identity_matrix;
1265 gfx::Point3F transform_origin; 1092 gfx::Point3F transform_origin;
1266 gfx::PointF position; 1093 gfx::PointF position;
1267 gfx::Size bounds(100, 100); 1094 gfx::Size bounds(100, 100);
1268 SetLayerPropertiesForTesting(root.get(), 1095 SetLayerPropertiesForTesting(root.get(), identity_matrix, transform_origin,
1269 identity_matrix, 1096 position, bounds, true, false, true);
1270 transform_origin,
1271 position,
1272 bounds,
1273 true,
1274 false);
1275 root->SetDrawsContent(true); 1097 root->SetDrawsContent(true);
1276 { 1098 {
1277 // child 1 and child2 are initialized to overlap between x=50 and x=60. 1099 // child 1 and child2 are initialized to overlap between x=50 and x=60.
1278 // grand_child is set to overlap both child1 and child2 between y=50 and 1100 // grand_child is set to overlap both child1 and child2 between y=50 and
1279 // y=60. The expected stacking order is: (front) child2, (second) 1101 // y=60. The expected stacking order is: (front) child2, (second)
1280 // grand_child, (third) child1, and (back) the root layer behind all other 1102 // grand_child, (third) child1, and (back) the root layer behind all other
1281 // layers. 1103 // layers.
1282 1104
1283 scoped_ptr<LayerImpl> child1 = 1105 scoped_ptr<LayerImpl> child1 =
1284 LayerImpl::Create(host_impl().active_tree(), 2); 1106 LayerImpl::Create(host_impl().active_tree(), 2);
1285 scoped_ptr<LayerImpl> child2 = 1107 scoped_ptr<LayerImpl> child2 =
1286 LayerImpl::Create(host_impl().active_tree(), 3); 1108 LayerImpl::Create(host_impl().active_tree(), 3);
1287 scoped_ptr<LayerImpl> grand_child1 = 1109 scoped_ptr<LayerImpl> grand_child1 =
1288 LayerImpl::Create(host_impl().active_tree(), 4); 1110 LayerImpl::Create(host_impl().active_tree(), 4);
1289 1111
1290 position = gfx::PointF(10.f, 10.f); 1112 position = gfx::PointF(10.f, 10.f);
1291 bounds = gfx::Size(50, 50); 1113 bounds = gfx::Size(50, 50);
1292 SetLayerPropertiesForTesting(child1.get(), 1114 SetLayerPropertiesForTesting(child1.get(), identity_matrix,
1293 identity_matrix, 1115 transform_origin, position, bounds, true,
1294 transform_origin, 1116 false, false);
1295 position,
1296 bounds,
1297 true,
1298 false);
1299 child1->SetDrawsContent(true); 1117 child1->SetDrawsContent(true);
1300 child1->SetForceRenderSurface(true); 1118 child1->SetHasRenderSurface(true);
1301 1119
1302 position = gfx::PointF(50.f, 10.f); 1120 position = gfx::PointF(50.f, 10.f);
1303 bounds = gfx::Size(50, 50); 1121 bounds = gfx::Size(50, 50);
1304 SetLayerPropertiesForTesting(child2.get(), 1122 SetLayerPropertiesForTesting(child2.get(), identity_matrix,
1305 identity_matrix, 1123 transform_origin, position, bounds, true,
1306 transform_origin, 1124 false, false);
1307 position,
1308 bounds,
1309 true,
1310 false);
1311 child2->SetDrawsContent(true); 1125 child2->SetDrawsContent(true);
1312 child2->SetForceRenderSurface(true); 1126 child2->SetHasRenderSurface(true);
1313 1127
1314 // Remember that grand_child is positioned with respect to its parent (i.e. 1128 // Remember that grand_child is positioned with respect to its parent (i.e.
1315 // child1). In screen space, the intended position is (10, 50), with size 1129 // child1). In screen space, the intended position is (10, 50), with size
1316 // 100 x 50. 1130 // 100 x 50.
1317 position = gfx::PointF(0.f, 40.f); 1131 position = gfx::PointF(0.f, 40.f);
1318 bounds = gfx::Size(100, 50); 1132 bounds = gfx::Size(100, 50);
1319 SetLayerPropertiesForTesting(grand_child1.get(), 1133 SetLayerPropertiesForTesting(grand_child1.get(), identity_matrix,
1320 identity_matrix, 1134 transform_origin, position, bounds, true,
1321 transform_origin, 1135 false, false);
1322 position,
1323 bounds,
1324 true,
1325 false);
1326 grand_child1->SetDrawsContent(true); 1136 grand_child1->SetDrawsContent(true);
1327 grand_child1->SetForceRenderSurface(true); 1137 grand_child1->SetHasRenderSurface(true);
1328 1138
1329 child1->AddChild(grand_child1.Pass()); 1139 child1->AddChild(grand_child1.Pass());
1330 root->AddChild(child1.Pass()); 1140 root->AddChild(child1.Pass());
1331 root->AddChild(child2.Pass()); 1141 root->AddChild(child2.Pass());
1332 } 1142 }
1333 1143
1334 LayerImpl* child1 = root->children()[0]; 1144 LayerImpl* child1 = root->children()[0];
1335 LayerImpl* child2 = root->children()[1]; 1145 LayerImpl* child2 = root->children()[1];
1336 LayerImpl* grand_child1 = child1->children()[0]; 1146 LayerImpl* grand_child1 = child1->children()[0];
1337 1147
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
1409 1219
1410 TEST_F(LayerTreeImplTest, HitCheckingTouchHandlerRegionsForSingleLayer) { 1220 TEST_F(LayerTreeImplTest, HitCheckingTouchHandlerRegionsForSingleLayer) {
1411 scoped_ptr<LayerImpl> root = 1221 scoped_ptr<LayerImpl> root =
1412 LayerImpl::Create(host_impl().active_tree(), 12345); 1222 LayerImpl::Create(host_impl().active_tree(), 12345);
1413 1223
1414 gfx::Transform identity_matrix; 1224 gfx::Transform identity_matrix;
1415 Region touch_handler_region(gfx::Rect(10, 10, 50, 50)); 1225 Region touch_handler_region(gfx::Rect(10, 10, 50, 50));
1416 gfx::Point3F transform_origin; 1226 gfx::Point3F transform_origin;
1417 gfx::PointF position; 1227 gfx::PointF position;
1418 gfx::Size bounds(100, 100); 1228 gfx::Size bounds(100, 100);
1419 SetLayerPropertiesForTesting(root.get(), 1229 SetLayerPropertiesForTesting(root.get(), identity_matrix, transform_origin,
1420 identity_matrix, 1230 position, bounds, true, false, true);
1421 transform_origin,
1422 position,
1423 bounds,
1424 true,
1425 false);
1426 root->SetDrawsContent(true); 1231 root->SetDrawsContent(true);
1427 1232
1428 host_impl().SetViewportSize(root->bounds()); 1233 host_impl().SetViewportSize(root->bounds());
1429 host_impl().active_tree()->SetRootLayer(root.Pass()); 1234 host_impl().active_tree()->SetRootLayer(root.Pass());
1430 host_impl().UpdateNumChildrenAndDrawPropertiesForActiveTree(); 1235 host_impl().UpdateNumChildrenAndDrawPropertiesForActiveTree();
1431 1236
1432 // Sanity check the scenario we just created. 1237 // Sanity check the scenario we just created.
1433 ASSERT_EQ(1u, RenderSurfaceLayerList().size()); 1238 ASSERT_EQ(1u, RenderSurfaceLayerList().size());
1434 ASSERT_EQ(1u, root_layer()->render_surface()->layer_list().size()); 1239 ASSERT_EQ(1u, root_layer()->render_surface()->layer_list().size());
1435 1240
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
1497 uninvertible_transform.matrix().set(1, 1, 0.0); 1302 uninvertible_transform.matrix().set(1, 1, 0.0);
1498 uninvertible_transform.matrix().set(2, 2, 0.0); 1303 uninvertible_transform.matrix().set(2, 2, 0.0);
1499 uninvertible_transform.matrix().set(3, 3, 0.0); 1304 uninvertible_transform.matrix().set(3, 3, 0.0);
1500 ASSERT_FALSE(uninvertible_transform.IsInvertible()); 1305 ASSERT_FALSE(uninvertible_transform.IsInvertible());
1501 1306
1502 gfx::Transform identity_matrix; 1307 gfx::Transform identity_matrix;
1503 Region touch_handler_region(gfx::Rect(10, 10, 50, 50)); 1308 Region touch_handler_region(gfx::Rect(10, 10, 50, 50));
1504 gfx::Point3F transform_origin; 1309 gfx::Point3F transform_origin;
1505 gfx::PointF position; 1310 gfx::PointF position;
1506 gfx::Size bounds(100, 100); 1311 gfx::Size bounds(100, 100);
1507 SetLayerPropertiesForTesting(root.get(), 1312 SetLayerPropertiesForTesting(root.get(), uninvertible_transform,
1508 uninvertible_transform, 1313 transform_origin, position, bounds, true, false,
1509 transform_origin, 1314 true);
1510 position,
1511 bounds,
1512 true,
1513 false);
1514 root->SetDrawsContent(true); 1315 root->SetDrawsContent(true);
1515 root->SetTouchEventHandlerRegion(touch_handler_region); 1316 root->SetTouchEventHandlerRegion(touch_handler_region);
1516 1317
1517 host_impl().SetViewportSize(root->bounds()); 1318 host_impl().SetViewportSize(root->bounds());
1518 host_impl().active_tree()->SetRootLayer(root.Pass()); 1319 host_impl().active_tree()->SetRootLayer(root.Pass());
1519 host_impl().UpdateNumChildrenAndDrawPropertiesForActiveTree(); 1320 host_impl().UpdateNumChildrenAndDrawPropertiesForActiveTree();
1520 1321
1521 // Sanity check the scenario we just created. 1322 // Sanity check the scenario we just created.
1522 ASSERT_EQ(1u, RenderSurfaceLayerList().size()); 1323 ASSERT_EQ(1u, RenderSurfaceLayerList().size());
1523 ASSERT_EQ(1u, root_layer()->render_surface()->layer_list().size()); 1324 ASSERT_EQ(1u, root_layer()->render_surface()->layer_list().size());
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
1575 scoped_ptr<LayerImpl> root = 1376 scoped_ptr<LayerImpl> root =
1576 LayerImpl::Create(host_impl().active_tree(), 12345); 1377 LayerImpl::Create(host_impl().active_tree(), 12345);
1577 1378
1578 gfx::Transform identity_matrix; 1379 gfx::Transform identity_matrix;
1579 Region touch_handler_region(gfx::Rect(10, 10, 50, 50)); 1380 Region touch_handler_region(gfx::Rect(10, 10, 50, 50));
1580 gfx::Point3F transform_origin; 1381 gfx::Point3F transform_origin;
1581 // this layer is positioned, and hit testing should correctly know where the 1382 // this layer is positioned, and hit testing should correctly know where the
1582 // layer is located. 1383 // layer is located.
1583 gfx::PointF position(50.f, 50.f); 1384 gfx::PointF position(50.f, 50.f);
1584 gfx::Size bounds(100, 100); 1385 gfx::Size bounds(100, 100);
1585 SetLayerPropertiesForTesting(root.get(), 1386 SetLayerPropertiesForTesting(root.get(), identity_matrix, transform_origin,
1586 identity_matrix, 1387 position, bounds, true, false, true);
1587 transform_origin,
1588 position,
1589 bounds,
1590 true,
1591 false);
1592 root->SetDrawsContent(true); 1388 root->SetDrawsContent(true);
1593 root->SetTouchEventHandlerRegion(touch_handler_region); 1389 root->SetTouchEventHandlerRegion(touch_handler_region);
1594 1390
1595 host_impl().SetViewportSize(root->bounds()); 1391 host_impl().SetViewportSize(root->bounds());
1596 host_impl().active_tree()->SetRootLayer(root.Pass()); 1392 host_impl().active_tree()->SetRootLayer(root.Pass());
1597 host_impl().UpdateNumChildrenAndDrawPropertiesForActiveTree(); 1393 host_impl().UpdateNumChildrenAndDrawPropertiesForActiveTree();
1598 1394
1599 // Sanity check the scenario we just created. 1395 // Sanity check the scenario we just created.
1600 ASSERT_EQ(1u, RenderSurfaceLayerList().size()); 1396 ASSERT_EQ(1u, RenderSurfaceLayerList().size());
1601 ASSERT_EQ(1u, root_layer()->render_surface()->layer_list().size()); 1397 ASSERT_EQ(1u, root_layer()->render_surface()->layer_list().size());
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1651 // 1447 //
1652 // To test this, the layer is positioned at (25, 25), and is size (50, 50). If 1448 // To test this, the layer is positioned at (25, 25), and is size (50, 50). If
1653 // contents scale is ignored, then hit checking will mis-interpret the visible 1449 // contents scale is ignored, then hit checking will mis-interpret the visible
1654 // content rect as being larger than the actual bounds of the layer. 1450 // content rect as being larger than the actual bounds of the layer.
1655 // 1451 //
1656 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl().active_tree(), 1); 1452 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl().active_tree(), 1);
1657 1453
1658 gfx::Transform identity_matrix; 1454 gfx::Transform identity_matrix;
1659 gfx::Point3F transform_origin; 1455 gfx::Point3F transform_origin;
1660 1456
1661 SetLayerPropertiesForTesting(root.get(), 1457 SetLayerPropertiesForTesting(root.get(), identity_matrix, transform_origin,
1662 identity_matrix, 1458 gfx::PointF(), gfx::Size(100, 100), true, false,
1663 transform_origin, 1459 true);
1664 gfx::PointF(),
1665 gfx::Size(100, 100),
1666 true,
1667 false);
1668 { 1460 {
1669 Region touch_handler_region(gfx::Rect(10, 10, 30, 30)); 1461 Region touch_handler_region(gfx::Rect(10, 10, 30, 30));
1670 gfx::PointF position(25.f, 25.f); 1462 gfx::PointF position(25.f, 25.f);
1671 gfx::Size bounds(50, 50); 1463 gfx::Size bounds(50, 50);
1672 scoped_ptr<LayerImpl> test_layer = 1464 scoped_ptr<LayerImpl> test_layer =
1673 LayerImpl::Create(host_impl().active_tree(), 12345); 1465 LayerImpl::Create(host_impl().active_tree(), 12345);
1674 SetLayerPropertiesForTesting(test_layer.get(), 1466 SetLayerPropertiesForTesting(test_layer.get(), identity_matrix,
1675 identity_matrix, 1467 transform_origin, position, bounds, true,
1676 transform_origin, 1468 false, false);
1677 position,
1678 bounds,
1679 true,
1680 false);
1681 1469
1682 // override content bounds and contents scale 1470 // override content bounds and contents scale
1683 test_layer->SetContentBounds(gfx::Size(100, 100)); 1471 test_layer->SetContentBounds(gfx::Size(100, 100));
1684 test_layer->SetContentsScale(2, 2); 1472 test_layer->SetContentsScale(2, 2);
1685 1473
1686 test_layer->SetDrawsContent(true); 1474 test_layer->SetDrawsContent(true);
1687 test_layer->SetTouchEventHandlerRegion(touch_handler_region); 1475 test_layer->SetTouchEventHandlerRegion(touch_handler_region);
1688 root->AddChild(test_layer.Pass()); 1476 root->AddChild(test_layer.Pass());
1689 } 1477 }
1690 1478
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
1755 TEST_F(LayerTreeImplTest, 1543 TEST_F(LayerTreeImplTest,
1756 HitCheckingTouchHandlerRegionsForSingleLayerWithDeviceScale) { 1544 HitCheckingTouchHandlerRegionsForSingleLayerWithDeviceScale) {
1757 // The layer's device_scale_factor and page_scale_factor should scale the 1545 // The layer's device_scale_factor and page_scale_factor should scale the
1758 // content rect and we should be able to hit the touch handler region by 1546 // content rect and we should be able to hit the touch handler region by
1759 // scaling the points accordingly. 1547 // scaling the points accordingly.
1760 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl().active_tree(), 1); 1548 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl().active_tree(), 1);
1761 1549
1762 gfx::Transform identity_matrix; 1550 gfx::Transform identity_matrix;
1763 gfx::Point3F transform_origin; 1551 gfx::Point3F transform_origin;
1764 // Set the bounds of the root layer big enough to fit the child when scaled. 1552 // Set the bounds of the root layer big enough to fit the child when scaled.
1765 SetLayerPropertiesForTesting(root.get(), 1553 SetLayerPropertiesForTesting(root.get(), identity_matrix, transform_origin,
1766 identity_matrix, 1554 gfx::PointF(), gfx::Size(100, 100), true, false,
1767 transform_origin, 1555 true);
1768 gfx::PointF(),
1769 gfx::Size(100, 100),
1770 true,
1771 false);
1772 { 1556 {
1773 Region touch_handler_region(gfx::Rect(10, 10, 30, 30)); 1557 Region touch_handler_region(gfx::Rect(10, 10, 30, 30));
1774 gfx::PointF position(25.f, 25.f); 1558 gfx::PointF position(25.f, 25.f);
1775 gfx::Size bounds(50, 50); 1559 gfx::Size bounds(50, 50);
1776 scoped_ptr<LayerImpl> test_layer = 1560 scoped_ptr<LayerImpl> test_layer =
1777 LayerImpl::Create(host_impl().active_tree(), 12345); 1561 LayerImpl::Create(host_impl().active_tree(), 12345);
1778 SetLayerPropertiesForTesting(test_layer.get(), 1562 SetLayerPropertiesForTesting(test_layer.get(), identity_matrix,
1779 identity_matrix, 1563 transform_origin, position, bounds, true,
1780 transform_origin, 1564 false, false);
1781 position,
1782 bounds,
1783 true,
1784 false);
1785 1565
1786 test_layer->SetDrawsContent(true); 1566 test_layer->SetDrawsContent(true);
1787 test_layer->SetTouchEventHandlerRegion(touch_handler_region); 1567 test_layer->SetTouchEventHandlerRegion(touch_handler_region);
1788 root->AddChild(test_layer.Pass()); 1568 root->AddChild(test_layer.Pass());
1789 } 1569 }
1790 1570
1791 float device_scale_factor = 3.f; 1571 float device_scale_factor = 3.f;
1792 float page_scale_factor = 5.f; 1572 float page_scale_factor = 5.f;
1793 gfx::Size scaled_bounds_for_root = gfx::ToCeiledSize( 1573 gfx::Size scaled_bounds_for_root = gfx::ToCeiledSize(
1794 gfx::ScaleSize(root->bounds(), device_scale_factor * page_scale_factor)); 1574 gfx::ScaleSize(root->bounds(), device_scale_factor * page_scale_factor));
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
1881 } 1661 }
1882 1662
1883 TEST_F(LayerTreeImplTest, HitCheckingTouchHandlerRegionsForSimpleClippedLayer) { 1663 TEST_F(LayerTreeImplTest, HitCheckingTouchHandlerRegionsForSimpleClippedLayer) {
1884 // Test that hit-checking will only work for the visible portion of a layer, 1664 // Test that hit-checking will only work for the visible portion of a layer,
1885 // and not the entire layer bounds. Here we just test the simple axis-aligned 1665 // and not the entire layer bounds. Here we just test the simple axis-aligned
1886 // case. 1666 // case.
1887 gfx::Transform identity_matrix; 1667 gfx::Transform identity_matrix;
1888 gfx::Point3F transform_origin; 1668 gfx::Point3F transform_origin;
1889 1669
1890 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl().active_tree(), 1); 1670 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl().active_tree(), 1);
1891 SetLayerPropertiesForTesting(root.get(), 1671 SetLayerPropertiesForTesting(root.get(), identity_matrix, transform_origin,
1892 identity_matrix, 1672 gfx::PointF(), gfx::Size(100, 100), true, false,
1893 transform_origin, 1673 true);
1894 gfx::PointF(),
1895 gfx::Size(100, 100),
1896 true,
1897 false);
1898 { 1674 {
1899 scoped_ptr<LayerImpl> clipping_layer = 1675 scoped_ptr<LayerImpl> clipping_layer =
1900 LayerImpl::Create(host_impl().active_tree(), 123); 1676 LayerImpl::Create(host_impl().active_tree(), 123);
1901 // this layer is positioned, and hit testing should correctly know where the 1677 // this layer is positioned, and hit testing should correctly know where the
1902 // layer is located. 1678 // layer is located.
1903 gfx::PointF position(25.f, 25.f); 1679 gfx::PointF position(25.f, 25.f);
1904 gfx::Size bounds(50, 50); 1680 gfx::Size bounds(50, 50);
1905 SetLayerPropertiesForTesting(clipping_layer.get(), 1681 SetLayerPropertiesForTesting(clipping_layer.get(), identity_matrix,
1906 identity_matrix, 1682 transform_origin, position, bounds, true,
1907 transform_origin, 1683 false, false);
1908 position,
1909 bounds,
1910 true,
1911 false);
1912 clipping_layer->SetMasksToBounds(true); 1684 clipping_layer->SetMasksToBounds(true);
1913 1685
1914 scoped_ptr<LayerImpl> child = 1686 scoped_ptr<LayerImpl> child =
1915 LayerImpl::Create(host_impl().active_tree(), 456); 1687 LayerImpl::Create(host_impl().active_tree(), 456);
1916 Region touch_handler_region(gfx::Rect(10, 10, 50, 50)); 1688 Region touch_handler_region(gfx::Rect(10, 10, 50, 50));
1917 position = gfx::PointF(-50.f, -50.f); 1689 position = gfx::PointF(-50.f, -50.f);
1918 bounds = gfx::Size(300, 300); 1690 bounds = gfx::Size(300, 300);
1919 SetLayerPropertiesForTesting(child.get(), 1691 SetLayerPropertiesForTesting(child.get(), identity_matrix, transform_origin,
1920 identity_matrix, 1692 position, bounds, true, false, false);
1921 transform_origin,
1922 position,
1923 bounds,
1924 true,
1925 false);
1926 child->SetDrawsContent(true); 1693 child->SetDrawsContent(true);
1927 child->SetTouchEventHandlerRegion(touch_handler_region); 1694 child->SetTouchEventHandlerRegion(touch_handler_region);
1928 clipping_layer->AddChild(child.Pass()); 1695 clipping_layer->AddChild(child.Pass());
1929 root->AddChild(clipping_layer.Pass()); 1696 root->AddChild(clipping_layer.Pass());
1930 } 1697 }
1931 1698
1932 host_impl().SetViewportSize(root->bounds()); 1699 host_impl().SetViewportSize(root->bounds());
1933 host_impl().active_tree()->SetRootLayer(root.Pass()); 1700 host_impl().active_tree()->SetRootLayer(root.Pass());
1934 host_impl().UpdateNumChildrenAndDrawPropertiesForActiveTree(); 1701 host_impl().UpdateNumChildrenAndDrawPropertiesForActiveTree();
1935 1702
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1976 test_point); 1743 test_point);
1977 ASSERT_TRUE(result_layer); 1744 ASSERT_TRUE(result_layer);
1978 EXPECT_EQ(456, result_layer->id()); 1745 EXPECT_EQ(456, result_layer->id());
1979 } 1746 }
1980 1747
1981 TEST_F(LayerTreeImplTest, HitCheckingTouchHandlerOverlappingRegions) { 1748 TEST_F(LayerTreeImplTest, HitCheckingTouchHandlerOverlappingRegions) {
1982 gfx::Transform identity_matrix; 1749 gfx::Transform identity_matrix;
1983 gfx::Point3F transform_origin; 1750 gfx::Point3F transform_origin;
1984 1751
1985 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl().active_tree(), 1); 1752 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl().active_tree(), 1);
1986 SetLayerPropertiesForTesting(root.get(), 1753 SetLayerPropertiesForTesting(root.get(), identity_matrix, transform_origin,
1987 identity_matrix, 1754 gfx::PointF(), gfx::Size(100, 100), true, false,
1988 transform_origin, 1755 true);
1989 gfx::PointF(),
1990 gfx::Size(100, 100),
1991 true,
1992 false);
1993 { 1756 {
1994 scoped_ptr<LayerImpl> touch_layer = 1757 scoped_ptr<LayerImpl> touch_layer =
1995 LayerImpl::Create(host_impl().active_tree(), 123); 1758 LayerImpl::Create(host_impl().active_tree(), 123);
1996 // this layer is positioned, and hit testing should correctly know where the 1759 // this layer is positioned, and hit testing should correctly know where the
1997 // layer is located. 1760 // layer is located.
1998 gfx::PointF position; 1761 gfx::PointF position;
1999 gfx::Size bounds(50, 50); 1762 gfx::Size bounds(50, 50);
2000 SetLayerPropertiesForTesting(touch_layer.get(), 1763 SetLayerPropertiesForTesting(touch_layer.get(), identity_matrix,
2001 identity_matrix, 1764 transform_origin, position, bounds, true,
2002 transform_origin, 1765 false, false);
2003 position,
2004 bounds,
2005 true,
2006 false);
2007 touch_layer->SetDrawsContent(true); 1766 touch_layer->SetDrawsContent(true);
2008 touch_layer->SetTouchEventHandlerRegion(gfx::Rect(0, 0, 50, 50)); 1767 touch_layer->SetTouchEventHandlerRegion(gfx::Rect(0, 0, 50, 50));
2009 root->AddChild(touch_layer.Pass()); 1768 root->AddChild(touch_layer.Pass());
2010 } 1769 }
2011 1770
2012 { 1771 {
2013 scoped_ptr<LayerImpl> notouch_layer = 1772 scoped_ptr<LayerImpl> notouch_layer =
2014 LayerImpl::Create(host_impl().active_tree(), 1234); 1773 LayerImpl::Create(host_impl().active_tree(), 1234);
2015 // this layer is positioned, and hit testing should correctly know where the 1774 // this layer is positioned, and hit testing should correctly know where the
2016 // layer is located. 1775 // layer is located.
2017 gfx::PointF position(0, 25); 1776 gfx::PointF position(0, 25);
2018 gfx::Size bounds(50, 50); 1777 gfx::Size bounds(50, 50);
2019 SetLayerPropertiesForTesting(notouch_layer.get(), 1778 SetLayerPropertiesForTesting(notouch_layer.get(), identity_matrix,
2020 identity_matrix, 1779 transform_origin, position, bounds, true,
2021 transform_origin, 1780 false, false);
2022 position,
2023 bounds,
2024 true,
2025 false);
2026 notouch_layer->SetDrawsContent(true); 1781 notouch_layer->SetDrawsContent(true);
2027 root->AddChild(notouch_layer.Pass()); 1782 root->AddChild(notouch_layer.Pass());
2028 } 1783 }
2029 1784
2030 host_impl().SetViewportSize(root->bounds()); 1785 host_impl().SetViewportSize(root->bounds());
2031 host_impl().active_tree()->SetRootLayer(root.Pass()); 1786 host_impl().active_tree()->SetRootLayer(root.Pass());
2032 host_impl().UpdateNumChildrenAndDrawPropertiesForActiveTree(); 1787 host_impl().UpdateNumChildrenAndDrawPropertiesForActiveTree();
2033 1788
2034 // Sanity check the scenario we just created. 1789 // Sanity check the scenario we just created.
2035 ASSERT_EQ(1u, RenderSurfaceLayerList().size()); 1790 ASSERT_EQ(1u, RenderSurfaceLayerList().size());
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
2073 1828
2074 TEST_F(LayerTreeImplTest, SelectionBoundsForSingleLayer) { 1829 TEST_F(LayerTreeImplTest, SelectionBoundsForSingleLayer) {
2075 int root_layer_id = 12345; 1830 int root_layer_id = 12345;
2076 scoped_ptr<LayerImpl> root = 1831 scoped_ptr<LayerImpl> root =
2077 LayerImpl::Create(host_impl().active_tree(), root_layer_id); 1832 LayerImpl::Create(host_impl().active_tree(), root_layer_id);
2078 1833
2079 gfx::Transform identity_matrix; 1834 gfx::Transform identity_matrix;
2080 gfx::Point3F transform_origin; 1835 gfx::Point3F transform_origin;
2081 gfx::PointF position; 1836 gfx::PointF position;
2082 gfx::Size bounds(100, 100); 1837 gfx::Size bounds(100, 100);
2083 SetLayerPropertiesForTesting(root.get(), 1838 SetLayerPropertiesForTesting(root.get(), identity_matrix, transform_origin,
2084 identity_matrix, 1839 position, bounds, true, false, true);
2085 transform_origin,
2086 position,
2087 bounds,
2088 true,
2089 false);
2090 root->SetDrawsContent(true); 1840 root->SetDrawsContent(true);
2091 1841
2092 host_impl().SetViewportSize(root->bounds()); 1842 host_impl().SetViewportSize(root->bounds());
2093 host_impl().active_tree()->SetRootLayer(root.Pass()); 1843 host_impl().active_tree()->SetRootLayer(root.Pass());
2094 host_impl().UpdateNumChildrenAndDrawPropertiesForActiveTree(); 1844 host_impl().UpdateNumChildrenAndDrawPropertiesForActiveTree();
2095 1845
2096 // Sanity check the scenario we just created. 1846 // Sanity check the scenario we just created.
2097 ASSERT_EQ(1u, RenderSurfaceLayerList().size()); 1847 ASSERT_EQ(1u, RenderSurfaceLayerList().size());
2098 ASSERT_EQ(1u, root_layer()->render_surface()->layer_list().size()); 1848 ASSERT_EQ(1u, root_layer()->render_surface()->layer_list().size());
2099 1849
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
2149 int clip_layer_id = 1234; 1899 int clip_layer_id = 1234;
2150 int clipped_layer_id = 123; 1900 int clipped_layer_id = 123;
2151 scoped_ptr<LayerImpl> root = 1901 scoped_ptr<LayerImpl> root =
2152 LayerImpl::Create(host_impl().active_tree(), root_layer_id); 1902 LayerImpl::Create(host_impl().active_tree(), root_layer_id);
2153 root->SetDrawsContent(true); 1903 root->SetDrawsContent(true);
2154 1904
2155 gfx::Transform identity_matrix; 1905 gfx::Transform identity_matrix;
2156 gfx::Point3F transform_origin; 1906 gfx::Point3F transform_origin;
2157 gfx::PointF position; 1907 gfx::PointF position;
2158 gfx::Size bounds(100, 100); 1908 gfx::Size bounds(100, 100);
2159 SetLayerPropertiesForTesting(root.get(), 1909 SetLayerPropertiesForTesting(root.get(), identity_matrix, transform_origin,
2160 identity_matrix, 1910 position, bounds, true, false, true);
2161 transform_origin,
2162 position,
2163 bounds,
2164 true,
2165 false);
2166 1911
2167 gfx::Vector2dF clipping_offset(10, 10); 1912 gfx::Vector2dF clipping_offset(10, 10);
2168 { 1913 {
2169 scoped_ptr<LayerImpl> clipping_layer = 1914 scoped_ptr<LayerImpl> clipping_layer =
2170 LayerImpl::Create(host_impl().active_tree(), clip_layer_id); 1915 LayerImpl::Create(host_impl().active_tree(), clip_layer_id);
2171 // The clipping layer should occlude the right selection bound. 1916 // The clipping layer should occlude the right selection bound.
2172 gfx::PointF position = gfx::PointF() + clipping_offset; 1917 gfx::PointF position = gfx::PointF() + clipping_offset;
2173 gfx::Size bounds(50, 50); 1918 gfx::Size bounds(50, 50);
2174 SetLayerPropertiesForTesting(clipping_layer.get(), 1919 SetLayerPropertiesForTesting(clipping_layer.get(), identity_matrix,
2175 identity_matrix, 1920 transform_origin, position, bounds, true,
2176 transform_origin, 1921 false, false);
2177 position,
2178 bounds,
2179 true,
2180 false);
2181 clipping_layer->SetMasksToBounds(true); 1922 clipping_layer->SetMasksToBounds(true);
2182 1923
2183 scoped_ptr<LayerImpl> clipped_layer = 1924 scoped_ptr<LayerImpl> clipped_layer =
2184 LayerImpl::Create(host_impl().active_tree(), clipped_layer_id); 1925 LayerImpl::Create(host_impl().active_tree(), clipped_layer_id);
2185 position = gfx::PointF(); 1926 position = gfx::PointF();
2186 bounds = gfx::Size(100, 100); 1927 bounds = gfx::Size(100, 100);
2187 SetLayerPropertiesForTesting(clipped_layer.get(), 1928 SetLayerPropertiesForTesting(clipped_layer.get(), identity_matrix,
2188 identity_matrix, 1929 transform_origin, position, bounds, true,
2189 transform_origin, 1930 false, false);
2190 position,
2191 bounds,
2192 true,
2193 false);
2194 clipped_layer->SetDrawsContent(true); 1931 clipped_layer->SetDrawsContent(true);
2195 clipping_layer->AddChild(clipped_layer.Pass()); 1932 clipping_layer->AddChild(clipped_layer.Pass());
2196 root->AddChild(clipping_layer.Pass()); 1933 root->AddChild(clipping_layer.Pass());
2197 } 1934 }
2198 1935
2199 host_impl().SetViewportSize(root->bounds()); 1936 host_impl().SetViewportSize(root->bounds());
2200 host_impl().active_tree()->SetRootLayer(root.Pass()); 1937 host_impl().active_tree()->SetRootLayer(root.Pass());
2201 host_impl().UpdateNumChildrenAndDrawPropertiesForActiveTree(); 1938 host_impl().UpdateNumChildrenAndDrawPropertiesForActiveTree();
2202 1939
2203 // Sanity check the scenario we just created. 1940 // Sanity check the scenario we just created.
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
2261 int root_layer_id = 1; 1998 int root_layer_id = 1;
2262 int sub_layer_id = 2; 1999 int sub_layer_id = 2;
2263 scoped_ptr<LayerImpl> root = 2000 scoped_ptr<LayerImpl> root =
2264 LayerImpl::Create(host_impl().active_tree(), root_layer_id); 2001 LayerImpl::Create(host_impl().active_tree(), root_layer_id);
2265 root->SetDrawsContent(true); 2002 root->SetDrawsContent(true);
2266 2003
2267 gfx::Transform identity_matrix; 2004 gfx::Transform identity_matrix;
2268 gfx::Point3F transform_origin; 2005 gfx::Point3F transform_origin;
2269 gfx::PointF position; 2006 gfx::PointF position;
2270 gfx::Size bounds(100, 100); 2007 gfx::Size bounds(100, 100);
2271 SetLayerPropertiesForTesting(root.get(), 2008 SetLayerPropertiesForTesting(root.get(), identity_matrix, transform_origin,
2272 identity_matrix, 2009 position, bounds, true, false, true);
2273 transform_origin,
2274 position,
2275 bounds,
2276 true,
2277 false);
2278 2010
2279 gfx::Vector2dF sub_layer_offset(10, 0); 2011 gfx::Vector2dF sub_layer_offset(10, 0);
2280 { 2012 {
2281 scoped_ptr<LayerImpl> sub_layer = 2013 scoped_ptr<LayerImpl> sub_layer =
2282 LayerImpl::Create(host_impl().active_tree(), sub_layer_id); 2014 LayerImpl::Create(host_impl().active_tree(), sub_layer_id);
2283 gfx::PointF position = gfx::PointF() + sub_layer_offset; 2015 gfx::PointF position = gfx::PointF() + sub_layer_offset;
2284 gfx::Size bounds(50, 50); 2016 gfx::Size bounds(50, 50);
2285 SetLayerPropertiesForTesting(sub_layer.get(), 2017 SetLayerPropertiesForTesting(sub_layer.get(), identity_matrix,
2286 identity_matrix, 2018 transform_origin, position, bounds, true,
2287 transform_origin, 2019 false, false);
2288 position,
2289 bounds,
2290 true,
2291 false);
2292 sub_layer->SetDrawsContent(true); 2020 sub_layer->SetDrawsContent(true);
2293 root->AddChild(sub_layer.Pass()); 2021 root->AddChild(sub_layer.Pass());
2294 } 2022 }
2295 2023
2296 float device_scale_factor = 3.f; 2024 float device_scale_factor = 3.f;
2297 float page_scale_factor = 5.f; 2025 float page_scale_factor = 5.f;
2298 gfx::Size scaled_bounds_for_root = gfx::ToCeiledSize( 2026 gfx::Size scaled_bounds_for_root = gfx::ToCeiledSize(
2299 gfx::ScaleSize(root->bounds(), device_scale_factor * page_scale_factor)); 2027 gfx::ScaleSize(root->bounds(), device_scale_factor * page_scale_factor));
2300 host_impl().SetViewportSize(scaled_bounds_for_root); 2028 host_impl().SetViewportSize(scaled_bounds_for_root);
2301 2029
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
2360 EXPECT_EQ(0u, host_impl().active_tree()->NumLayers()); 2088 EXPECT_EQ(0u, host_impl().active_tree()->NumLayers());
2361 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl().active_tree(), 1); 2089 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl().active_tree(), 1);
2362 root->AddChild(LayerImpl::Create(host_impl().active_tree(), 2)); 2090 root->AddChild(LayerImpl::Create(host_impl().active_tree(), 2));
2363 root->AddChild(LayerImpl::Create(host_impl().active_tree(), 3)); 2091 root->AddChild(LayerImpl::Create(host_impl().active_tree(), 3));
2364 root->child_at(1)->AddChild(LayerImpl::Create(host_impl().active_tree(), 4)); 2092 root->child_at(1)->AddChild(LayerImpl::Create(host_impl().active_tree(), 4));
2365 EXPECT_EQ(4u, host_impl().active_tree()->NumLayers()); 2093 EXPECT_EQ(4u, host_impl().active_tree()->NumLayers());
2366 } 2094 }
2367 2095
2368 } // namespace 2096 } // namespace
2369 } // namespace cc 2097 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_unittest_scroll.cc ('k') | cc/trees/occlusion_tracker_perftest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698