OLD | NEW |
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 1089 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1100 kHandlesFrameSinkIdInvalidation, kNeedsSyncPoints); | 1100 kHandlesFrameSinkIdInvalidation, kNeedsSyncPoints); |
1101 std::unique_ptr<CompositorFrameSinkSupport> child_two_support = | 1101 std::unique_ptr<CompositorFrameSinkSupport> child_two_support = |
1102 CompositorFrameSinkSupport::Create( | 1102 CompositorFrameSinkSupport::Create( |
1103 nullptr, &manager_, kArbitraryFrameSinkId3, kChildIsRoot, | 1103 nullptr, &manager_, kArbitraryFrameSinkId3, kChildIsRoot, |
1104 kHandlesFrameSinkIdInvalidation, kNeedsSyncPoints); | 1104 kHandlesFrameSinkIdInvalidation, kNeedsSyncPoints); |
1105 int pass_id = 1; | 1105 int pass_id = 1; |
1106 LocalSurfaceId grandchild_local_surface_id = allocator_.GenerateId(); | 1106 LocalSurfaceId grandchild_local_surface_id = allocator_.GenerateId(); |
1107 SurfaceId grandchild_surface_id(grandchild_support->frame_sink_id(), | 1107 SurfaceId grandchild_surface_id(grandchild_support->frame_sink_id(), |
1108 grandchild_local_surface_id); | 1108 grandchild_local_surface_id); |
1109 | 1109 |
1110 grandchild_support->SubmitCompositorFrame(grandchild_local_surface_id, | |
1111 test::MakeCompositorFrame()); | |
1112 std::unique_ptr<RenderPass> grandchild_pass = RenderPass::Create(); | 1110 std::unique_ptr<RenderPass> grandchild_pass = RenderPass::Create(); |
1113 gfx::Rect output_rect(SurfaceSize()); | 1111 gfx::Rect output_rect(SurfaceSize()); |
1114 gfx::Rect damage_rect(SurfaceSize()); | 1112 gfx::Rect damage_rect(SurfaceSize()); |
1115 gfx::Transform transform_to_root_target; | 1113 gfx::Transform transform_to_root_target; |
1116 grandchild_pass->SetNew(pass_id, output_rect, damage_rect, | 1114 grandchild_pass->SetNew(pass_id, output_rect, damage_rect, |
1117 transform_to_root_target); | 1115 transform_to_root_target); |
1118 AddSolidColorQuadWithBlendMode( | 1116 AddSolidColorQuadWithBlendMode( |
1119 SurfaceSize(), grandchild_pass.get(), blend_modes[2]); | 1117 SurfaceSize(), grandchild_pass.get(), blend_modes[2]); |
1120 QueuePassAsFrame(std::move(grandchild_pass), grandchild_local_surface_id, | 1118 QueuePassAsFrame(std::move(grandchild_pass), grandchild_local_surface_id, |
1121 grandchild_support.get()); | 1119 grandchild_support.get()); |
1122 | 1120 |
1123 LocalSurfaceId child_one_local_surface_id = allocator_.GenerateId(); | 1121 LocalSurfaceId child_one_local_surface_id = allocator_.GenerateId(); |
1124 SurfaceId child_one_surface_id(child_one_support->frame_sink_id(), | 1122 SurfaceId child_one_surface_id(child_one_support->frame_sink_id(), |
1125 child_one_local_surface_id); | 1123 child_one_local_surface_id); |
1126 child_one_support->SubmitCompositorFrame(child_one_local_surface_id, | |
1127 test::MakeCompositorFrame()); | |
1128 | 1124 |
1129 std::unique_ptr<RenderPass> child_one_pass = RenderPass::Create(); | 1125 std::unique_ptr<RenderPass> child_one_pass = RenderPass::Create(); |
1130 child_one_pass->SetNew(pass_id, output_rect, damage_rect, | 1126 child_one_pass->SetNew(pass_id, output_rect, damage_rect, |
1131 transform_to_root_target); | 1127 transform_to_root_target); |
1132 AddSolidColorQuadWithBlendMode( | 1128 AddSolidColorQuadWithBlendMode( |
1133 SurfaceSize(), child_one_pass.get(), blend_modes[1]); | 1129 SurfaceSize(), child_one_pass.get(), blend_modes[1]); |
1134 SurfaceDrawQuad* grandchild_surface_quad = | 1130 SurfaceDrawQuad* grandchild_surface_quad = |
1135 child_one_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); | 1131 child_one_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); |
1136 grandchild_surface_quad->SetNew( | 1132 grandchild_surface_quad->SetNew( |
1137 child_one_pass->shared_quad_state_list.back(), gfx::Rect(SurfaceSize()), | 1133 child_one_pass->shared_quad_state_list.back(), gfx::Rect(SurfaceSize()), |
1138 gfx::Rect(SurfaceSize()), grandchild_surface_id, | 1134 gfx::Rect(SurfaceSize()), grandchild_surface_id, |
1139 SurfaceDrawQuadType::PRIMARY, nullptr); | 1135 SurfaceDrawQuadType::PRIMARY, nullptr); |
1140 AddSolidColorQuadWithBlendMode( | 1136 AddSolidColorQuadWithBlendMode( |
1141 SurfaceSize(), child_one_pass.get(), blend_modes[3]); | 1137 SurfaceSize(), child_one_pass.get(), blend_modes[3]); |
1142 QueuePassAsFrame(std::move(child_one_pass), child_one_local_surface_id, | 1138 QueuePassAsFrame(std::move(child_one_pass), child_one_local_surface_id, |
1143 child_one_support.get()); | 1139 child_one_support.get()); |
1144 | 1140 |
1145 LocalSurfaceId child_two_local_surface_id = allocator_.GenerateId(); | 1141 LocalSurfaceId child_two_local_surface_id = allocator_.GenerateId(); |
1146 SurfaceId child_two_surface_id(child_two_support->frame_sink_id(), | 1142 SurfaceId child_two_surface_id(child_two_support->frame_sink_id(), |
1147 child_two_local_surface_id); | 1143 child_two_local_surface_id); |
1148 child_two_support->SubmitCompositorFrame(child_two_local_surface_id, | |
1149 test::MakeCompositorFrame()); | |
1150 | 1144 |
1151 std::unique_ptr<RenderPass> child_two_pass = RenderPass::Create(); | 1145 std::unique_ptr<RenderPass> child_two_pass = RenderPass::Create(); |
1152 child_two_pass->SetNew(pass_id, output_rect, damage_rect, | 1146 child_two_pass->SetNew(pass_id, output_rect, damage_rect, |
1153 transform_to_root_target); | 1147 transform_to_root_target); |
1154 AddSolidColorQuadWithBlendMode( | 1148 AddSolidColorQuadWithBlendMode( |
1155 SurfaceSize(), child_two_pass.get(), blend_modes[5]); | 1149 SurfaceSize(), child_two_pass.get(), blend_modes[5]); |
1156 QueuePassAsFrame(std::move(child_two_pass), child_two_local_surface_id, | 1150 QueuePassAsFrame(std::move(child_two_pass), child_two_local_surface_id, |
1157 child_two_support.get()); | 1151 child_two_support.get()); |
1158 | 1152 |
1159 std::unique_ptr<RenderPass> root_pass = RenderPass::Create(); | 1153 std::unique_ptr<RenderPass> root_pass = RenderPass::Create(); |
(...skipping 792 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1952 }; | 1946 }; |
1953 | 1947 |
1954 void SubmitCompositorFrameWithResources(ResourceId* resource_ids, | 1948 void SubmitCompositorFrameWithResources(ResourceId* resource_ids, |
1955 size_t num_resource_ids, | 1949 size_t num_resource_ids, |
1956 bool valid, | 1950 bool valid, |
1957 SurfaceId child_id, | 1951 SurfaceId child_id, |
1958 CompositorFrameSinkSupport* support, | 1952 CompositorFrameSinkSupport* support, |
1959 SurfaceId surface_id) { | 1953 SurfaceId surface_id) { |
1960 CompositorFrame frame = test::MakeEmptyCompositorFrame(); | 1954 CompositorFrame frame = test::MakeEmptyCompositorFrame(); |
1961 std::unique_ptr<RenderPass> pass = RenderPass::Create(); | 1955 std::unique_ptr<RenderPass> pass = RenderPass::Create(); |
1962 pass->id = 1; | 1956 pass->SetNew(1, gfx::Rect(0, 0, 20, 20), gfx::Rect(), gfx::Transform()); |
1963 SharedQuadState* sqs = pass->CreateAndAppendSharedQuadState(); | 1957 SharedQuadState* sqs = pass->CreateAndAppendSharedQuadState(); |
1964 sqs->opacity = 1.f; | 1958 sqs->opacity = 1.f; |
1965 if (child_id.is_valid()) { | 1959 if (child_id.is_valid()) { |
1966 SurfaceDrawQuad* surface_quad = | 1960 SurfaceDrawQuad* surface_quad = |
1967 pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); | 1961 pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); |
1968 surface_quad->SetNew(sqs, gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1), | 1962 surface_quad->SetNew(sqs, gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1), |
1969 child_id, SurfaceDrawQuadType::PRIMARY, nullptr); | 1963 child_id, SurfaceDrawQuadType::PRIMARY, nullptr); |
1970 } | 1964 } |
1971 | 1965 |
1972 for (size_t i = 0u; i < num_resource_ids; ++i) { | 1966 for (size_t i = 0u; i < num_resource_ids; ++i) { |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2034 | 2028 |
2035 TEST_F(SurfaceAggregatorWithResourcesTest, TakeInvalidResources) { | 2029 TEST_F(SurfaceAggregatorWithResourcesTest, TakeInvalidResources) { |
2036 FakeCompositorFrameSinkSupportClient client; | 2030 FakeCompositorFrameSinkSupportClient client; |
2037 std::unique_ptr<CompositorFrameSinkSupport> support = | 2031 std::unique_ptr<CompositorFrameSinkSupport> support = |
2038 CompositorFrameSinkSupport::Create( | 2032 CompositorFrameSinkSupport::Create( |
2039 &client, &manager_, kArbitraryRootFrameSinkId, kRootIsRoot, | 2033 &client, &manager_, kArbitraryRootFrameSinkId, kRootIsRoot, |
2040 kHandlesFrameSinkIdInvalidation, kNeedsSyncPoints); | 2034 kHandlesFrameSinkIdInvalidation, kNeedsSyncPoints); |
2041 LocalSurfaceId local_surface_id(7u, base::UnguessableToken::Create()); | 2035 LocalSurfaceId local_surface_id(7u, base::UnguessableToken::Create()); |
2042 SurfaceId surface_id(support->frame_sink_id(), local_surface_id); | 2036 SurfaceId surface_id(support->frame_sink_id(), local_surface_id); |
2043 | 2037 |
2044 CompositorFrame frame = test::MakeEmptyCompositorFrame(); | 2038 CompositorFrame frame = test::MakeCompositorFrame(); |
2045 std::unique_ptr<RenderPass> pass = RenderPass::Create(); | |
2046 pass->id = 1; | |
2047 TransferableResource resource; | 2039 TransferableResource resource; |
2048 resource.id = 11; | 2040 resource.id = 11; |
2049 // ResourceProvider is software but resource is not, so it should be | 2041 // ResourceProvider is software but resource is not, so it should be |
2050 // ignored. | 2042 // ignored. |
2051 resource.is_software = false; | 2043 resource.is_software = false; |
2052 frame.resource_list.push_back(resource); | 2044 frame.resource_list.push_back(resource); |
2053 frame.render_pass_list.push_back(std::move(pass)); | |
2054 support->SubmitCompositorFrame(local_surface_id, std::move(frame)); | 2045 support->SubmitCompositorFrame(local_surface_id, std::move(frame)); |
2055 | 2046 |
2056 CompositorFrame returned_frame = aggregator_->Aggregate(surface_id); | 2047 CompositorFrame returned_frame = aggregator_->Aggregate(surface_id); |
2057 | 2048 |
2058 // Nothing should be available to be returned yet. | 2049 // Nothing should be available to be returned yet. |
2059 EXPECT_TRUE(client.returned_resources().empty()); | 2050 EXPECT_TRUE(client.returned_resources().empty()); |
2060 | 2051 |
2061 SubmitCompositorFrameWithResources(NULL, 0, true, SurfaceId(), support.get(), | 2052 SubmitCompositorFrameWithResources(NULL, 0, true, SurfaceId(), support.get(), |
2062 surface_id); | 2053 surface_id); |
2063 ASSERT_EQ(1u, client.returned_resources().size()); | 2054 ASSERT_EQ(1u, client.returned_resources().size()); |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2195 support1.get(), surface1_id); | 2186 support1.get(), surface1_id); |
2196 | 2187 |
2197 CompositorFrame frame = aggregator_->Aggregate(surface1_id); | 2188 CompositorFrame frame = aggregator_->Aggregate(surface1_id); |
2198 | 2189 |
2199 RenderPass* render_pass = frame.render_pass_list.back().get(); | 2190 RenderPass* render_pass = frame.render_pass_list.back().get(); |
2200 | 2191 |
2201 EXPECT_EQ(DrawQuad::TEXTURE_CONTENT, render_pass->quad_list.back()->material); | 2192 EXPECT_EQ(DrawQuad::TEXTURE_CONTENT, render_pass->quad_list.back()->material); |
2202 | 2193 |
2203 { | 2194 { |
2204 std::unique_ptr<RenderPass> pass = RenderPass::Create(); | 2195 std::unique_ptr<RenderPass> pass = RenderPass::Create(); |
2205 pass->id = 1; | 2196 pass->SetNew(1, gfx::Rect(0, 0, 20, 20), gfx::Rect(), gfx::Transform()); |
2206 SharedQuadState* sqs = pass->CreateAndAppendSharedQuadState(); | 2197 SharedQuadState* sqs = pass->CreateAndAppendSharedQuadState(); |
2207 sqs->opacity = 1.f; | 2198 sqs->opacity = 1.f; |
2208 SurfaceDrawQuad* surface_quad = | 2199 SurfaceDrawQuad* surface_quad = |
2209 pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); | 2200 pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); |
2210 | 2201 |
2211 surface_quad->SetNew(sqs, gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1), | 2202 surface_quad->SetNew(sqs, gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1), |
2212 surface1_id, SurfaceDrawQuadType::PRIMARY, nullptr); | 2203 surface1_id, SurfaceDrawQuadType::PRIMARY, nullptr); |
2213 pass->copy_requests.push_back(CopyOutputRequest::CreateEmptyRequest()); | 2204 pass->copy_requests.push_back(CopyOutputRequest::CreateEmptyRequest()); |
2214 | 2205 |
2215 CompositorFrame frame = test::MakeEmptyCompositorFrame(); | 2206 CompositorFrame frame = test::MakeEmptyCompositorFrame(); |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2279 aggregated_frame = aggregator_.Aggregate(surface_id); | 2270 aggregated_frame = aggregator_.Aggregate(surface_id); |
2280 EXPECT_EQ(3u, aggregated_frame.render_pass_list.size()); | 2271 EXPECT_EQ(3u, aggregated_frame.render_pass_list.size()); |
2281 EXPECT_EQ(color_space1, aggregated_frame.render_pass_list[0]->color_space); | 2272 EXPECT_EQ(color_space1, aggregated_frame.render_pass_list[0]->color_space); |
2282 EXPECT_EQ(color_space1, aggregated_frame.render_pass_list[1]->color_space); | 2273 EXPECT_EQ(color_space1, aggregated_frame.render_pass_list[1]->color_space); |
2283 EXPECT_EQ(color_space3, aggregated_frame.render_pass_list[2]->color_space); | 2274 EXPECT_EQ(color_space3, aggregated_frame.render_pass_list[2]->color_space); |
2284 } | 2275 } |
2285 | 2276 |
2286 } // namespace | 2277 } // namespace |
2287 } // namespace cc | 2278 } // namespace cc |
2288 | 2279 |
OLD | NEW |