| 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...) Expand 10 before | Expand all | Expand 10 after 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...) Expand all 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...) Expand all 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...) Expand 10 before | Expand all | Expand 10 after 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...) Expand 10 before | Expand all | Expand 10 after 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...) Expand 10 before | Expand all | Expand 10 after 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...) Expand all 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...) Expand 10 before | Expand all | Expand 10 after 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...) Expand 10 before | Expand all | Expand 10 after 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...) Expand 10 before | Expand all | Expand 10 after 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 |