OLD | NEW |
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/trees/damage_tracker.h" | 5 #include "cc/trees/damage_tracker.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
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 558 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
569 ClearDamageForAllSurfaces(root); | 569 ClearDamageForAllSurfaces(root); |
570 child->test_properties()->force_render_surface = true; | 570 child->test_properties()->force_render_surface = true; |
571 root->layer_tree_impl()->property_trees()->needs_rebuild = true; | 571 root->layer_tree_impl()->property_trees()->needs_rebuild = true; |
572 EmulateDrawingOneFrame(root); | 572 EmulateDrawingOneFrame(root); |
573 child->OnFilterAnimated(filters); | 573 child->OnFilterAnimated(filters); |
574 EmulateDrawingOneFrame(root); | 574 EmulateDrawingOneFrame(root); |
575 root_damage_rect = | 575 root_damage_rect = |
576 root->render_surface()->damage_tracker()->current_damage_rect(); | 576 root->render_surface()->damage_tracker()->current_damage_rect(); |
577 child_damage_rect = | 577 child_damage_rect = |
578 child->render_surface()->damage_tracker()->current_damage_rect(); | 578 child->render_surface()->damage_tracker()->current_damage_rect(); |
579 EXPECT_EQ(gfx::Rect(100, 100, 30, 30).ToString(), | 579 EXPECT_EQ(gfx::Rect(100 - outset_left, 100 - outset_top, |
580 root_damage_rect.ToString()); | 580 30 + outset_left + outset_right, |
| 581 30 + outset_top + outset_bottom), |
| 582 root_damage_rect); |
581 EXPECT_EQ( | 583 EXPECT_EQ( |
582 gfx::Rect(-outset_left, -outset_top, 30 + (outset_left + outset_right), | 584 gfx::Rect(-outset_left, -outset_top, 30 + (outset_left + outset_right), |
583 30 + (outset_top + outset_bottom)) | 585 30 + (outset_top + outset_bottom)), |
584 .ToString(), | 586 child_damage_rect); |
585 child_damage_rect.ToString()); | |
586 | 587 |
587 // CASE 1: Setting the update rect should damage the whole surface (for now) | 588 // CASE 1: Setting the update rect should damage the whole surface (for now) |
588 ClearDamageForAllSurfaces(root); | 589 ClearDamageForAllSurfaces(root); |
589 child->SetUpdateRect(gfx::Rect(1, 1)); | 590 child->SetUpdateRect(gfx::Rect(1, 1)); |
590 root->layer_tree_impl()->property_trees()->needs_rebuild = true; | 591 root->layer_tree_impl()->property_trees()->needs_rebuild = true; |
591 EmulateDrawingOneFrame(root); | 592 EmulateDrawingOneFrame(root); |
592 | 593 |
593 root_damage_rect = | 594 root_damage_rect = |
594 root->render_surface()->damage_tracker()->current_damage_rect(); | 595 root->render_surface()->damage_tracker()->current_damage_rect(); |
595 child_damage_rect = | 596 child_damage_rect = |
596 child->render_surface()->damage_tracker()->current_damage_rect(); | 597 child->render_surface()->damage_tracker()->current_damage_rect(); |
597 | 598 |
598 int expect_width = 1 + outset_left + outset_right; | 599 int expect_width = 1 + outset_left + outset_right; |
599 int expect_height = 1 + outset_top + outset_bottom; | 600 int expect_height = 1 + outset_top + outset_bottom; |
600 EXPECT_EQ(gfx::Rect(100 - outset_left, 100 - outset_top, expect_width, | 601 EXPECT_EQ(gfx::Rect(100 - outset_left, 100 - outset_top, expect_width, |
601 expect_height) | 602 expect_height), |
602 .ToString(), | 603 root_damage_rect); |
603 root_damage_rect.ToString()); | 604 EXPECT_EQ(gfx::Rect(-outset_left, -outset_top, expect_width, expect_height), |
604 EXPECT_EQ(gfx::Rect(-outset_left, -outset_top, expect_width, expect_height) | 605 child_damage_rect); |
605 .ToString(), | 606 } |
606 child_damage_rect.ToString()); | 607 |
| 608 TEST_F(DamageTrackerTest, VerifyDamageForTransformedImageFilter) { |
| 609 LayerImpl* root = CreateAndSetUpTestTreeWithOneSurface(); |
| 610 LayerImpl* child = root->children()[0]; |
| 611 gfx::Rect root_damage_rect, child_damage_rect; |
| 612 |
| 613 // Allow us to set damage on child too. |
| 614 child->SetDrawsContent(true); |
| 615 |
| 616 FilterOperations filters; |
| 617 filters.Append(FilterOperation::CreateReferenceFilter( |
| 618 SkBlurImageFilter::Make(2, 2, nullptr))); |
| 619 int outset_top, outset_right, outset_bottom, outset_left; |
| 620 filters.GetOutsets(&outset_top, &outset_right, &outset_bottom, &outset_left); |
| 621 |
| 622 // Setting the filter will damage the whole surface. |
| 623 gfx::Transform transform; |
| 624 transform.RotateAboutYAxis(60); |
| 625 ClearDamageForAllSurfaces(root); |
| 626 child->test_properties()->force_render_surface = true; |
| 627 child->SetTransform(transform); |
| 628 root->layer_tree_impl()->property_trees()->needs_rebuild = true; |
| 629 EmulateDrawingOneFrame(root); |
| 630 child->OnFilterAnimated(filters); |
| 631 EmulateDrawingOneFrame(root); |
| 632 root_damage_rect = |
| 633 root->render_surface()->damage_tracker()->current_damage_rect(); |
| 634 child_damage_rect = |
| 635 child->render_surface()->damage_tracker()->current_damage_rect(); |
| 636 int rotated_outset_left = outset_left / 2; |
| 637 int expected_rotated_width = (30 + outset_left + outset_right) / 2; |
| 638 gfx::Rect expected_root_damage(100 - rotated_outset_left, 100 - outset_top, |
| 639 expected_rotated_width, |
| 640 30 + outset_top + outset_bottom); |
| 641 expected_root_damage.Union(gfx::Rect(100, 100, 30, 30)); |
| 642 EXPECT_EQ(expected_root_damage, root_damage_rect); |
| 643 EXPECT_EQ( |
| 644 gfx::Rect(-outset_left, -outset_top, 30 + (outset_left + outset_right), |
| 645 30 + (outset_top + outset_bottom)), |
| 646 child_damage_rect); |
| 647 |
| 648 // Setting the update rect should damage the whole surface (for now) |
| 649 ClearDamageForAllSurfaces(root); |
| 650 child->SetUpdateRect(gfx::Rect(30, 30)); |
| 651 root->layer_tree_impl()->property_trees()->needs_rebuild = true; |
| 652 EmulateDrawingOneFrame(root); |
| 653 |
| 654 root_damage_rect = |
| 655 root->render_surface()->damage_tracker()->current_damage_rect(); |
| 656 child_damage_rect = |
| 657 child->render_surface()->damage_tracker()->current_damage_rect(); |
| 658 |
| 659 int expect_width = 30 + outset_left + outset_right; |
| 660 int expect_height = 30 + outset_top + outset_bottom; |
| 661 EXPECT_EQ(gfx::Rect(100 - outset_left / 2, 100 - outset_top, expect_width / 2, |
| 662 expect_height), |
| 663 root_damage_rect); |
| 664 EXPECT_EQ(gfx::Rect(-outset_left, -outset_top, expect_width, expect_height), |
| 665 child_damage_rect); |
607 } | 666 } |
608 | 667 |
609 TEST_F(DamageTrackerTest, VerifyDamageForBackgroundBlurredChild) { | 668 TEST_F(DamageTrackerTest, VerifyDamageForBackgroundBlurredChild) { |
610 LayerImpl* root = CreateAndSetUpTestTreeWithTwoSurfaces(); | 669 LayerImpl* root = CreateAndSetUpTestTreeWithTwoSurfaces(); |
611 LayerImpl* child1 = root->children()[0]; | 670 LayerImpl* child1 = root->children()[0]; |
612 LayerImpl* child2 = root->children()[1]; | 671 LayerImpl* child2 = root->children()[1]; |
613 | 672 |
614 // Allow us to set damage on child1 too. | 673 // Allow us to set damage on child1 too. |
615 child1->SetDrawsContent(true); | 674 child1->SetDrawsContent(true); |
616 | 675 |
(...skipping 935 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1552 gfx::Rect root_damage_rect = | 1611 gfx::Rect root_damage_rect = |
1553 root->render_surface()->damage_tracker()->current_damage_rect(); | 1612 root->render_surface()->damage_tracker()->current_damage_rect(); |
1554 gfx::Rect damage_we_care_about = gfx::Rect(i, i); | 1613 gfx::Rect damage_we_care_about = gfx::Rect(i, i); |
1555 EXPECT_LE(damage_we_care_about.right(), root_damage_rect.right()); | 1614 EXPECT_LE(damage_we_care_about.right(), root_damage_rect.right()); |
1556 EXPECT_LE(damage_we_care_about.bottom(), root_damage_rect.bottom()); | 1615 EXPECT_LE(damage_we_care_about.bottom(), root_damage_rect.bottom()); |
1557 } | 1616 } |
1558 } | 1617 } |
1559 | 1618 |
1560 } // namespace | 1619 } // namespace |
1561 } // namespace cc | 1620 } // namespace cc |
OLD | NEW |