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/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 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
189 test::Quad::SolidColorQuad(SK_ColorBLACK)}; | 189 test::Quad::SolidColorQuad(SK_ColorBLACK)}; |
190 test::Pass expected_passes[] = { | 190 test::Pass expected_passes[] = { |
191 test::Pass(expected_quads, arraysize(expected_quads))}; | 191 test::Pass(expected_quads, arraysize(expected_quads))}; |
192 SurfaceId ids[] = {root_surface_id_, embedded_surface_id}; | 192 SurfaceId ids[] = {root_surface_id_, embedded_surface_id}; |
193 AggregateAndVerify( | 193 AggregateAndVerify( |
194 expected_passes, arraysize(expected_passes), ids, arraysize(ids)); | 194 expected_passes, arraysize(expected_passes), ids, arraysize(ids)); |
195 | 195 |
196 factory_.Destroy(embedded_surface_id); | 196 factory_.Destroy(embedded_surface_id); |
197 } | 197 } |
198 | 198 |
| 199 TEST_F(SurfaceAggregatorValidSurfaceTest, CopyRequest) { |
| 200 SurfaceId embedded_surface_id = allocator_.GenerateId(); |
| 201 factory_.Create(embedded_surface_id, SurfaceSize()); |
| 202 |
| 203 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)}; |
| 204 test::Pass embedded_passes[] = { |
| 205 test::Pass(embedded_quads, arraysize(embedded_quads))}; |
| 206 |
| 207 SubmitFrame(embedded_passes, arraysize(embedded_passes), embedded_surface_id); |
| 208 scoped_ptr<CopyOutputRequest> copy_request( |
| 209 CopyOutputRequest::CreateEmptyRequest()); |
| 210 CopyOutputRequest* copy_request_ptr = copy_request.get(); |
| 211 factory_.RequestCopyOfSurface(embedded_surface_id, copy_request.Pass()); |
| 212 |
| 213 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), |
| 214 test::Quad::SurfaceQuad(embedded_surface_id), |
| 215 test::Quad::SolidColorQuad(SK_ColorBLACK)}; |
| 216 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; |
| 217 |
| 218 SubmitFrame(root_passes, arraysize(root_passes), root_surface_id_); |
| 219 |
| 220 scoped_ptr<CompositorFrame> aggregated_frame = |
| 221 aggregator_.Aggregate(root_surface_id_); |
| 222 |
| 223 ASSERT_TRUE(aggregated_frame); |
| 224 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
| 225 |
| 226 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); |
| 227 |
| 228 test::Quad expected_quads[] = { |
| 229 test::Quad::SolidColorQuad(SK_ColorWHITE), |
| 230 test::Quad::RenderPassQuad(frame_data->render_pass_list[0]->id), |
| 231 test::Quad::SolidColorQuad(SK_ColorBLACK)}; |
| 232 test::Pass expected_passes[] = { |
| 233 test::Pass(embedded_quads, arraysize(embedded_quads)), |
| 234 test::Pass(expected_quads, arraysize(expected_quads))}; |
| 235 TestPassesMatchExpectations(expected_passes, |
| 236 arraysize(expected_passes), |
| 237 &frame_data->render_pass_list); |
| 238 ASSERT_EQ(2u, frame_data->render_pass_list.size()); |
| 239 ASSERT_EQ(1u, frame_data->render_pass_list[0]->copy_requests.size()); |
| 240 DCHECK_EQ(copy_request_ptr, |
| 241 frame_data->render_pass_list[0]->copy_requests[0]); |
| 242 |
| 243 SurfaceId surface_ids[] = {root_surface_id_, embedded_surface_id}; |
| 244 EXPECT_EQ(arraysize(surface_ids), |
| 245 aggregator_.previous_contained_surfaces().size()); |
| 246 for (size_t i = 0; i < arraysize(surface_ids); i++) { |
| 247 EXPECT_TRUE( |
| 248 aggregator_.previous_contained_surfaces().find(surface_ids[i]) != |
| 249 aggregator_.previous_contained_surfaces().end()); |
| 250 } |
| 251 |
| 252 factory_.Destroy(embedded_surface_id); |
| 253 } |
| 254 |
199 // This tests referencing a surface that has multiple render passes. | 255 // This tests referencing a surface that has multiple render passes. |
200 TEST_F(SurfaceAggregatorValidSurfaceTest, MultiPassSurfaceReference) { | 256 TEST_F(SurfaceAggregatorValidSurfaceTest, MultiPassSurfaceReference) { |
201 SurfaceId embedded_surface_id = allocator_.GenerateId(); | 257 SurfaceId embedded_surface_id = allocator_.GenerateId(); |
202 factory_.Create(embedded_surface_id, SurfaceSize()); | 258 factory_.Create(embedded_surface_id, SurfaceSize()); |
203 | 259 |
204 RenderPassId pass_ids[] = {RenderPassId(1, 1), RenderPassId(1, 2), | 260 RenderPassId pass_ids[] = {RenderPassId(1, 1), RenderPassId(1, 2), |
205 RenderPassId(1, 3)}; | 261 RenderPassId(1, 3)}; |
206 | 262 |
207 test::Quad embedded_quads[][2] = { | 263 test::Quad embedded_quads[][2] = { |
208 {test::Quad::SolidColorQuad(1), test::Quad::SolidColorQuad(2)}, | 264 {test::Quad::SolidColorQuad(1), test::Quad::SolidColorQuad(2)}, |
(...skipping 870 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1079 returned_ids[i] = client.returned_resources()[i].id; | 1135 returned_ids[i] = client.returned_resources()[i].id; |
1080 } | 1136 } |
1081 EXPECT_THAT(returned_ids, | 1137 EXPECT_THAT(returned_ids, |
1082 testing::WhenSorted(testing::ElementsAreArray(ids))); | 1138 testing::WhenSorted(testing::ElementsAreArray(ids))); |
1083 factory.Destroy(surface_id); | 1139 factory.Destroy(surface_id); |
1084 } | 1140 } |
1085 | 1141 |
1086 } // namespace | 1142 } // namespace |
1087 } // namespace cc | 1143 } // namespace cc |
1088 | 1144 |
OLD | NEW |