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

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

Issue 1935613002: cc: Move filter outset in content rect calculation (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@visiblerectcleanup
Patch Set: rebase Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/trees/damage_tracker.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/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
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
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
OLDNEW
« no previous file with comments | « cc/trees/damage_tracker.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698