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

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

Issue 2543473004: cc: Move filters from RenderPassDrawQuad to RenderPass (Closed)
Patch Set: Rebase again 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
« no previous file with comments | « cc/surfaces/surface_aggregator.cc ('k') | cc/test/render_pass_test_utils.h » ('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/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 943 matching lines...) Expand 10 before | Expand all | Expand 10 after
954 LocalFrameId grandchild_local_frame_id = allocator_.GenerateId(); 954 LocalFrameId grandchild_local_frame_id = allocator_.GenerateId();
955 SurfaceId grandchild_surface_id(grandchild_factory.frame_sink_id(), 955 SurfaceId grandchild_surface_id(grandchild_factory.frame_sink_id(),
956 grandchild_local_frame_id); 956 grandchild_local_frame_id);
957 grandchild_factory.SubmitCompositorFrame(grandchild_local_frame_id, 957 grandchild_factory.SubmitCompositorFrame(grandchild_local_frame_id,
958 CompositorFrame(), 958 CompositorFrame(),
959 SurfaceFactory::DrawCallback()); 959 SurfaceFactory::DrawCallback());
960 std::unique_ptr<RenderPass> grandchild_pass = RenderPass::Create(); 960 std::unique_ptr<RenderPass> grandchild_pass = RenderPass::Create();
961 gfx::Rect output_rect(SurfaceSize()); 961 gfx::Rect output_rect(SurfaceSize());
962 gfx::Rect damage_rect(SurfaceSize()); 962 gfx::Rect damage_rect(SurfaceSize());
963 gfx::Transform transform_to_root_target; 963 gfx::Transform transform_to_root_target;
964 grandchild_pass->SetNew( 964 grandchild_pass->SetNew(pass_id, output_rect, damage_rect,
965 pass_id, output_rect, damage_rect, transform_to_root_target); 965 transform_to_root_target);
966 AddSolidColorQuadWithBlendMode( 966 AddSolidColorQuadWithBlendMode(
967 SurfaceSize(), grandchild_pass.get(), blend_modes[2]); 967 SurfaceSize(), grandchild_pass.get(), blend_modes[2]);
968 QueuePassAsFrame(std::move(grandchild_pass), grandchild_local_frame_id, 968 QueuePassAsFrame(std::move(grandchild_pass), grandchild_local_frame_id,
969 &grandchild_factory); 969 &grandchild_factory);
970 970
971 LocalFrameId child_one_local_frame_id = allocator_.GenerateId(); 971 LocalFrameId child_one_local_frame_id = allocator_.GenerateId();
972 SurfaceId child_one_surface_id(child_one_factory.frame_sink_id(), 972 SurfaceId child_one_surface_id(child_one_factory.frame_sink_id(),
973 child_one_local_frame_id); 973 child_one_local_frame_id);
974 child_one_factory.SubmitCompositorFrame(child_one_local_frame_id, 974 child_one_factory.SubmitCompositorFrame(child_one_local_frame_id,
975 CompositorFrame(), 975 CompositorFrame(),
976 SurfaceFactory::DrawCallback()); 976 SurfaceFactory::DrawCallback());
977 977
978 std::unique_ptr<RenderPass> child_one_pass = RenderPass::Create(); 978 std::unique_ptr<RenderPass> child_one_pass = RenderPass::Create();
979 child_one_pass->SetNew( 979 child_one_pass->SetNew(pass_id, output_rect, damage_rect,
980 pass_id, output_rect, damage_rect, transform_to_root_target); 980 transform_to_root_target);
981 AddSolidColorQuadWithBlendMode( 981 AddSolidColorQuadWithBlendMode(
982 SurfaceSize(), child_one_pass.get(), blend_modes[1]); 982 SurfaceSize(), child_one_pass.get(), blend_modes[1]);
983 SurfaceDrawQuad* grandchild_surface_quad = 983 SurfaceDrawQuad* grandchild_surface_quad =
984 child_one_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); 984 child_one_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>();
985 grandchild_surface_quad->SetNew(child_one_pass->shared_quad_state_list.back(), 985 grandchild_surface_quad->SetNew(child_one_pass->shared_quad_state_list.back(),
986 gfx::Rect(SurfaceSize()), 986 gfx::Rect(SurfaceSize()),
987 gfx::Rect(SurfaceSize()), 987 gfx::Rect(SurfaceSize()),
988 grandchild_surface_id); 988 grandchild_surface_id);
989 AddSolidColorQuadWithBlendMode( 989 AddSolidColorQuadWithBlendMode(
990 SurfaceSize(), child_one_pass.get(), blend_modes[3]); 990 SurfaceSize(), child_one_pass.get(), blend_modes[3]);
991 QueuePassAsFrame(std::move(child_one_pass), child_one_local_frame_id, 991 QueuePassAsFrame(std::move(child_one_pass), child_one_local_frame_id,
992 &child_one_factory); 992 &child_one_factory);
993 993
994 LocalFrameId child_two_local_frame_id = allocator_.GenerateId(); 994 LocalFrameId child_two_local_frame_id = allocator_.GenerateId();
995 SurfaceId child_two_surface_id(child_two_factory.frame_sink_id(), 995 SurfaceId child_two_surface_id(child_two_factory.frame_sink_id(),
996 child_two_local_frame_id); 996 child_two_local_frame_id);
997 child_two_factory.SubmitCompositorFrame(child_two_local_frame_id, 997 child_two_factory.SubmitCompositorFrame(child_two_local_frame_id,
998 CompositorFrame(), 998 CompositorFrame(),
999 SurfaceFactory::DrawCallback()); 999 SurfaceFactory::DrawCallback());
1000 1000
1001 std::unique_ptr<RenderPass> child_two_pass = RenderPass::Create(); 1001 std::unique_ptr<RenderPass> child_two_pass = RenderPass::Create();
1002 child_two_pass->SetNew( 1002 child_two_pass->SetNew(pass_id, output_rect, damage_rect,
1003 pass_id, output_rect, damage_rect, transform_to_root_target); 1003 transform_to_root_target);
1004 AddSolidColorQuadWithBlendMode( 1004 AddSolidColorQuadWithBlendMode(
1005 SurfaceSize(), child_two_pass.get(), blend_modes[5]); 1005 SurfaceSize(), child_two_pass.get(), blend_modes[5]);
1006 QueuePassAsFrame(std::move(child_two_pass), child_two_local_frame_id, 1006 QueuePassAsFrame(std::move(child_two_pass), child_two_local_frame_id,
1007 &child_two_factory); 1007 &child_two_factory);
1008 1008
1009 std::unique_ptr<RenderPass> root_pass = RenderPass::Create(); 1009 std::unique_ptr<RenderPass> root_pass = RenderPass::Create();
1010 root_pass->SetNew( 1010 root_pass->SetNew(pass_id, output_rect, damage_rect,
1011 pass_id, output_rect, damage_rect, transform_to_root_target); 1011 transform_to_root_target);
1012 1012
1013 AddSolidColorQuadWithBlendMode( 1013 AddSolidColorQuadWithBlendMode(
1014 SurfaceSize(), root_pass.get(), blend_modes[0]); 1014 SurfaceSize(), root_pass.get(), blend_modes[0]);
1015 SurfaceDrawQuad* child_one_surface_quad = 1015 SurfaceDrawQuad* child_one_surface_quad =
1016 root_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); 1016 root_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>();
1017 child_one_surface_quad->SetNew(root_pass->shared_quad_state_list.back(), 1017 child_one_surface_quad->SetNew(root_pass->shared_quad_state_list.back(),
1018 gfx::Rect(SurfaceSize()), 1018 gfx::Rect(SurfaceSize()),
1019 gfx::Rect(SurfaceSize()), 1019 gfx::Rect(SurfaceSize()),
1020 child_one_surface_id); 1020 child_one_surface_id);
1021 AddSolidColorQuadWithBlendMode( 1021 AddSolidColorQuadWithBlendMode(
(...skipping 649 matching lines...) Expand 10 before | Expand all | Expand 10 after
1671 const RenderPassList& aggregated_pass_list = 1671 const RenderPassList& aggregated_pass_list =
1672 aggregated_frame.render_pass_list; 1672 aggregated_frame.render_pass_list;
1673 // There were no changes since last aggregation, so output should be empty 1673 // There were no changes since last aggregation, so output should be empty
1674 // and have no damage. 1674 // and have no damage.
1675 ASSERT_EQ(1u, aggregated_pass_list.size()); 1675 ASSERT_EQ(1u, aggregated_pass_list.size());
1676 EXPECT_TRUE(aggregated_pass_list[0]->damage_rect.IsEmpty()); 1676 EXPECT_TRUE(aggregated_pass_list[0]->damage_rect.IsEmpty());
1677 ASSERT_EQ(0u, aggregated_pass_list[0]->quad_list.size()); 1677 ASSERT_EQ(0u, aggregated_pass_list[0]->quad_list.size());
1678 } 1678 }
1679 1679
1680 // Root surface has smaller damage rect, but filter on render pass means all 1680 // Root surface has smaller damage rect, but filter on render pass means all
1681 // of it should be aggregated. 1681 // of it and its descendant passes should be aggregated.
1682 { 1682 {
1683 int root_pass_ids[] = {1, 2}; 1683 int root_pass_ids[] = {1, 2, 3};
1684 test::Quad root_quads1[] = {test::Quad::SurfaceQuad(child_surface_id, 1.f)}; 1684 test::Quad root_quads1[] = {test::Quad::SurfaceQuad(child_surface_id, 1.f)};
1685 test::Quad root_quads2[] = {test::Quad::RenderPassQuad(root_pass_ids[0])}; 1685 test::Quad root_quads2[] = {test::Quad::RenderPassQuad(root_pass_ids[0])};
1686 test::Quad root_quads3[] = {test::Quad::RenderPassQuad(root_pass_ids[1])};
1686 test::Pass root_passes[] = { 1687 test::Pass root_passes[] = {
1687 test::Pass(root_quads1, arraysize(root_quads1), root_pass_ids[0]), 1688 test::Pass(root_quads1, arraysize(root_quads1), root_pass_ids[0]),
1688 test::Pass(root_quads2, arraysize(root_quads2), root_pass_ids[1])}; 1689 test::Pass(root_quads2, arraysize(root_quads2), root_pass_ids[1]),
1690 test::Pass(root_quads3, arraysize(root_quads3), root_pass_ids[2])};
1689 1691
1690 RenderPassList root_pass_list; 1692 RenderPassList root_pass_list;
1691 AddPasses(&root_pass_list, gfx::Rect(SurfaceSize()), root_passes, 1693 AddPasses(&root_pass_list, gfx::Rect(SurfaceSize()), root_passes,
1692 arraysize(root_passes)); 1694 arraysize(root_passes));
1693 1695
1694 RenderPass* pass = root_pass_list[0].get(); 1696 RenderPass* filter_pass = root_pass_list[1].get();
1695 pass->shared_quad_state_list.front()->quad_to_target_transform.Translate( 1697 filter_pass->shared_quad_state_list.front()
1696 10, 10); 1698 ->quad_to_target_transform.Translate(10, 10);
1697 RenderPass* root_pass = root_pass_list[1].get(); 1699 RenderPass* root_pass = root_pass_list[2].get();
1698 RenderPassDrawQuad* quad = 1700 filter_pass->filters.Append(FilterOperation::CreateBlurFilter(2));
1699 static_cast<RenderPassDrawQuad*>(root_pass->quad_list.front());
1700 quad->filters.Append(FilterOperation::CreateBlurFilter(2));
1701 root_pass->damage_rect = gfx::Rect(10, 10, 2, 2); 1701 root_pass->damage_rect = gfx::Rect(10, 10, 2, 2);
1702 SubmitPassListAsFrame(&factory_, root_local_frame_id_, &root_pass_list); 1702 SubmitPassListAsFrame(&factory_, root_local_frame_id_, &root_pass_list);
1703 } 1703 }
1704 1704
1705 { 1705 {
1706 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); 1706 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
1707 1707
1708 const RenderPassList& aggregated_pass_list = 1708 const RenderPassList& aggregated_pass_list =
1709 aggregated_frame.render_pass_list; 1709 aggregated_frame.render_pass_list;
1710 1710
1711 ASSERT_EQ(3u, aggregated_pass_list.size()); 1711 ASSERT_EQ(4u, aggregated_pass_list.size());
1712 1712
1713 EXPECT_EQ(gfx::Rect(SurfaceSize()), aggregated_pass_list[0]->damage_rect); 1713 EXPECT_EQ(gfx::Rect(SurfaceSize()), aggregated_pass_list[0]->damage_rect);
1714 EXPECT_EQ(gfx::Rect(SurfaceSize()), aggregated_pass_list[1]->damage_rect); 1714 EXPECT_EQ(gfx::Rect(SurfaceSize()), aggregated_pass_list[1]->damage_rect);
1715 EXPECT_EQ(gfx::Rect(10, 10, 2, 2), aggregated_pass_list[2]->damage_rect); 1715 EXPECT_EQ(gfx::Rect(SurfaceSize()), aggregated_pass_list[2]->damage_rect);
1716 EXPECT_EQ(gfx::Rect(10, 10, 2, 2), aggregated_pass_list[3]->damage_rect);
1716 EXPECT_EQ(1u, aggregated_pass_list[0]->quad_list.size()); 1717 EXPECT_EQ(1u, aggregated_pass_list[0]->quad_list.size());
1717 EXPECT_EQ(1u, aggregated_pass_list[1]->quad_list.size()); 1718 EXPECT_EQ(1u, aggregated_pass_list[1]->quad_list.size());
1719 EXPECT_EQ(1u, aggregated_pass_list[2]->quad_list.size());
1718 // First render pass draw quad is outside damage rect, so shouldn't be 1720 // First render pass draw quad is outside damage rect, so shouldn't be
1719 // drawn. 1721 // drawn.
1720 EXPECT_EQ(0u, aggregated_pass_list[2]->quad_list.size()); 1722 EXPECT_EQ(0u, aggregated_pass_list[3]->quad_list.size());
1721 } 1723 }
1722 1724
1723 // Root surface has smaller damage rect. Background filter on render pass 1725 // Root surface has smaller damage rect. Background filter on render pass
1724 // means Surface 1726 // means Surface
1725 // quad under it should be aggregated. 1727 // quad under it should be aggregated.
1726 { 1728 {
1727 int root_pass_ids[] = {1, 2}; 1729 int root_pass_ids[] = {1, 2};
1728 test::Quad root_quads1[] = { 1730 test::Quad root_quads1[] = {
1729 test::Quad::SolidColorQuad(1), 1731 test::Quad::SolidColorQuad(1),
1730 }; 1732 };
1731 test::Quad root_quads2[] = {test::Quad::RenderPassQuad(root_pass_ids[0]), 1733 test::Quad root_quads2[] = {test::Quad::RenderPassQuad(root_pass_ids[0]),
1732 test::Quad::SurfaceQuad(child_surface_id, 1.f)}; 1734 test::Quad::SurfaceQuad(child_surface_id, 1.f)};
1733 test::Pass root_passes[] = { 1735 test::Pass root_passes[] = {
1734 test::Pass(root_quads1, arraysize(root_quads1), root_pass_ids[0]), 1736 test::Pass(root_quads1, arraysize(root_quads1), root_pass_ids[0]),
1735 test::Pass(root_quads2, arraysize(root_quads2), root_pass_ids[1])}; 1737 test::Pass(root_quads2, arraysize(root_quads2), root_pass_ids[1])};
1736 1738
1737 RenderPassList root_pass_list; 1739 RenderPassList root_pass_list;
1738 AddPasses(&root_pass_list, gfx::Rect(SurfaceSize()), root_passes, 1740 AddPasses(&root_pass_list, gfx::Rect(SurfaceSize()), root_passes,
1739 arraysize(root_passes)); 1741 arraysize(root_passes));
1740 1742
1743 RenderPass* pass = root_pass_list[0].get();
1741 RenderPass* root_pass = root_pass_list[1].get(); 1744 RenderPass* root_pass = root_pass_list[1].get();
1742 root_pass->shared_quad_state_list.ElementAt(1) 1745 root_pass->shared_quad_state_list.ElementAt(1)
1743 ->quad_to_target_transform.Translate(10, 10); 1746 ->quad_to_target_transform.Translate(10, 10);
1744 RenderPassDrawQuad* quad = 1747 pass->background_filters.Append(FilterOperation::CreateBlurFilter(2));
1745 static_cast<RenderPassDrawQuad*>(root_pass->quad_list.front());
1746 quad->background_filters.Append(FilterOperation::CreateBlurFilter(2));
1747 root_pass->damage_rect = gfx::Rect(10, 10, 2, 2); 1748 root_pass->damage_rect = gfx::Rect(10, 10, 2, 2);
1748 SubmitPassListAsFrame(&factory_, root_local_frame_id_, &root_pass_list); 1749 SubmitPassListAsFrame(&factory_, root_local_frame_id_, &root_pass_list);
1749 } 1750 }
1750 1751
1751 { 1752 {
1752 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); 1753 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
1753 1754
1754 const RenderPassList& aggregated_pass_list = 1755 const RenderPassList& aggregated_pass_list =
1755 aggregated_frame.render_pass_list; 1756 aggregated_frame.render_pass_list;
1756 1757
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after
2077 // Output is insecure, so texture should be drawn. 2078 // Output is insecure, so texture should be drawn.
2078 EXPECT_EQ(DrawQuad::SOLID_COLOR, render_pass->quad_list.back()->material); 2079 EXPECT_EQ(DrawQuad::SOLID_COLOR, render_pass->quad_list.back()->material);
2079 2080
2080 factory1.EvictSurface(); 2081 factory1.EvictSurface();
2081 factory2.EvictSurface(); 2082 factory2.EvictSurface();
2082 } 2083 }
2083 2084
2084 } // namespace 2085 } // namespace
2085 } // namespace cc 2086 } // namespace cc
2086 2087
OLDNEW
« no previous file with comments | « cc/surfaces/surface_aggregator.cc ('k') | cc/test/render_pass_test_utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698