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