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

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

Issue 551013002: Use Custome ListContainer to Allocate SharedQuadState (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@DQAllo
Patch Set: use C++ range based loop Created 6 years, 2 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
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/output/compositor_frame.h" 5 #include "cc/output/compositor_frame.h"
6 #include "cc/output/delegated_frame_data.h" 6 #include "cc/output/delegated_frame_data.h"
7 #include "cc/quads/render_pass.h" 7 #include "cc/quads/render_pass.h"
8 #include "cc/quads/render_pass_draw_quad.h" 8 #include "cc/quads/render_pass_draw_quad.h"
9 #include "cc/quads/solid_color_draw_quad.h" 9 #include "cc/quads/solid_color_draw_quad.h"
10 #include "cc/quads/surface_draw_quad.h" 10 #include "cc/quads/surface_draw_quad.h"
(...skipping 680 matching lines...) Expand 10 before | Expand all | Expand 10 after
691 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); 691 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get();
692 692
693 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; 693 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list;
694 694
695 ASSERT_EQ(1u, aggregated_pass_list.size()); 695 ASSERT_EQ(1u, aggregated_pass_list.size());
696 696
697 const QuadList& aggregated_quad_list = aggregated_pass_list[0]->quad_list; 697 const QuadList& aggregated_quad_list = aggregated_pass_list[0]->quad_list;
698 698
699 ASSERT_EQ(7u, aggregated_quad_list.size()); 699 ASSERT_EQ(7u, aggregated_quad_list.size());
700 700
701 size_t i = 0;
702 for (QuadList::ConstIterator iter = aggregated_quad_list.begin(); 701 for (QuadList::ConstIterator iter = aggregated_quad_list.begin();
703 iter != aggregated_quad_list.end(); 702 iter != aggregated_quad_list.end();
704 ++iter) { 703 ++iter) {
705 EXPECT_EQ(blend_modes[i], iter->shared_quad_state->blend_mode) << i; 704 EXPECT_EQ(blend_modes[iter.index()], iter->shared_quad_state->blend_mode)
706 ++i; 705 << iter.index();
707 } 706 }
708 factory_.Destroy(child_one_surface_id); 707 factory_.Destroy(child_one_surface_id);
709 factory_.Destroy(child_two_surface_id); 708 factory_.Destroy(child_two_surface_id);
710 factory_.Destroy(grandchild_surface_id); 709 factory_.Destroy(grandchild_surface_id);
711 } 710 }
712 711
713 // This tests that when aggregating a frame with multiple render passes that we 712 // This tests that when aggregating a frame with multiple render passes that we
714 // map the transforms for the root pass but do not modify the transform on child 713 // map the transforms for the root pass but do not modify the transform on child
715 // passes. 714 // passes.
716 // 715 //
(...skipping 21 matching lines...) Expand all
738 737
739 RenderPassList child_pass_list; 738 RenderPassList child_pass_list;
740 AddPasses(&child_pass_list, 739 AddPasses(&child_pass_list,
741 gfx::Rect(SurfaceSize()), 740 gfx::Rect(SurfaceSize()),
742 child_passes, 741 child_passes,
743 arraysize(child_passes)); 742 arraysize(child_passes));
744 743
745 RenderPass* child_nonroot_pass = child_pass_list.at(0u); 744 RenderPass* child_nonroot_pass = child_pass_list.at(0u);
746 child_nonroot_pass->transform_to_root_target.Translate(8, 0); 745 child_nonroot_pass->transform_to_root_target.Translate(8, 0);
747 SharedQuadState* child_nonroot_pass_sqs = 746 SharedQuadState* child_nonroot_pass_sqs =
748 child_nonroot_pass->shared_quad_state_list[0]; 747 child_nonroot_pass->shared_quad_state_list.front();
749 child_nonroot_pass_sqs->content_to_target_transform.Translate(5, 0); 748 child_nonroot_pass_sqs->content_to_target_transform.Translate(5, 0);
750 749
751 RenderPass* child_root_pass = child_pass_list.at(1u); 750 RenderPass* child_root_pass = child_pass_list.at(1u);
752 SharedQuadState* child_root_pass_sqs = 751 SharedQuadState* child_root_pass_sqs =
753 child_root_pass->shared_quad_state_list[0]; 752 child_root_pass->shared_quad_state_list.front();
754 child_root_pass_sqs->content_to_target_transform.Translate(8, 0); 753 child_root_pass_sqs->content_to_target_transform.Translate(8, 0);
755 child_root_pass_sqs->is_clipped = true; 754 child_root_pass_sqs->is_clipped = true;
756 child_root_pass_sqs->clip_rect = gfx::Rect(0, 0, 5, 5); 755 child_root_pass_sqs->clip_rect = gfx::Rect(0, 0, 5, 5);
757 756
758 scoped_ptr<DelegatedFrameData> child_frame_data(new DelegatedFrameData); 757 scoped_ptr<DelegatedFrameData> child_frame_data(new DelegatedFrameData);
759 child_pass_list.swap(child_frame_data->render_pass_list); 758 child_pass_list.swap(child_frame_data->render_pass_list);
760 759
761 scoped_ptr<CompositorFrame> child_frame(new CompositorFrame); 760 scoped_ptr<CompositorFrame> child_frame(new CompositorFrame);
762 child_frame->delegated_frame_data = child_frame_data.Pass(); 761 child_frame->delegated_frame_data = child_frame_data.Pass();
763 762
764 factory_.SubmitFrame(child_surface_id, child_frame.Pass(), base::Closure()); 763 factory_.SubmitFrame(child_surface_id, child_frame.Pass(), base::Closure());
765 764
766 test::Quad root_quads[] = {test::Quad::SolidColorQuad(1), 765 test::Quad root_quads[] = {test::Quad::SolidColorQuad(1),
767 test::Quad::SurfaceQuad(child_surface_id)}; 766 test::Quad::SurfaceQuad(child_surface_id)};
768 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; 767 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))};
769 768
770 RenderPassList root_pass_list; 769 RenderPassList root_pass_list;
771 AddPasses(&root_pass_list, 770 AddPasses(&root_pass_list,
772 gfx::Rect(SurfaceSize()), 771 gfx::Rect(SurfaceSize()),
773 root_passes, 772 root_passes,
774 arraysize(root_passes)); 773 arraysize(root_passes));
775 774
776 root_pass_list.at(0) 775 root_pass_list.at(0)
777 ->shared_quad_state_list[0] 776 ->shared_quad_state_list.front()
778 ->content_to_target_transform.Translate(0, 7); 777 ->content_to_target_transform.Translate(0, 7);
779 root_pass_list.at(0) 778 root_pass_list.at(0)
780 ->shared_quad_state_list[1] 779 ->shared_quad_state_list.ElementAt(1)
781 ->content_to_target_transform.Translate(0, 10); 780 ->content_to_target_transform.Translate(0, 10);
782 781
783 scoped_ptr<DelegatedFrameData> root_frame_data(new DelegatedFrameData); 782 scoped_ptr<DelegatedFrameData> root_frame_data(new DelegatedFrameData);
784 root_pass_list.swap(root_frame_data->render_pass_list); 783 root_pass_list.swap(root_frame_data->render_pass_list);
785 784
786 scoped_ptr<CompositorFrame> root_frame(new CompositorFrame); 785 scoped_ptr<CompositorFrame> root_frame(new CompositorFrame);
787 root_frame->delegated_frame_data = root_frame_data.Pass(); 786 root_frame->delegated_frame_data = root_frame_data.Pass();
788 787
789 factory_.SubmitFrame(root_surface_id_, root_frame.Pass(), base::Closure()); 788 factory_.SubmitFrame(root_surface_id_, root_frame.Pass(), base::Closure());
790 789
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
831 gfx::Transform expected_root_pass_quad_transforms[2]; 830 gfx::Transform expected_root_pass_quad_transforms[2];
832 // The first quad in the root pass is the solid color quad from the original 831 // The first quad in the root pass is the solid color quad from the original
833 // root surface. Its transform should be unaffected by the aggregation and 832 // root surface. Its transform should be unaffected by the aggregation and
834 // still be +7 in the y direction. 833 // still be +7 in the y direction.
835 expected_root_pass_quad_transforms[0].Translate(0, 7); 834 expected_root_pass_quad_transforms[0].Translate(0, 7);
836 // The second quad in the root pass is aggregated from the child surface so 835 // The second quad in the root pass is aggregated from the child surface so
837 // its transform should be the combination of its original translation (0, 10) 836 // its transform should be the combination of its original translation (0, 10)
838 // and the child surface draw quad's translation (8, 0). 837 // and the child surface draw quad's translation (8, 0).
839 expected_root_pass_quad_transforms[1].Translate(8, 10); 838 expected_root_pass_quad_transforms[1].Translate(8, 10);
840 839
841 size_t i = 0;
842 for (QuadList::Iterator iter = aggregated_pass_list[1]->quad_list.begin(); 840 for (QuadList::Iterator iter = aggregated_pass_list[1]->quad_list.begin();
843 iter != aggregated_pass_list[1]->quad_list.end(); 841 iter != aggregated_pass_list[1]->quad_list.end();
844 ++iter) { 842 ++iter) {
845 EXPECT_EQ(expected_root_pass_quad_transforms[i].ToString(), 843 EXPECT_EQ(expected_root_pass_quad_transforms[iter.index()].ToString(),
846 iter->quadTransform().ToString()) 844 iter->quadTransform().ToString())
847 << i; 845 << iter.index();
848 i++;
849 } 846 }
850 847
851 EXPECT_EQ(true, 848 EXPECT_TRUE(
852 aggregated_pass_list[1]->shared_quad_state_list[1]->is_clipped); 849 aggregated_pass_list[1]->shared_quad_state_list.ElementAt(1)->is_clipped);
853 850
854 // The second quad in the root pass is aggregated from the child, so its 851 // The second quad in the root pass is aggregated from the child, so its
855 // clip rect must be transformed by the child's translation. 852 // clip rect must be transformed by the child's translation.
856 EXPECT_EQ( 853 EXPECT_EQ(gfx::Rect(0, 10, 5, 5).ToString(),
857 gfx::Rect(0, 10, 5, 5).ToString(), 854 aggregated_pass_list[1]
858 aggregated_pass_list[1]->shared_quad_state_list[1]->clip_rect.ToString()); 855 ->shared_quad_state_list.ElementAt(1)
856 ->clip_rect.ToString());
859 857
860 factory_.Destroy(child_surface_id); 858 factory_.Destroy(child_surface_id);
861 } 859 }
862 860
863 // Tests that damage rects are aggregated correctly when surfaces change. 861 // Tests that damage rects are aggregated correctly when surfaces change.
864 TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateDamageRect) { 862 TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateDamageRect) {
865 SurfaceId child_surface_id = allocator_.GenerateId(); 863 SurfaceId child_surface_id = allocator_.GenerateId();
866 factory_.Create(child_surface_id, SurfaceSize()); 864 factory_.Create(child_surface_id, SurfaceSize());
867 RenderPassId child_pass_id = RenderPassId(1, 1); 865 RenderPassId child_pass_id = RenderPassId(1, 1);
868 test::Quad child_quads[] = {test::Quad::RenderPassQuad(child_pass_id)}; 866 test::Quad child_quads[] = {test::Quad::RenderPassQuad(child_pass_id)};
869 test::Pass child_passes[] = { 867 test::Pass child_passes[] = {
870 test::Pass(child_quads, arraysize(child_quads), child_pass_id)}; 868 test::Pass(child_quads, arraysize(child_quads), child_pass_id)};
871 869
872 RenderPassList child_pass_list; 870 RenderPassList child_pass_list;
873 AddPasses(&child_pass_list, 871 AddPasses(&child_pass_list,
874 gfx::Rect(SurfaceSize()), 872 gfx::Rect(SurfaceSize()),
875 child_passes, 873 child_passes,
876 arraysize(child_passes)); 874 arraysize(child_passes));
877 875
878 RenderPass* child_root_pass = child_pass_list.at(0u); 876 RenderPass* child_root_pass = child_pass_list.at(0u);
879 SharedQuadState* child_root_pass_sqs = 877 SharedQuadState* child_root_pass_sqs =
880 child_root_pass->shared_quad_state_list[0]; 878 child_root_pass->shared_quad_state_list.front();
881 child_root_pass_sqs->content_to_target_transform.Translate(8, 0); 879 child_root_pass_sqs->content_to_target_transform.Translate(8, 0);
882 880
883 scoped_ptr<DelegatedFrameData> child_frame_data(new DelegatedFrameData); 881 scoped_ptr<DelegatedFrameData> child_frame_data(new DelegatedFrameData);
884 child_pass_list.swap(child_frame_data->render_pass_list); 882 child_pass_list.swap(child_frame_data->render_pass_list);
885 883
886 scoped_ptr<CompositorFrame> child_frame(new CompositorFrame); 884 scoped_ptr<CompositorFrame> child_frame(new CompositorFrame);
887 child_frame->delegated_frame_data = child_frame_data.Pass(); 885 child_frame->delegated_frame_data = child_frame_data.Pass();
888 886
889 factory_.SubmitFrame(child_surface_id, child_frame.Pass(), base::Closure()); 887 factory_.SubmitFrame(child_surface_id, child_frame.Pass(), base::Closure());
890 888
891 test::Quad root_quads[] = {test::Quad::SurfaceQuad(child_surface_id)}; 889 test::Quad root_quads[] = {test::Quad::SurfaceQuad(child_surface_id)};
892 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; 890 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))};
893 891
894 RenderPassList root_pass_list; 892 RenderPassList root_pass_list;
895 AddPasses(&root_pass_list, 893 AddPasses(&root_pass_list,
896 gfx::Rect(SurfaceSize()), 894 gfx::Rect(SurfaceSize()),
897 root_passes, 895 root_passes,
898 arraysize(root_passes)); 896 arraysize(root_passes));
899 897
900 root_pass_list.at(0) 898 root_pass_list.at(0)
901 ->shared_quad_state_list[0] 899 ->shared_quad_state_list.front()
902 ->content_to_target_transform.Translate(0, 10); 900 ->content_to_target_transform.Translate(0, 10);
903 root_pass_list.at(0)->damage_rect = gfx::Rect(5, 5, 10, 10); 901 root_pass_list.at(0)->damage_rect = gfx::Rect(5, 5, 10, 10);
904 902
905 scoped_ptr<DelegatedFrameData> root_frame_data(new DelegatedFrameData); 903 scoped_ptr<DelegatedFrameData> root_frame_data(new DelegatedFrameData);
906 root_pass_list.swap(root_frame_data->render_pass_list); 904 root_pass_list.swap(root_frame_data->render_pass_list);
907 905
908 scoped_ptr<CompositorFrame> root_frame(new CompositorFrame); 906 scoped_ptr<CompositorFrame> root_frame(new CompositorFrame);
909 root_frame->delegated_frame_data = root_frame_data.Pass(); 907 root_frame->delegated_frame_data = root_frame_data.Pass();
910 908
911 factory_.SubmitFrame(root_surface_id_, root_frame.Pass(), base::Closure()); 909 factory_.SubmitFrame(root_surface_id_, root_frame.Pass(), base::Closure());
(...skipping 15 matching lines...) Expand all
927 aggregated_pass_list[0]->damage_rect.Contains(gfx::Rect(SurfaceSize()))); 925 aggregated_pass_list[0]->damage_rect.Contains(gfx::Rect(SurfaceSize())));
928 926
929 { 927 {
930 AddPasses(&child_pass_list, 928 AddPasses(&child_pass_list,
931 gfx::Rect(SurfaceSize()), 929 gfx::Rect(SurfaceSize()),
932 child_passes, 930 child_passes,
933 arraysize(child_passes)); 931 arraysize(child_passes));
934 932
935 RenderPass* child_root_pass = child_pass_list.at(0u); 933 RenderPass* child_root_pass = child_pass_list.at(0u);
936 SharedQuadState* child_root_pass_sqs = 934 SharedQuadState* child_root_pass_sqs =
937 child_root_pass->shared_quad_state_list[0]; 935 child_root_pass->shared_quad_state_list.front();
938 child_root_pass_sqs->content_to_target_transform.Translate(8, 0); 936 child_root_pass_sqs->content_to_target_transform.Translate(8, 0);
939 child_root_pass->damage_rect = gfx::Rect(10, 10, 10, 10); 937 child_root_pass->damage_rect = gfx::Rect(10, 10, 10, 10);
940 938
941 scoped_ptr<DelegatedFrameData> child_frame_data(new DelegatedFrameData); 939 scoped_ptr<DelegatedFrameData> child_frame_data(new DelegatedFrameData);
942 child_pass_list.swap(child_frame_data->render_pass_list); 940 child_pass_list.swap(child_frame_data->render_pass_list);
943 941
944 scoped_ptr<CompositorFrame> child_frame(new CompositorFrame); 942 scoped_ptr<CompositorFrame> child_frame(new CompositorFrame);
945 child_frame->delegated_frame_data = child_frame_data.Pass(); 943 child_frame->delegated_frame_data = child_frame_data.Pass();
946 944
947 factory_.SubmitFrame(child_surface_id, child_frame.Pass(), base::Closure()); 945 factory_.SubmitFrame(child_surface_id, child_frame.Pass(), base::Closure());
(...skipping 18 matching lines...) Expand all
966 } 964 }
967 965
968 { 966 {
969 RenderPassList root_pass_list; 967 RenderPassList root_pass_list;
970 AddPasses(&root_pass_list, 968 AddPasses(&root_pass_list,
971 gfx::Rect(SurfaceSize()), 969 gfx::Rect(SurfaceSize()),
972 root_passes, 970 root_passes,
973 arraysize(root_passes)); 971 arraysize(root_passes));
974 972
975 root_pass_list.at(0) 973 root_pass_list.at(0)
976 ->shared_quad_state_list[0] 974 ->shared_quad_state_list.front()
977 ->content_to_target_transform.Translate(0, 10); 975 ->content_to_target_transform.Translate(0, 10);
978 root_pass_list.at(0)->damage_rect = gfx::Rect(0, 0, 1, 1); 976 root_pass_list.at(0)->damage_rect = gfx::Rect(0, 0, 1, 1);
979 977
980 scoped_ptr<DelegatedFrameData> root_frame_data(new DelegatedFrameData); 978 scoped_ptr<DelegatedFrameData> root_frame_data(new DelegatedFrameData);
981 root_pass_list.swap(root_frame_data->render_pass_list); 979 root_pass_list.swap(root_frame_data->render_pass_list);
982 980
983 scoped_ptr<CompositorFrame> root_frame(new CompositorFrame); 981 scoped_ptr<CompositorFrame> root_frame(new CompositorFrame);
984 root_frame->delegated_frame_data = root_frame_data.Pass(); 982 root_frame->delegated_frame_data = root_frame_data.Pass();
985 983
986 factory_.SubmitFrame(root_surface_id_, root_frame.Pass(), base::Closure()); 984 factory_.SubmitFrame(root_surface_id_, root_frame.Pass(), base::Closure());
987 } 985 }
988 986
989 { 987 {
990 RenderPassList root_pass_list; 988 RenderPassList root_pass_list;
991 AddPasses(&root_pass_list, 989 AddPasses(&root_pass_list,
992 gfx::Rect(SurfaceSize()), 990 gfx::Rect(SurfaceSize()),
993 root_passes, 991 root_passes,
994 arraysize(root_passes)); 992 arraysize(root_passes));
995 993
996 root_pass_list.at(0) 994 root_pass_list.at(0)
997 ->shared_quad_state_list[0] 995 ->shared_quad_state_list.front()
998 ->content_to_target_transform.Translate(0, 10); 996 ->content_to_target_transform.Translate(0, 10);
999 root_pass_list.at(0)->damage_rect = gfx::Rect(1, 1, 1, 1); 997 root_pass_list.at(0)->damage_rect = gfx::Rect(1, 1, 1, 1);
1000 998
1001 scoped_ptr<DelegatedFrameData> root_frame_data(new DelegatedFrameData); 999 scoped_ptr<DelegatedFrameData> root_frame_data(new DelegatedFrameData);
1002 root_pass_list.swap(root_frame_data->render_pass_list); 1000 root_pass_list.swap(root_frame_data->render_pass_list);
1003 1001
1004 scoped_ptr<CompositorFrame> root_frame(new CompositorFrame); 1002 scoped_ptr<CompositorFrame> root_frame(new CompositorFrame);
1005 root_frame->delegated_frame_data = root_frame_data.Pass(); 1003 root_frame->delegated_frame_data = root_frame_data.Pass();
1006 1004
1007 factory_.SubmitFrame(root_surface_id_, root_frame.Pass(), base::Closure()); 1005 factory_.SubmitFrame(root_surface_id_, root_frame.Pass(), base::Closure());
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
1146 returned_ids[i] = client.returned_resources()[i].id; 1144 returned_ids[i] = client.returned_resources()[i].id;
1147 } 1145 }
1148 EXPECT_THAT(returned_ids, 1146 EXPECT_THAT(returned_ids,
1149 testing::WhenSorted(testing::ElementsAreArray(ids))); 1147 testing::WhenSorted(testing::ElementsAreArray(ids)));
1150 factory.Destroy(surface_id); 1148 factory.Destroy(surface_id);
1151 } 1149 }
1152 1150
1153 } // namespace 1151 } // namespace
1154 } // namespace cc 1152 } // namespace cc
1155 1153
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698