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 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
245 aggregator_.previous_contained_surfaces().size()); | 245 aggregator_.previous_contained_surfaces().size()); |
246 for (size_t i = 0; i < arraysize(surface_ids); i++) { | 246 for (size_t i = 0; i < arraysize(surface_ids); i++) { |
247 EXPECT_TRUE( | 247 EXPECT_TRUE( |
248 aggregator_.previous_contained_surfaces().find(surface_ids[i]) != | 248 aggregator_.previous_contained_surfaces().find(surface_ids[i]) != |
249 aggregator_.previous_contained_surfaces().end()); | 249 aggregator_.previous_contained_surfaces().end()); |
250 } | 250 } |
251 | 251 |
252 factory_.Destroy(embedded_surface_id); | 252 factory_.Destroy(embedded_surface_id); |
253 } | 253 } |
254 | 254 |
| 255 // Root surface may contain copy requests. |
| 256 TEST_F(SurfaceAggregatorValidSurfaceTest, RootCopyRequest) { |
| 257 SurfaceId embedded_surface_id = allocator_.GenerateId(); |
| 258 factory_.Create(embedded_surface_id, SurfaceSize()); |
| 259 |
| 260 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)}; |
| 261 test::Pass embedded_passes[] = { |
| 262 test::Pass(embedded_quads, arraysize(embedded_quads))}; |
| 263 |
| 264 SubmitFrame(embedded_passes, arraysize(embedded_passes), embedded_surface_id); |
| 265 scoped_ptr<CopyOutputRequest> copy_request( |
| 266 CopyOutputRequest::CreateEmptyRequest()); |
| 267 CopyOutputRequest* copy_request_ptr = copy_request.get(); |
| 268 scoped_ptr<CopyOutputRequest> copy_request2( |
| 269 CopyOutputRequest::CreateEmptyRequest()); |
| 270 CopyOutputRequest* copy_request2_ptr = copy_request2.get(); |
| 271 |
| 272 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), |
| 273 test::Quad::SurfaceQuad(embedded_surface_id), |
| 274 test::Quad::SolidColorQuad(SK_ColorBLACK)}; |
| 275 test::Quad root_quads2[] = {test::Quad::SolidColorQuad(SK_ColorRED)}; |
| 276 test::Pass root_passes[] = { |
| 277 test::Pass(root_quads, arraysize(root_quads), RenderPassId(1, 1)), |
| 278 test::Pass(root_quads2, arraysize(root_quads2), RenderPassId(1, 2))}; |
| 279 { |
| 280 RenderPassList pass_list; |
| 281 AddPasses(&pass_list, |
| 282 gfx::Rect(SurfaceSize()), |
| 283 root_passes, |
| 284 arraysize(root_passes)); |
| 285 pass_list[0]->copy_requests.push_back(copy_request.Pass()); |
| 286 pass_list[1]->copy_requests.push_back(copy_request2.Pass()); |
| 287 |
| 288 scoped_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); |
| 289 pass_list.swap(frame_data->render_pass_list); |
| 290 |
| 291 scoped_ptr<CompositorFrame> frame(new CompositorFrame); |
| 292 frame->delegated_frame_data = frame_data.Pass(); |
| 293 |
| 294 factory_.SubmitFrame(root_surface_id_, frame.Pass(), base::Closure()); |
| 295 } |
| 296 |
| 297 scoped_ptr<CompositorFrame> aggregated_frame = |
| 298 aggregator_.Aggregate(root_surface_id_); |
| 299 |
| 300 ASSERT_TRUE(aggregated_frame); |
| 301 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
| 302 |
| 303 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); |
| 304 |
| 305 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), |
| 306 test::Quad::SolidColorQuad(SK_ColorGREEN), |
| 307 test::Quad::SolidColorQuad(SK_ColorBLACK)}; |
| 308 test::Pass expected_passes[] = { |
| 309 test::Pass(expected_quads, arraysize(expected_quads)), |
| 310 test::Pass(root_quads2, arraysize(root_quads2))}; |
| 311 TestPassesMatchExpectations(expected_passes, |
| 312 arraysize(expected_passes), |
| 313 &frame_data->render_pass_list); |
| 314 ASSERT_EQ(2u, frame_data->render_pass_list.size()); |
| 315 ASSERT_EQ(1u, frame_data->render_pass_list[0]->copy_requests.size()); |
| 316 DCHECK_EQ(copy_request_ptr, |
| 317 frame_data->render_pass_list[0]->copy_requests[0]); |
| 318 ASSERT_EQ(1u, frame_data->render_pass_list[1]->copy_requests.size()); |
| 319 DCHECK_EQ(copy_request2_ptr, |
| 320 frame_data->render_pass_list[1]->copy_requests[0]); |
| 321 |
| 322 SurfaceId surface_ids[] = {root_surface_id_, embedded_surface_id}; |
| 323 EXPECT_EQ(arraysize(surface_ids), |
| 324 aggregator_.previous_contained_surfaces().size()); |
| 325 for (size_t i = 0; i < arraysize(surface_ids); i++) { |
| 326 EXPECT_TRUE( |
| 327 aggregator_.previous_contained_surfaces().find(surface_ids[i]) != |
| 328 aggregator_.previous_contained_surfaces().end()); |
| 329 } |
| 330 |
| 331 // Ensure copy requests have been removed from root surface. |
| 332 const CompositorFrame* original_frame = |
| 333 manager_.GetSurfaceForId(root_surface_id_)->GetEligibleFrame(); |
| 334 RenderPassList& original_pass_list = |
| 335 original_frame->delegated_frame_data->render_pass_list; |
| 336 ASSERT_EQ(2u, original_pass_list.size()); |
| 337 DCHECK(original_pass_list[0]->copy_requests.empty()); |
| 338 DCHECK(original_pass_list[1]->copy_requests.empty()); |
| 339 |
| 340 factory_.Destroy(embedded_surface_id); |
| 341 } |
| 342 |
255 // This tests referencing a surface that has multiple render passes. | 343 // This tests referencing a surface that has multiple render passes. |
256 TEST_F(SurfaceAggregatorValidSurfaceTest, MultiPassSurfaceReference) { | 344 TEST_F(SurfaceAggregatorValidSurfaceTest, MultiPassSurfaceReference) { |
257 SurfaceId embedded_surface_id = allocator_.GenerateId(); | 345 SurfaceId embedded_surface_id = allocator_.GenerateId(); |
258 factory_.Create(embedded_surface_id, SurfaceSize()); | 346 factory_.Create(embedded_surface_id, SurfaceSize()); |
259 | 347 |
260 RenderPassId pass_ids[] = {RenderPassId(1, 1), RenderPassId(1, 2), | 348 RenderPassId pass_ids[] = {RenderPassId(1, 1), RenderPassId(1, 2), |
261 RenderPassId(1, 3)}; | 349 RenderPassId(1, 3)}; |
262 | 350 |
263 test::Quad embedded_quads[][2] = { | 351 test::Quad embedded_quads[][2] = { |
264 {test::Quad::SolidColorQuad(1), test::Quad::SolidColorQuad(2)}, | 352 {test::Quad::SolidColorQuad(1), test::Quad::SolidColorQuad(2)}, |
(...skipping 880 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1145 returned_ids[i] = client.returned_resources()[i].id; | 1233 returned_ids[i] = client.returned_resources()[i].id; |
1146 } | 1234 } |
1147 EXPECT_THAT(returned_ids, | 1235 EXPECT_THAT(returned_ids, |
1148 testing::WhenSorted(testing::ElementsAreArray(ids))); | 1236 testing::WhenSorted(testing::ElementsAreArray(ids))); |
1149 factory.Destroy(surface_id); | 1237 factory.Destroy(surface_id); |
1150 } | 1238 } |
1151 | 1239 |
1152 } // namespace | 1240 } // namespace |
1153 } // namespace cc | 1241 } // namespace cc |
1154 | 1242 |
OLD | NEW |