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

Side by Side Diff: cc/surfaces/surface_aggregator_unittest.cc

Issue 2543473004: cc: Move filters from RenderPassDrawQuad to RenderPass (Closed)
Patch Set: Address review comments Created 4 years 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
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/surfaces/surface_aggregator.h" 5 #include "cc/surfaces/surface_aggregator.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <utility> 10 #include <utility>
(...skipping 881 matching lines...) Expand 10 before | Expand all | Expand 10 after
892 892
893 RenderPassId pass_id(1, 1); 893 RenderPassId pass_id(1, 1);
894 LocalFrameId grandchild_local_frame_id = allocator_.GenerateId(); 894 LocalFrameId grandchild_local_frame_id = allocator_.GenerateId();
895 SurfaceId grandchild_surface_id(factory_.frame_sink_id(), 895 SurfaceId grandchild_surface_id(factory_.frame_sink_id(),
896 grandchild_local_frame_id); 896 grandchild_local_frame_id);
897 factory_.Create(grandchild_local_frame_id); 897 factory_.Create(grandchild_local_frame_id);
898 std::unique_ptr<RenderPass> grandchild_pass = RenderPass::Create(); 898 std::unique_ptr<RenderPass> grandchild_pass = RenderPass::Create();
899 gfx::Rect output_rect(SurfaceSize()); 899 gfx::Rect output_rect(SurfaceSize());
900 gfx::Rect damage_rect(SurfaceSize()); 900 gfx::Rect damage_rect(SurfaceSize());
901 gfx::Transform transform_to_root_target; 901 gfx::Transform transform_to_root_target;
902 grandchild_pass->SetNew( 902 grandchild_pass->SetNew(pass_id, output_rect, damage_rect,
903 pass_id, output_rect, damage_rect, transform_to_root_target); 903 transform_to_root_target);
904 AddSolidColorQuadWithBlendMode( 904 AddSolidColorQuadWithBlendMode(
905 SurfaceSize(), grandchild_pass.get(), blend_modes[2]); 905 SurfaceSize(), grandchild_pass.get(), blend_modes[2]);
906 QueuePassAsFrame(std::move(grandchild_pass), grandchild_local_frame_id); 906 QueuePassAsFrame(std::move(grandchild_pass), grandchild_local_frame_id);
907 907
908 LocalFrameId child_one_local_frame_id = allocator_.GenerateId(); 908 LocalFrameId child_one_local_frame_id = allocator_.GenerateId();
909 SurfaceId child_one_surface_id(factory_.frame_sink_id(), 909 SurfaceId child_one_surface_id(factory_.frame_sink_id(),
910 child_one_local_frame_id); 910 child_one_local_frame_id);
911 factory_.Create(child_one_local_frame_id); 911 factory_.Create(child_one_local_frame_id);
912 912
913 std::unique_ptr<RenderPass> child_one_pass = RenderPass::Create(); 913 std::unique_ptr<RenderPass> child_one_pass = RenderPass::Create();
914 child_one_pass->SetNew( 914 child_one_pass->SetNew(pass_id, output_rect, damage_rect,
915 pass_id, output_rect, damage_rect, transform_to_root_target); 915 transform_to_root_target);
916 AddSolidColorQuadWithBlendMode( 916 AddSolidColorQuadWithBlendMode(
917 SurfaceSize(), child_one_pass.get(), blend_modes[1]); 917 SurfaceSize(), child_one_pass.get(), blend_modes[1]);
918 SurfaceDrawQuad* grandchild_surface_quad = 918 SurfaceDrawQuad* grandchild_surface_quad =
919 child_one_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); 919 child_one_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>();
920 grandchild_surface_quad->SetNew(child_one_pass->shared_quad_state_list.back(), 920 grandchild_surface_quad->SetNew(child_one_pass->shared_quad_state_list.back(),
921 gfx::Rect(SurfaceSize()), 921 gfx::Rect(SurfaceSize()),
922 gfx::Rect(SurfaceSize()), 922 gfx::Rect(SurfaceSize()),
923 grandchild_surface_id); 923 grandchild_surface_id);
924 AddSolidColorQuadWithBlendMode( 924 AddSolidColorQuadWithBlendMode(
925 SurfaceSize(), child_one_pass.get(), blend_modes[3]); 925 SurfaceSize(), child_one_pass.get(), blend_modes[3]);
926 QueuePassAsFrame(std::move(child_one_pass), child_one_local_frame_id); 926 QueuePassAsFrame(std::move(child_one_pass), child_one_local_frame_id);
927 927
928 LocalFrameId child_two_local_frame_id = allocator_.GenerateId(); 928 LocalFrameId child_two_local_frame_id = allocator_.GenerateId();
929 SurfaceId child_two_surface_id(factory_.frame_sink_id(), 929 SurfaceId child_two_surface_id(factory_.frame_sink_id(),
930 child_two_local_frame_id); 930 child_two_local_frame_id);
931 factory_.Create(child_two_local_frame_id); 931 factory_.Create(child_two_local_frame_id);
932 932
933 std::unique_ptr<RenderPass> child_two_pass = RenderPass::Create(); 933 std::unique_ptr<RenderPass> child_two_pass = RenderPass::Create();
934 child_two_pass->SetNew( 934 child_two_pass->SetNew(pass_id, output_rect, damage_rect,
935 pass_id, output_rect, damage_rect, transform_to_root_target); 935 transform_to_root_target);
936 AddSolidColorQuadWithBlendMode( 936 AddSolidColorQuadWithBlendMode(
937 SurfaceSize(), child_two_pass.get(), blend_modes[5]); 937 SurfaceSize(), child_two_pass.get(), blend_modes[5]);
938 QueuePassAsFrame(std::move(child_two_pass), child_two_local_frame_id); 938 QueuePassAsFrame(std::move(child_two_pass), child_two_local_frame_id);
939 939
940 std::unique_ptr<RenderPass> root_pass = RenderPass::Create(); 940 std::unique_ptr<RenderPass> root_pass = RenderPass::Create();
941 root_pass->SetNew( 941 root_pass->SetNew(pass_id, output_rect, damage_rect,
942 pass_id, output_rect, damage_rect, transform_to_root_target); 942 transform_to_root_target);
943 943
944 AddSolidColorQuadWithBlendMode( 944 AddSolidColorQuadWithBlendMode(
945 SurfaceSize(), root_pass.get(), blend_modes[0]); 945 SurfaceSize(), root_pass.get(), blend_modes[0]);
946 SurfaceDrawQuad* child_one_surface_quad = 946 SurfaceDrawQuad* child_one_surface_quad =
947 root_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); 947 root_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>();
948 child_one_surface_quad->SetNew(root_pass->shared_quad_state_list.back(), 948 child_one_surface_quad->SetNew(root_pass->shared_quad_state_list.back(),
949 gfx::Rect(SurfaceSize()), 949 gfx::Rect(SurfaceSize()),
950 gfx::Rect(SurfaceSize()), 950 gfx::Rect(SurfaceSize()),
951 child_one_surface_id); 951 child_one_surface_id);
952 AddSolidColorQuadWithBlendMode( 952 AddSolidColorQuadWithBlendMode(
(...skipping 653 matching lines...) Expand 10 before | Expand all | Expand 10 after
1606 const RenderPassList& aggregated_pass_list = 1606 const RenderPassList& aggregated_pass_list =
1607 aggregated_frame.render_pass_list; 1607 aggregated_frame.render_pass_list;
1608 // There were no changes since last aggregation, so output should be empty 1608 // There were no changes since last aggregation, so output should be empty
1609 // and have no damage. 1609 // and have no damage.
1610 ASSERT_EQ(1u, aggregated_pass_list.size()); 1610 ASSERT_EQ(1u, aggregated_pass_list.size());
1611 EXPECT_TRUE(aggregated_pass_list[0]->damage_rect.IsEmpty()); 1611 EXPECT_TRUE(aggregated_pass_list[0]->damage_rect.IsEmpty());
1612 ASSERT_EQ(0u, aggregated_pass_list[0]->quad_list.size()); 1612 ASSERT_EQ(0u, aggregated_pass_list[0]->quad_list.size());
1613 } 1613 }
1614 1614
1615 // Root surface has smaller damage rect, but filter on render pass means all 1615 // Root surface has smaller damage rect, but filter on render pass means all
1616 // of it should be aggregated. 1616 // of it and its descendant passes should be aggregated.
1617 { 1617 {
1618 RenderPassId root_pass_ids[] = {RenderPassId(1, 1), RenderPassId(1, 2)}; 1618 RenderPassId root_pass_ids[] = {RenderPassId(1, 1), RenderPassId(1, 2),
1619 RenderPassId(1, 3)};
1619 test::Quad root_quads1[] = {test::Quad::SurfaceQuad(child_surface_id, 1.f)}; 1620 test::Quad root_quads1[] = {test::Quad::SurfaceQuad(child_surface_id, 1.f)};
1620 test::Quad root_quads2[] = {test::Quad::RenderPassQuad(root_pass_ids[0])}; 1621 test::Quad root_quads2[] = {test::Quad::RenderPassQuad(root_pass_ids[0])};
1622 test::Quad root_quads3[] = {test::Quad::RenderPassQuad(root_pass_ids[1])};
1621 test::Pass root_passes[] = { 1623 test::Pass root_passes[] = {
1622 test::Pass(root_quads1, arraysize(root_quads1), root_pass_ids[0]), 1624 test::Pass(root_quads1, arraysize(root_quads1), root_pass_ids[0]),
1623 test::Pass(root_quads2, arraysize(root_quads2), root_pass_ids[1])}; 1625 test::Pass(root_quads2, arraysize(root_quads2), root_pass_ids[1]),
1626 test::Pass(root_quads3, arraysize(root_quads3), root_pass_ids[2])};
1624 1627
1625 RenderPassList root_pass_list; 1628 RenderPassList root_pass_list;
1626 AddPasses(&root_pass_list, gfx::Rect(SurfaceSize()), root_passes, 1629 AddPasses(&root_pass_list, gfx::Rect(SurfaceSize()), root_passes,
1627 arraysize(root_passes)); 1630 arraysize(root_passes));
1628 1631
1629 RenderPass* pass = root_pass_list[0].get(); 1632 RenderPass* pass = root_pass_list[1].get();
danakj 2016/12/14 23:23:57 can u name this |filter_pass| now cuz there's 2 no
ajuma 2016/12/15 16:49:21 Done.
1630 pass->shared_quad_state_list.front()->quad_to_target_transform.Translate( 1633 pass->shared_quad_state_list.front()->quad_to_target_transform.Translate(0,
danakj 2016/12/14 23:23:57 Why the 0,0 change, and why is that different than
ajuma 2016/12/15 16:49:21 Oh, I changed that while debugging and forgot to r
1631 10, 10); 1634 0);
1632 RenderPass* root_pass = root_pass_list[1].get(); 1635 RenderPass* root_pass = root_pass_list[2].get();
1633 RenderPassDrawQuad* quad = 1636 pass->filters.Append(FilterOperation::CreateBlurFilter(2));
1634 static_cast<RenderPassDrawQuad*>(root_pass->quad_list.front());
1635 quad->filters.Append(FilterOperation::CreateBlurFilter(2));
1636 root_pass->damage_rect = gfx::Rect(10, 10, 2, 2); 1637 root_pass->damage_rect = gfx::Rect(10, 10, 2, 2);
1637 SubmitPassListAsFrame(&factory_, root_local_frame_id_, &root_pass_list); 1638 SubmitPassListAsFrame(&factory_, root_local_frame_id_, &root_pass_list);
1638 } 1639 }
1639 1640
1640 { 1641 {
1641 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); 1642 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
1642 1643
1643 const RenderPassList& aggregated_pass_list = 1644 const RenderPassList& aggregated_pass_list =
1644 aggregated_frame.render_pass_list; 1645 aggregated_frame.render_pass_list;
1645 1646
1646 ASSERT_EQ(3u, aggregated_pass_list.size()); 1647 ASSERT_EQ(4u, aggregated_pass_list.size());
1647 1648
1648 EXPECT_EQ(gfx::Rect(SurfaceSize()), aggregated_pass_list[0]->damage_rect); 1649 EXPECT_EQ(gfx::Rect(SurfaceSize()), aggregated_pass_list[0]->damage_rect);
1649 EXPECT_EQ(gfx::Rect(SurfaceSize()), aggregated_pass_list[1]->damage_rect); 1650 EXPECT_EQ(gfx::Rect(SurfaceSize()), aggregated_pass_list[1]->damage_rect);
1650 EXPECT_EQ(gfx::Rect(10, 10, 2, 2), aggregated_pass_list[2]->damage_rect); 1651 EXPECT_EQ(gfx::Rect(SurfaceSize()), aggregated_pass_list[2]->damage_rect);
1652 EXPECT_EQ(gfx::Rect(10, 10, 2, 2), aggregated_pass_list[3]->damage_rect);
1651 EXPECT_EQ(1u, aggregated_pass_list[0]->quad_list.size()); 1653 EXPECT_EQ(1u, aggregated_pass_list[0]->quad_list.size());
1652 EXPECT_EQ(1u, aggregated_pass_list[1]->quad_list.size()); 1654 EXPECT_EQ(1u, aggregated_pass_list[1]->quad_list.size());
1655 EXPECT_EQ(1u, aggregated_pass_list[2]->quad_list.size());
1653 // First render pass draw quad is outside damage rect, so shouldn't be 1656 // First render pass draw quad is outside damage rect, so shouldn't be
1654 // drawn. 1657 // drawn.
1655 EXPECT_EQ(0u, aggregated_pass_list[2]->quad_list.size()); 1658 EXPECT_EQ(0u, aggregated_pass_list[3]->quad_list.size());
1656 } 1659 }
1657 1660
1658 // Root surface has smaller damage rect. Background filter on render pass 1661 // Root surface has smaller damage rect. Background filter on render pass
1659 // means Surface 1662 // means Surface
1660 // quad under it should be aggregated. 1663 // quad under it should be aggregated.
1661 { 1664 {
1662 RenderPassId root_pass_ids[] = {RenderPassId(1, 1), RenderPassId(1, 2)}; 1665 RenderPassId root_pass_ids[] = {RenderPassId(1, 1), RenderPassId(1, 2)};
1663 test::Quad root_quads1[] = { 1666 test::Quad root_quads1[] = {
1664 test::Quad::SolidColorQuad(1), 1667 test::Quad::SolidColorQuad(1),
1665 }; 1668 };
1666 test::Quad root_quads2[] = {test::Quad::RenderPassQuad(root_pass_ids[0]), 1669 test::Quad root_quads2[] = {test::Quad::RenderPassQuad(root_pass_ids[0]),
1667 test::Quad::SurfaceQuad(child_surface_id, 1.f)}; 1670 test::Quad::SurfaceQuad(child_surface_id, 1.f)};
1668 test::Pass root_passes[] = { 1671 test::Pass root_passes[] = {
1669 test::Pass(root_quads1, arraysize(root_quads1), root_pass_ids[0]), 1672 test::Pass(root_quads1, arraysize(root_quads1), root_pass_ids[0]),
1670 test::Pass(root_quads2, arraysize(root_quads2), root_pass_ids[1])}; 1673 test::Pass(root_quads2, arraysize(root_quads2), root_pass_ids[1])};
1671 1674
1672 RenderPassList root_pass_list; 1675 RenderPassList root_pass_list;
1673 AddPasses(&root_pass_list, gfx::Rect(SurfaceSize()), root_passes, 1676 AddPasses(&root_pass_list, gfx::Rect(SurfaceSize()), root_passes,
1674 arraysize(root_passes)); 1677 arraysize(root_passes));
1675 1678
1679 RenderPass* pass = root_pass_list[0].get();
1676 RenderPass* root_pass = root_pass_list[1].get(); 1680 RenderPass* root_pass = root_pass_list[1].get();
1677 root_pass->shared_quad_state_list.ElementAt(1) 1681 root_pass->shared_quad_state_list.ElementAt(1)
1678 ->quad_to_target_transform.Translate(10, 10); 1682 ->quad_to_target_transform.Translate(10, 10);
1679 RenderPassDrawQuad* quad = 1683 pass->background_filters.Append(FilterOperation::CreateBlurFilter(2));
1680 static_cast<RenderPassDrawQuad*>(root_pass->quad_list.front());
1681 quad->background_filters.Append(FilterOperation::CreateBlurFilter(2));
1682 root_pass->damage_rect = gfx::Rect(10, 10, 2, 2); 1684 root_pass->damage_rect = gfx::Rect(10, 10, 2, 2);
1683 SubmitPassListAsFrame(&factory_, root_local_frame_id_, &root_pass_list); 1685 SubmitPassListAsFrame(&factory_, root_local_frame_id_, &root_pass_list);
1684 } 1686 }
1685 1687
1686 { 1688 {
1687 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); 1689 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
1688 1690
1689 const RenderPassList& aggregated_pass_list = 1691 const RenderPassList& aggregated_pass_list =
1690 aggregated_frame.render_pass_list; 1692 aggregated_frame.render_pass_list;
1691 1693
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after
2013 // Output is insecure, so texture should be drawn. 2015 // Output is insecure, so texture should be drawn.
2014 EXPECT_EQ(DrawQuad::SOLID_COLOR, render_pass->quad_list.back()->material); 2016 EXPECT_EQ(DrawQuad::SOLID_COLOR, render_pass->quad_list.back()->material);
2015 2017
2016 factory.Destroy(local_frame1_id); 2018 factory.Destroy(local_frame1_id);
2017 factory.Destroy(local_frame2_id); 2019 factory.Destroy(local_frame2_id);
2018 } 2020 }
2019 2021
2020 } // namespace 2022 } // namespace
2021 } // namespace cc 2023 } // namespace cc
2022 2024
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698