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 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
60 // Iterate back-to-front, so that damage correctly propagates from descendant | 60 // Iterate back-to-front, so that damage correctly propagates from descendant |
61 // surfaces to ancestors. | 61 // surfaces to ancestors. |
62 size_t render_surface_layer_list_size = render_surface_layer_list.size(); | 62 size_t render_surface_layer_list_size = render_surface_layer_list.size(); |
63 for (size_t i = 0; i < render_surface_layer_list_size; ++i) { | 63 for (size_t i = 0; i < render_surface_layer_list_size; ++i) { |
64 size_t index = render_surface_layer_list_size - 1 - i; | 64 size_t index = render_surface_layer_list_size - 1 - i; |
65 RenderSurfaceImpl* target_surface = | 65 RenderSurfaceImpl* target_surface = |
66 render_surface_layer_list[index]->render_surface(); | 66 render_surface_layer_list[index]->render_surface(); |
67 target_surface->damage_tracker()->UpdateDamageTrackingState( | 67 target_surface->damage_tracker()->UpdateDamageTrackingState( |
68 target_surface->layer_list(), target_surface, | 68 target_surface->layer_list(), target_surface, |
69 target_surface->SurfacePropertyChangedOnlyFromDescendant(), | 69 target_surface->SurfacePropertyChangedOnlyFromDescendant(), |
70 target_surface->content_rect(), | 70 target_surface->content_rect(), target_surface->MaskLayer(), |
71 render_surface_layer_list[index]->render_surface()->MaskLayer(), | 71 target_surface->Filters()); |
72 render_surface_layer_list[index]->filters()); | |
73 } | 72 } |
74 | 73 |
75 root->layer_tree_impl()->ResetAllChangeTracking(); | 74 root->layer_tree_impl()->ResetAllChangeTracking(); |
76 } | 75 } |
77 | 76 |
78 class DamageTrackerTest : public testing::Test { | 77 class DamageTrackerTest : public testing::Test { |
79 public: | 78 public: |
80 DamageTrackerTest() | 79 DamageTrackerTest() |
81 : host_impl_(&task_runner_provider_, | 80 : host_impl_(&task_runner_provider_, |
82 &shared_bitmap_manager_, | 81 &shared_bitmap_manager_, |
(...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
535 TEST_F(DamageTrackerTest, VerifyDamageForBlurredSurface) { | 534 TEST_F(DamageTrackerTest, VerifyDamageForBlurredSurface) { |
536 LayerImpl* root = CreateAndSetUpTestTreeWithTwoSurfaces(); | 535 LayerImpl* root = CreateAndSetUpTestTreeWithTwoSurfaces(); |
537 LayerImpl* surface = root->test_properties()->children[0]; | 536 LayerImpl* surface = root->test_properties()->children[0]; |
538 LayerImpl* child = surface->test_properties()->children[0]; | 537 LayerImpl* child = surface->test_properties()->children[0]; |
539 | 538 |
540 FilterOperations filters; | 539 FilterOperations filters; |
541 filters.Append(FilterOperation::CreateBlurFilter(5.f)); | 540 filters.Append(FilterOperation::CreateBlurFilter(5.f)); |
542 | 541 |
543 // Setting the filter will damage the whole surface. | 542 // Setting the filter will damage the whole surface. |
544 ClearDamageForAllSurfaces(root); | 543 ClearDamageForAllSurfaces(root); |
545 surface->SetFilters(filters); | 544 surface->test_properties()->filters = filters; |
546 root->layer_tree_impl()->property_trees()->needs_rebuild = true; | 545 root->layer_tree_impl()->property_trees()->needs_rebuild = true; |
547 EmulateDrawingOneFrame(root); | 546 EmulateDrawingOneFrame(root); |
548 | 547 |
549 // Setting the update rect should cause the corresponding damage to the | 548 // Setting the update rect should cause the corresponding damage to the |
550 // surface, blurred based on the size of the blur filter. | 549 // surface, blurred based on the size of the blur filter. |
551 ClearDamageForAllSurfaces(root); | 550 ClearDamageForAllSurfaces(root); |
552 child->SetUpdateRect(gfx::Rect(1, 2, 3, 4)); | 551 child->SetUpdateRect(gfx::Rect(1, 2, 3, 4)); |
553 root->layer_tree_impl()->property_trees()->needs_rebuild = true; | 552 root->layer_tree_impl()->property_trees()->needs_rebuild = true; |
554 EmulateDrawingOneFrame(root); | 553 EmulateDrawingOneFrame(root); |
555 | 554 |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
587 | 586 |
588 // gfx::Rect(100, 100, 30, 30), expanded by 6px for the 2px blur filter. | 587 // gfx::Rect(100, 100, 30, 30), expanded by 6px for the 2px blur filter. |
589 EXPECT_EQ(gfx::Rect(94, 94, 42, 42), root_damage_rect); | 588 EXPECT_EQ(gfx::Rect(94, 94, 42, 42), root_damage_rect); |
590 | 589 |
591 // gfx::Rect(0, 0, 30, 30), expanded by 6px for the 2px blur filter. | 590 // gfx::Rect(0, 0, 30, 30), expanded by 6px for the 2px blur filter. |
592 EXPECT_EQ(gfx::Rect(-6, -6, 42, 42), child_damage_rect); | 591 EXPECT_EQ(gfx::Rect(-6, -6, 42, 42), child_damage_rect); |
593 | 592 |
594 // CASE 1: Setting the update rect should damage the whole surface (for now) | 593 // CASE 1: Setting the update rect should damage the whole surface (for now) |
595 ClearDamageForAllSurfaces(root); | 594 ClearDamageForAllSurfaces(root); |
596 child->SetUpdateRect(gfx::Rect(1, 1)); | 595 child->SetUpdateRect(gfx::Rect(1, 1)); |
597 root->layer_tree_impl()->property_trees()->needs_rebuild = true; | |
598 EmulateDrawingOneFrame(root); | 596 EmulateDrawingOneFrame(root); |
599 | 597 |
600 root_damage_rect = | 598 root_damage_rect = |
601 root->render_surface()->damage_tracker()->current_damage_rect(); | 599 root->render_surface()->damage_tracker()->current_damage_rect(); |
602 child_damage_rect = | 600 child_damage_rect = |
603 child->render_surface()->damage_tracker()->current_damage_rect(); | 601 child->render_surface()->damage_tracker()->current_damage_rect(); |
604 | 602 |
605 // gfx::Rect(100, 100, 1, 1), expanded by 6px for the 2px blur filter. | 603 // gfx::Rect(100, 100, 1, 1), expanded by 6px for the 2px blur filter. |
606 EXPECT_EQ(gfx::Rect(94, 94, 13, 13), root_damage_rect); | 604 EXPECT_EQ(gfx::Rect(94, 94, 13, 13), root_damage_rect); |
607 | 605 |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
644 expected_rotated_width, 30 + 2 * blur_outset); | 642 expected_rotated_width, 30 + 2 * blur_outset); |
645 expected_root_damage.Union(gfx::Rect(100, 100, 30, 30)); | 643 expected_root_damage.Union(gfx::Rect(100, 100, 30, 30)); |
646 EXPECT_EQ(expected_root_damage, root_damage_rect); | 644 EXPECT_EQ(expected_root_damage, root_damage_rect); |
647 EXPECT_EQ(gfx::Rect(-blur_outset, -blur_outset, 30 + 2 * blur_outset, | 645 EXPECT_EQ(gfx::Rect(-blur_outset, -blur_outset, 30 + 2 * blur_outset, |
648 30 + 2 * blur_outset), | 646 30 + 2 * blur_outset), |
649 child_damage_rect); | 647 child_damage_rect); |
650 | 648 |
651 // Setting the update rect should damage the whole surface (for now) | 649 // Setting the update rect should damage the whole surface (for now) |
652 ClearDamageForAllSurfaces(root); | 650 ClearDamageForAllSurfaces(root); |
653 child->SetUpdateRect(gfx::Rect(30, 30)); | 651 child->SetUpdateRect(gfx::Rect(30, 30)); |
654 root->layer_tree_impl()->property_trees()->needs_rebuild = true; | |
655 EmulateDrawingOneFrame(root); | 652 EmulateDrawingOneFrame(root); |
656 | 653 |
657 root_damage_rect = | 654 root_damage_rect = |
658 root->render_surface()->damage_tracker()->current_damage_rect(); | 655 root->render_surface()->damage_tracker()->current_damage_rect(); |
659 child_damage_rect = | 656 child_damage_rect = |
660 child->render_surface()->damage_tracker()->current_damage_rect(); | 657 child->render_surface()->damage_tracker()->current_damage_rect(); |
661 | 658 |
662 int expect_width = 30 + 2 * blur_outset; | 659 int expect_width = 30 + 2 * blur_outset; |
663 int expect_height = 30 + 2 * blur_outset; | 660 int expect_height = 30 + 2 * blur_outset; |
664 EXPECT_EQ(gfx::Rect(100 - blur_outset / 2, 100 - blur_outset, | 661 EXPECT_EQ(gfx::Rect(100 - blur_outset / 2, 100 - blur_outset, |
(...skipping 953 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1618 gfx::Rect root_damage_rect = | 1615 gfx::Rect root_damage_rect = |
1619 root->render_surface()->damage_tracker()->current_damage_rect(); | 1616 root->render_surface()->damage_tracker()->current_damage_rect(); |
1620 gfx::Rect damage_we_care_about = gfx::Rect(i, i); | 1617 gfx::Rect damage_we_care_about = gfx::Rect(i, i); |
1621 EXPECT_LE(damage_we_care_about.right(), root_damage_rect.right()); | 1618 EXPECT_LE(damage_we_care_about.right(), root_damage_rect.right()); |
1622 EXPECT_LE(damage_we_care_about.bottom(), root_damage_rect.bottom()); | 1619 EXPECT_LE(damage_we_care_about.bottom(), root_damage_rect.bottom()); |
1623 } | 1620 } |
1624 } | 1621 } |
1625 | 1622 |
1626 } // namespace | 1623 } // namespace |
1627 } // namespace cc | 1624 } // namespace cc |
OLD | NEW |