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 137 matching lines...) Loading... |
148 test::Quad quads[] = {test::Quad::SolidColorQuad(SK_ColorRED), | 148 test::Quad quads[] = {test::Quad::SolidColorQuad(SK_ColorRED), |
149 test::Quad::SolidColorQuad(SK_ColorBLUE)}; | 149 test::Quad::SolidColorQuad(SK_ColorBLUE)}; |
150 test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; | 150 test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; |
151 | 151 |
152 SubmitFrame(passes, arraysize(passes), root_surface_id_); | 152 SubmitFrame(passes, arraysize(passes), root_surface_id_); |
153 | 153 |
154 SurfaceId ids[] = {root_surface_id_}; | 154 SurfaceId ids[] = {root_surface_id_}; |
155 AggregateAndVerify(passes, arraysize(passes), ids, arraysize(ids)); | 155 AggregateAndVerify(passes, arraysize(passes), ids, arraysize(ids)); |
156 } | 156 } |
157 | 157 |
| 158 TEST_F(SurfaceAggregatorValidSurfaceTest, OpacityCopied) { |
| 159 SurfaceId embedded_surface_id = allocator_.GenerateId(); |
| 160 factory_.Create(embedded_surface_id, SurfaceSize()); |
| 161 |
| 162 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)}; |
| 163 test::Pass embedded_passes[] = { |
| 164 test::Pass(embedded_quads, arraysize(embedded_quads))}; |
| 165 |
| 166 SubmitFrame(embedded_passes, arraysize(embedded_passes), embedded_surface_id); |
| 167 |
| 168 test::Quad quads[] = {test::Quad::SurfaceQuad(embedded_surface_id, .5f)}; |
| 169 test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; |
| 170 |
| 171 SubmitFrame(passes, arraysize(passes), root_surface_id_); |
| 172 |
| 173 scoped_ptr<CompositorFrame> aggregated_frame = |
| 174 aggregator_.Aggregate(root_surface_id_); |
| 175 |
| 176 ASSERT_TRUE(aggregated_frame); |
| 177 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
| 178 |
| 179 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); |
| 180 |
| 181 RenderPassList& render_pass_list(frame_data->render_pass_list); |
| 182 ASSERT_EQ(1u, render_pass_list.size()); |
| 183 SharedQuadStateList& shared_quad_state_list( |
| 184 render_pass_list[0]->shared_quad_state_list); |
| 185 ASSERT_EQ(1u, shared_quad_state_list.size()); |
| 186 EXPECT_EQ(.5f, shared_quad_state_list.ElementAt(0)->opacity); |
| 187 |
| 188 factory_.Destroy(embedded_surface_id); |
| 189 } |
| 190 |
| 191 TEST_F(SurfaceAggregatorValidSurfaceTest, OpacityCombinedWithNesting) { |
| 192 SurfaceId surface_id1 = allocator_.GenerateId(); |
| 193 factory_.Create(surface_id1, SurfaceSize()); |
| 194 SurfaceId surface_id2 = allocator_.GenerateId(); |
| 195 factory_.Create(surface_id2, SurfaceSize()); |
| 196 |
| 197 // |surface_id1| is color quad. |
| 198 { |
| 199 test::Quad quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)}; |
| 200 test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; |
| 201 SubmitFrame(passes, arraysize(passes), surface_id1); |
| 202 } |
| 203 |
| 204 // |surface_id2| has a color quad and a surface quad using |surface_id1| at .5 |
| 205 // opacity. |
| 206 { |
| 207 test::Quad quads[] = {test::Quad::SolidColorQuad(SK_ColorBLUE), |
| 208 test::Quad::SurfaceQuad(surface_id1, .5f)}; |
| 209 test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; |
| 210 SubmitFrame(passes, arraysize(passes), surface_id2); |
| 211 } |
| 212 |
| 213 // Another frame with a surface referencing |surface_id2| @ .6 opacity. |
| 214 { |
| 215 test::Quad quads[] = {test::Quad::SurfaceQuad(surface_id2, .6f)}; |
| 216 test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; |
| 217 SubmitFrame(passes, arraysize(passes), root_surface_id_); |
| 218 } |
| 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 RenderPassList& render_pass_list(frame_data->render_pass_list); |
| 229 ASSERT_EQ(1u, render_pass_list.size()); |
| 230 SharedQuadStateList& shared_quad_state_list( |
| 231 render_pass_list[0]->shared_quad_state_list); |
| 232 ASSERT_EQ(2u, shared_quad_state_list.size()); |
| 233 EXPECT_EQ(.6f, shared_quad_state_list.ElementAt(0)->opacity); |
| 234 EXPECT_EQ(.3f, shared_quad_state_list.ElementAt(1)->opacity); |
| 235 |
| 236 factory_.Destroy(surface_id1); |
| 237 factory_.Destroy(surface_id2); |
| 238 } |
| 239 |
158 TEST_F(SurfaceAggregatorValidSurfaceTest, MultiPassSimpleFrame) { | 240 TEST_F(SurfaceAggregatorValidSurfaceTest, MultiPassSimpleFrame) { |
159 test::Quad quads[][2] = {{test::Quad::SolidColorQuad(SK_ColorWHITE), | 241 test::Quad quads[][2] = {{test::Quad::SolidColorQuad(SK_ColorWHITE), |
160 test::Quad::SolidColorQuad(SK_ColorLTGRAY)}, | 242 test::Quad::SolidColorQuad(SK_ColorLTGRAY)}, |
161 {test::Quad::SolidColorQuad(SK_ColorGRAY), | 243 {test::Quad::SolidColorQuad(SK_ColorGRAY), |
162 test::Quad::SolidColorQuad(SK_ColorDKGRAY)}}; | 244 test::Quad::SolidColorQuad(SK_ColorDKGRAY)}}; |
163 test::Pass passes[] = { | 245 test::Pass passes[] = { |
164 test::Pass(quads[0], arraysize(quads[0]), RenderPassId(1, 1)), | 246 test::Pass(quads[0], arraysize(quads[0]), RenderPassId(1, 1)), |
165 test::Pass(quads[1], arraysize(quads[1]), RenderPassId(1, 2))}; | 247 test::Pass(quads[1], arraysize(quads[1]), RenderPassId(1, 2))}; |
166 | 248 |
167 SubmitFrame(passes, arraysize(passes), root_surface_id_); | 249 SubmitFrame(passes, arraysize(passes), root_surface_id_); |
(...skipping 10 matching lines...) Loading... |
178 SurfaceId embedded_surface_id = allocator_.GenerateId(); | 260 SurfaceId embedded_surface_id = allocator_.GenerateId(); |
179 factory_.Create(embedded_surface_id, SurfaceSize()); | 261 factory_.Create(embedded_surface_id, SurfaceSize()); |
180 | 262 |
181 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)}; | 263 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)}; |
182 test::Pass embedded_passes[] = { | 264 test::Pass embedded_passes[] = { |
183 test::Pass(embedded_quads, arraysize(embedded_quads))}; | 265 test::Pass(embedded_quads, arraysize(embedded_quads))}; |
184 | 266 |
185 SubmitFrame(embedded_passes, arraysize(embedded_passes), embedded_surface_id); | 267 SubmitFrame(embedded_passes, arraysize(embedded_passes), embedded_surface_id); |
186 | 268 |
187 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), | 269 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), |
188 test::Quad::SurfaceQuad(embedded_surface_id), | 270 test::Quad::SurfaceQuad(embedded_surface_id, 1.f), |
189 test::Quad::SolidColorQuad(SK_ColorBLACK)}; | 271 test::Quad::SolidColorQuad(SK_ColorBLACK)}; |
190 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; | 272 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; |
191 | 273 |
192 SubmitFrame(root_passes, arraysize(root_passes), root_surface_id_); | 274 SubmitFrame(root_passes, arraysize(root_passes), root_surface_id_); |
193 | 275 |
194 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), | 276 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), |
195 test::Quad::SolidColorQuad(SK_ColorGREEN), | 277 test::Quad::SolidColorQuad(SK_ColorGREEN), |
196 test::Quad::SolidColorQuad(SK_ColorBLACK)}; | 278 test::Quad::SolidColorQuad(SK_ColorBLACK)}; |
197 test::Pass expected_passes[] = { | 279 test::Pass expected_passes[] = { |
198 test::Pass(expected_quads, arraysize(expected_quads))}; | 280 test::Pass(expected_quads, arraysize(expected_quads))}; |
(...skipping 12 matching lines...) Loading... |
211 test::Pass embedded_passes[] = { | 293 test::Pass embedded_passes[] = { |
212 test::Pass(embedded_quads, arraysize(embedded_quads))}; | 294 test::Pass(embedded_quads, arraysize(embedded_quads))}; |
213 | 295 |
214 SubmitFrame(embedded_passes, arraysize(embedded_passes), embedded_surface_id); | 296 SubmitFrame(embedded_passes, arraysize(embedded_passes), embedded_surface_id); |
215 scoped_ptr<CopyOutputRequest> copy_request( | 297 scoped_ptr<CopyOutputRequest> copy_request( |
216 CopyOutputRequest::CreateEmptyRequest()); | 298 CopyOutputRequest::CreateEmptyRequest()); |
217 CopyOutputRequest* copy_request_ptr = copy_request.get(); | 299 CopyOutputRequest* copy_request_ptr = copy_request.get(); |
218 factory_.RequestCopyOfSurface(embedded_surface_id, copy_request.Pass()); | 300 factory_.RequestCopyOfSurface(embedded_surface_id, copy_request.Pass()); |
219 | 301 |
220 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), | 302 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), |
221 test::Quad::SurfaceQuad(embedded_surface_id), | 303 test::Quad::SurfaceQuad(embedded_surface_id, 1.f), |
222 test::Quad::SolidColorQuad(SK_ColorBLACK)}; | 304 test::Quad::SolidColorQuad(SK_ColorBLACK)}; |
223 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; | 305 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; |
224 | 306 |
225 SubmitFrame(root_passes, arraysize(root_passes), root_surface_id_); | 307 SubmitFrame(root_passes, arraysize(root_passes), root_surface_id_); |
226 | 308 |
227 scoped_ptr<CompositorFrame> aggregated_frame = | 309 scoped_ptr<CompositorFrame> aggregated_frame = |
228 aggregator_.Aggregate(root_surface_id_); | 310 aggregator_.Aggregate(root_surface_id_); |
229 | 311 |
230 ASSERT_TRUE(aggregated_frame); | 312 ASSERT_TRUE(aggregated_frame); |
231 ASSERT_TRUE(aggregated_frame->delegated_frame_data); | 313 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
(...skipping 38 matching lines...) Loading... |
270 | 352 |
271 SubmitFrame(embedded_passes, arraysize(embedded_passes), embedded_surface_id); | 353 SubmitFrame(embedded_passes, arraysize(embedded_passes), embedded_surface_id); |
272 scoped_ptr<CopyOutputRequest> copy_request( | 354 scoped_ptr<CopyOutputRequest> copy_request( |
273 CopyOutputRequest::CreateEmptyRequest()); | 355 CopyOutputRequest::CreateEmptyRequest()); |
274 CopyOutputRequest* copy_request_ptr = copy_request.get(); | 356 CopyOutputRequest* copy_request_ptr = copy_request.get(); |
275 scoped_ptr<CopyOutputRequest> copy_request2( | 357 scoped_ptr<CopyOutputRequest> copy_request2( |
276 CopyOutputRequest::CreateEmptyRequest()); | 358 CopyOutputRequest::CreateEmptyRequest()); |
277 CopyOutputRequest* copy_request2_ptr = copy_request2.get(); | 359 CopyOutputRequest* copy_request2_ptr = copy_request2.get(); |
278 | 360 |
279 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), | 361 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), |
280 test::Quad::SurfaceQuad(embedded_surface_id), | 362 test::Quad::SurfaceQuad(embedded_surface_id, 1.f), |
281 test::Quad::SolidColorQuad(SK_ColorBLACK)}; | 363 test::Quad::SolidColorQuad(SK_ColorBLACK)}; |
282 test::Quad root_quads2[] = {test::Quad::SolidColorQuad(SK_ColorRED)}; | 364 test::Quad root_quads2[] = {test::Quad::SolidColorQuad(SK_ColorRED)}; |
283 test::Pass root_passes[] = { | 365 test::Pass root_passes[] = { |
284 test::Pass(root_quads, arraysize(root_quads), RenderPassId(1, 1)), | 366 test::Pass(root_quads, arraysize(root_quads), RenderPassId(1, 1)), |
285 test::Pass(root_quads2, arraysize(root_quads2), RenderPassId(1, 2))}; | 367 test::Pass(root_quads2, arraysize(root_quads2), RenderPassId(1, 2))}; |
286 { | 368 { |
287 RenderPassList pass_list; | 369 RenderPassList pass_list; |
288 AddPasses(&pass_list, | 370 AddPasses(&pass_list, |
289 gfx::Rect(SurfaceSize()), | 371 gfx::Rect(SurfaceSize()), |
290 root_passes, | 372 root_passes, |
(...skipping 70 matching lines...) Loading... |
361 {test::Quad::SolidColorQuad(4), test::Quad::RenderPassQuad(pass_ids[1])}}; | 443 {test::Quad::SolidColorQuad(4), test::Quad::RenderPassQuad(pass_ids[1])}}; |
362 test::Pass embedded_passes[] = { | 444 test::Pass embedded_passes[] = { |
363 test::Pass(embedded_quads[0], arraysize(embedded_quads[0]), pass_ids[0]), | 445 test::Pass(embedded_quads[0], arraysize(embedded_quads[0]), pass_ids[0]), |
364 test::Pass(embedded_quads[1], arraysize(embedded_quads[1]), pass_ids[1]), | 446 test::Pass(embedded_quads[1], arraysize(embedded_quads[1]), pass_ids[1]), |
365 test::Pass(embedded_quads[2], arraysize(embedded_quads[2]), pass_ids[2])}; | 447 test::Pass(embedded_quads[2], arraysize(embedded_quads[2]), pass_ids[2])}; |
366 | 448 |
367 SubmitFrame(embedded_passes, arraysize(embedded_passes), embedded_surface_id); | 449 SubmitFrame(embedded_passes, arraysize(embedded_passes), embedded_surface_id); |
368 | 450 |
369 test::Quad root_quads[][2] = { | 451 test::Quad root_quads[][2] = { |
370 {test::Quad::SolidColorQuad(5), test::Quad::SolidColorQuad(6)}, | 452 {test::Quad::SolidColorQuad(5), test::Quad::SolidColorQuad(6)}, |
371 {test::Quad::SurfaceQuad(embedded_surface_id), | 453 {test::Quad::SurfaceQuad(embedded_surface_id, 1.f), |
372 test::Quad::RenderPassQuad(pass_ids[0])}, | 454 test::Quad::RenderPassQuad(pass_ids[0])}, |
373 {test::Quad::SolidColorQuad(7), test::Quad::RenderPassQuad(pass_ids[1])}}; | 455 {test::Quad::SolidColorQuad(7), test::Quad::RenderPassQuad(pass_ids[1])}}; |
374 test::Pass root_passes[] = { | 456 test::Pass root_passes[] = { |
375 test::Pass(root_quads[0], arraysize(root_quads[0]), pass_ids[0]), | 457 test::Pass(root_quads[0], arraysize(root_quads[0]), pass_ids[0]), |
376 test::Pass(root_quads[1], arraysize(root_quads[1]), pass_ids[1]), | 458 test::Pass(root_quads[1], arraysize(root_quads[1]), pass_ids[1]), |
377 test::Pass(root_quads[2], arraysize(root_quads[2]), pass_ids[2])}; | 459 test::Pass(root_quads[2], arraysize(root_quads[2]), pass_ids[2])}; |
378 | 460 |
379 SubmitFrame(root_passes, arraysize(root_passes), root_surface_id_); | 461 SubmitFrame(root_passes, arraysize(root_passes), root_surface_id_); |
380 | 462 |
381 scoped_ptr<CompositorFrame> aggregated_frame = | 463 scoped_ptr<CompositorFrame> aggregated_frame = |
(...skipping 100 matching lines...) Loading... |
482 EXPECT_EQ(actual_pass_ids[3], | 564 EXPECT_EQ(actual_pass_ids[3], |
483 fifth_pass_render_pass_draw_quad->render_pass_id); | 565 fifth_pass_render_pass_draw_quad->render_pass_id); |
484 } | 566 } |
485 factory_.Destroy(embedded_surface_id); | 567 factory_.Destroy(embedded_surface_id); |
486 } | 568 } |
487 | 569 |
488 // Tests an invalid surface reference in a frame. The surface quad should just | 570 // Tests an invalid surface reference in a frame. The surface quad should just |
489 // be dropped. | 571 // be dropped. |
490 TEST_F(SurfaceAggregatorValidSurfaceTest, InvalidSurfaceReference) { | 572 TEST_F(SurfaceAggregatorValidSurfaceTest, InvalidSurfaceReference) { |
491 test::Quad quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN), | 573 test::Quad quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN), |
492 test::Quad::SurfaceQuad(InvalidSurfaceId()), | 574 test::Quad::SurfaceQuad(InvalidSurfaceId(), 1.f), |
493 test::Quad::SolidColorQuad(SK_ColorBLUE)}; | 575 test::Quad::SolidColorQuad(SK_ColorBLUE)}; |
494 test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; | 576 test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; |
495 | 577 |
496 SubmitFrame(passes, arraysize(passes), root_surface_id_); | 578 SubmitFrame(passes, arraysize(passes), root_surface_id_); |
497 | 579 |
498 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN), | 580 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN), |
499 test::Quad::SolidColorQuad(SK_ColorBLUE)}; | 581 test::Quad::SolidColorQuad(SK_ColorBLUE)}; |
500 test::Pass expected_passes[] = { | 582 test::Pass expected_passes[] = { |
501 test::Pass(expected_quads, arraysize(expected_quads))}; | 583 test::Pass(expected_quads, arraysize(expected_quads))}; |
502 SurfaceId ids[] = {root_surface_id_, InvalidSurfaceId()}; | 584 SurfaceId ids[] = {root_surface_id_, InvalidSurfaceId()}; |
503 AggregateAndVerify( | 585 AggregateAndVerify( |
504 expected_passes, arraysize(expected_passes), ids, arraysize(ids)); | 586 expected_passes, arraysize(expected_passes), ids, arraysize(ids)); |
505 } | 587 } |
506 | 588 |
507 // Tests a reference to a valid surface with no submitted frame. This quad | 589 // Tests a reference to a valid surface with no submitted frame. This quad |
508 // should also just be dropped. | 590 // should also just be dropped. |
509 TEST_F(SurfaceAggregatorValidSurfaceTest, ValidSurfaceReferenceWithNoFrame) { | 591 TEST_F(SurfaceAggregatorValidSurfaceTest, ValidSurfaceReferenceWithNoFrame) { |
510 SurfaceId surface_with_no_frame_id = allocator_.GenerateId(); | 592 SurfaceId surface_with_no_frame_id = allocator_.GenerateId(); |
511 factory_.Create(surface_with_no_frame_id, gfx::Size(5, 5)); | 593 factory_.Create(surface_with_no_frame_id, gfx::Size(5, 5)); |
512 test::Quad quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN), | 594 test::Quad quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN), |
513 test::Quad::SurfaceQuad(surface_with_no_frame_id), | 595 test::Quad::SurfaceQuad(surface_with_no_frame_id, 1.f), |
514 test::Quad::SolidColorQuad(SK_ColorBLUE)}; | 596 test::Quad::SolidColorQuad(SK_ColorBLUE)}; |
515 test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; | 597 test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; |
516 | 598 |
517 SubmitFrame(passes, arraysize(passes), root_surface_id_); | 599 SubmitFrame(passes, arraysize(passes), root_surface_id_); |
518 | 600 |
519 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN), | 601 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN), |
520 test::Quad::SolidColorQuad(SK_ColorBLUE)}; | 602 test::Quad::SolidColorQuad(SK_ColorBLUE)}; |
521 test::Pass expected_passes[] = { | 603 test::Pass expected_passes[] = { |
522 test::Pass(expected_quads, arraysize(expected_quads))}; | 604 test::Pass(expected_quads, arraysize(expected_quads))}; |
523 SurfaceId ids[] = {root_surface_id_, surface_with_no_frame_id}; | 605 SurfaceId ids[] = {root_surface_id_, surface_with_no_frame_id}; |
524 AggregateAndVerify( | 606 AggregateAndVerify( |
525 expected_passes, arraysize(expected_passes), ids, arraysize(ids)); | 607 expected_passes, arraysize(expected_passes), ids, arraysize(ids)); |
526 factory_.Destroy(surface_with_no_frame_id); | 608 factory_.Destroy(surface_with_no_frame_id); |
527 } | 609 } |
528 | 610 |
529 // Tests a surface quad referencing itself, generating a trivial cycle. | 611 // Tests a surface quad referencing itself, generating a trivial cycle. |
530 // The quad creating the cycle should be dropped from the final frame. | 612 // The quad creating the cycle should be dropped from the final frame. |
531 TEST_F(SurfaceAggregatorValidSurfaceTest, SimpleCyclicalReference) { | 613 TEST_F(SurfaceAggregatorValidSurfaceTest, SimpleCyclicalReference) { |
532 test::Quad quads[] = {test::Quad::SurfaceQuad(root_surface_id_), | 614 test::Quad quads[] = {test::Quad::SurfaceQuad(root_surface_id_, 1.f), |
533 test::Quad::SolidColorQuad(SK_ColorYELLOW)}; | 615 test::Quad::SolidColorQuad(SK_ColorYELLOW)}; |
534 test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; | 616 test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; |
535 | 617 |
536 SubmitFrame(passes, arraysize(passes), root_surface_id_); | 618 SubmitFrame(passes, arraysize(passes), root_surface_id_); |
537 | 619 |
538 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorYELLOW)}; | 620 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorYELLOW)}; |
539 test::Pass expected_passes[] = { | 621 test::Pass expected_passes[] = { |
540 test::Pass(expected_quads, arraysize(expected_quads))}; | 622 test::Pass(expected_quads, arraysize(expected_quads))}; |
541 SurfaceId ids[] = {root_surface_id_}; | 623 SurfaceId ids[] = {root_surface_id_}; |
542 AggregateAndVerify( | 624 AggregateAndVerify( |
543 expected_passes, arraysize(expected_passes), ids, arraysize(ids)); | 625 expected_passes, arraysize(expected_passes), ids, arraysize(ids)); |
544 } | 626 } |
545 | 627 |
546 // Tests a more complex cycle with one intermediate surface. | 628 // Tests a more complex cycle with one intermediate surface. |
547 TEST_F(SurfaceAggregatorValidSurfaceTest, TwoSurfaceCyclicalReference) { | 629 TEST_F(SurfaceAggregatorValidSurfaceTest, TwoSurfaceCyclicalReference) { |
548 SurfaceId child_surface_id = allocator_.GenerateId(); | 630 SurfaceId child_surface_id = allocator_.GenerateId(); |
549 factory_.Create(child_surface_id, SurfaceSize()); | 631 factory_.Create(child_surface_id, SurfaceSize()); |
550 | 632 |
551 test::Quad parent_quads[] = {test::Quad::SolidColorQuad(SK_ColorBLUE), | 633 test::Quad parent_quads[] = {test::Quad::SolidColorQuad(SK_ColorBLUE), |
552 test::Quad::SurfaceQuad(child_surface_id), | 634 test::Quad::SurfaceQuad(child_surface_id, 1.f), |
553 test::Quad::SolidColorQuad(SK_ColorCYAN)}; | 635 test::Quad::SolidColorQuad(SK_ColorCYAN)}; |
554 test::Pass parent_passes[] = { | 636 test::Pass parent_passes[] = { |
555 test::Pass(parent_quads, arraysize(parent_quads))}; | 637 test::Pass(parent_quads, arraysize(parent_quads))}; |
556 | 638 |
557 SubmitFrame(parent_passes, arraysize(parent_passes), root_surface_id_); | 639 SubmitFrame(parent_passes, arraysize(parent_passes), root_surface_id_); |
558 | 640 |
559 test::Quad child_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN), | 641 test::Quad child_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN), |
560 test::Quad::SurfaceQuad(root_surface_id_), | 642 test::Quad::SurfaceQuad(root_surface_id_, 1.f), |
561 test::Quad::SolidColorQuad(SK_ColorMAGENTA)}; | 643 test::Quad::SolidColorQuad(SK_ColorMAGENTA)}; |
562 test::Pass child_passes[] = {test::Pass(child_quads, arraysize(child_quads))}; | 644 test::Pass child_passes[] = {test::Pass(child_quads, arraysize(child_quads))}; |
563 | 645 |
564 SubmitFrame(child_passes, arraysize(child_passes), child_surface_id); | 646 SubmitFrame(child_passes, arraysize(child_passes), child_surface_id); |
565 | 647 |
566 // The child surface's reference to the root_surface_ will be dropped, so | 648 // The child surface's reference to the root_surface_ will be dropped, so |
567 // we'll end up with: | 649 // we'll end up with: |
568 // SK_ColorBLUE from the parent | 650 // SK_ColorBLUE from the parent |
569 // SK_ColorGREEN from the child | 651 // SK_ColorGREEN from the child |
570 // SK_ColorMAGENTA from the child | 652 // SK_ColorMAGENTA from the child |
(...skipping 21 matching lines...) Loading... |
592 {test::Quad::RenderPassQuad(child_pass_id[0])}}; | 674 {test::Quad::RenderPassQuad(child_pass_id[0])}}; |
593 test::Pass surface_passes[] = { | 675 test::Pass surface_passes[] = { |
594 test::Pass(child_quad[0], arraysize(child_quad[0]), child_pass_id[0]), | 676 test::Pass(child_quad[0], arraysize(child_quad[0]), child_pass_id[0]), |
595 test::Pass(child_quad[1], arraysize(child_quad[1]), child_pass_id[1])}; | 677 test::Pass(child_quad[1], arraysize(child_quad[1]), child_pass_id[1])}; |
596 | 678 |
597 SubmitFrame(surface_passes, arraysize(surface_passes), child_surface_id); | 679 SubmitFrame(surface_passes, arraysize(surface_passes), child_surface_id); |
598 | 680 |
599 // Pass IDs from the parent surface may collide with ones from the child. | 681 // Pass IDs from the parent surface may collide with ones from the child. |
600 RenderPassId parent_pass_id[] = {RenderPassId(2, 1), RenderPassId(1, 2)}; | 682 RenderPassId parent_pass_id[] = {RenderPassId(2, 1), RenderPassId(1, 2)}; |
601 test::Quad parent_quad[][1] = { | 683 test::Quad parent_quad[][1] = { |
602 {test::Quad::SurfaceQuad(child_surface_id)}, | 684 {test::Quad::SurfaceQuad(child_surface_id, 1.f)}, |
603 {test::Quad::RenderPassQuad(parent_pass_id[0])}}; | 685 {test::Quad::RenderPassQuad(parent_pass_id[0])}}; |
604 test::Pass parent_passes[] = { | 686 test::Pass parent_passes[] = { |
605 test::Pass(parent_quad[0], arraysize(parent_quad[0]), parent_pass_id[0]), | 687 test::Pass(parent_quad[0], arraysize(parent_quad[0]), parent_pass_id[0]), |
606 test::Pass(parent_quad[1], arraysize(parent_quad[1]), parent_pass_id[1])}; | 688 test::Pass(parent_quad[1], arraysize(parent_quad[1]), parent_pass_id[1])}; |
607 | 689 |
608 SubmitFrame(parent_passes, arraysize(parent_passes), root_surface_id_); | 690 SubmitFrame(parent_passes, arraysize(parent_passes), root_surface_id_); |
609 scoped_ptr<CompositorFrame> aggregated_frame = | 691 scoped_ptr<CompositorFrame> aggregated_frame = |
610 aggregator_.Aggregate(root_surface_id_); | 692 aggregator_.Aggregate(root_surface_id_); |
611 | 693 |
612 ASSERT_TRUE(aggregated_frame); | 694 ASSERT_TRUE(aggregated_frame); |
(...skipping 238 matching lines...) Loading... |
851 | 933 |
852 scoped_ptr<DelegatedFrameData> child_frame_data(new DelegatedFrameData); | 934 scoped_ptr<DelegatedFrameData> child_frame_data(new DelegatedFrameData); |
853 child_pass_list.swap(child_frame_data->render_pass_list); | 935 child_pass_list.swap(child_frame_data->render_pass_list); |
854 | 936 |
855 scoped_ptr<CompositorFrame> child_frame(new CompositorFrame); | 937 scoped_ptr<CompositorFrame> child_frame(new CompositorFrame); |
856 child_frame->delegated_frame_data = child_frame_data.Pass(); | 938 child_frame->delegated_frame_data = child_frame_data.Pass(); |
857 | 939 |
858 factory_.SubmitFrame(child_surface_id, child_frame.Pass(), base::Closure()); | 940 factory_.SubmitFrame(child_surface_id, child_frame.Pass(), base::Closure()); |
859 | 941 |
860 test::Quad root_quads[] = {test::Quad::SolidColorQuad(1), | 942 test::Quad root_quads[] = {test::Quad::SolidColorQuad(1), |
861 test::Quad::SurfaceQuad(child_surface_id)}; | 943 test::Quad::SurfaceQuad(child_surface_id, 1.f)}; |
862 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; | 944 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; |
863 | 945 |
864 RenderPassList root_pass_list; | 946 RenderPassList root_pass_list; |
865 AddPasses(&root_pass_list, | 947 AddPasses(&root_pass_list, |
866 gfx::Rect(SurfaceSize()), | 948 gfx::Rect(SurfaceSize()), |
867 root_passes, | 949 root_passes, |
868 arraysize(root_passes)); | 950 arraysize(root_passes)); |
869 | 951 |
870 root_pass_list.at(0) | 952 root_pass_list.at(0) |
871 ->shared_quad_state_list.front() | 953 ->shared_quad_state_list.front() |
(...skipping 102 matching lines...) Loading... |
974 child_root_pass_sqs->content_to_target_transform.Translate(8, 0); | 1056 child_root_pass_sqs->content_to_target_transform.Translate(8, 0); |
975 | 1057 |
976 scoped_ptr<DelegatedFrameData> child_frame_data(new DelegatedFrameData); | 1058 scoped_ptr<DelegatedFrameData> child_frame_data(new DelegatedFrameData); |
977 child_pass_list.swap(child_frame_data->render_pass_list); | 1059 child_pass_list.swap(child_frame_data->render_pass_list); |
978 | 1060 |
979 scoped_ptr<CompositorFrame> child_frame(new CompositorFrame); | 1061 scoped_ptr<CompositorFrame> child_frame(new CompositorFrame); |
980 child_frame->delegated_frame_data = child_frame_data.Pass(); | 1062 child_frame->delegated_frame_data = child_frame_data.Pass(); |
981 | 1063 |
982 factory_.SubmitFrame(child_surface_id, child_frame.Pass(), base::Closure()); | 1064 factory_.SubmitFrame(child_surface_id, child_frame.Pass(), base::Closure()); |
983 | 1065 |
984 test::Quad root_quads[] = {test::Quad::SurfaceQuad(child_surface_id)}; | 1066 test::Quad root_quads[] = {test::Quad::SurfaceQuad(child_surface_id, 1.f)}; |
985 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; | 1067 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; |
986 | 1068 |
987 RenderPassList root_pass_list; | 1069 RenderPassList root_pass_list; |
988 AddPasses(&root_pass_list, | 1070 AddPasses(&root_pass_list, |
989 gfx::Rect(SurfaceSize()), | 1071 gfx::Rect(SurfaceSize()), |
990 root_passes, | 1072 root_passes, |
991 arraysize(root_passes)); | 1073 arraysize(root_passes)); |
992 | 1074 |
993 root_pass_list.at(0) | 1075 root_pass_list.at(0) |
994 ->shared_quad_state_list.front() | 1076 ->shared_quad_state_list.front() |
(...skipping 278 matching lines...) Loading... |
1273 EXPECT_THAT(returned_ids, | 1355 EXPECT_THAT(returned_ids, |
1274 testing::WhenSorted(testing::ElementsAreArray(ids))); | 1356 testing::WhenSorted(testing::ElementsAreArray(ids))); |
1275 EXPECT_EQ(3u, resource_provider_->num_resources()); | 1357 EXPECT_EQ(3u, resource_provider_->num_resources()); |
1276 factory.Destroy(surface_id); | 1358 factory.Destroy(surface_id); |
1277 factory.Destroy(surface_id2); | 1359 factory.Destroy(surface_id2); |
1278 } | 1360 } |
1279 | 1361 |
1280 } // namespace | 1362 } // namespace |
1281 } // namespace cc | 1363 } // namespace cc |
1282 | 1364 |
OLD | NEW |