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/base/region.h" | 5 #include "cc/base/region.h" |
6 #include "cc/base/scoped_ptr_vector.h" | 6 #include "cc/base/scoped_ptr_vector.h" |
7 #include "cc/output/compositor_frame_metadata.h" | 7 #include "cc/output/compositor_frame_metadata.h" |
8 #include "cc/output/gl_renderer.h" | 8 #include "cc/output/gl_renderer.h" |
9 #include "cc/output/output_surface.h" | 9 #include "cc/output/output_surface.h" |
10 #include "cc/output/output_surface_client.h" | 10 #include "cc/output/output_surface_client.h" |
(...skipping 415 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
426 const QuadList& quad_list = main_pass->quad_list; | 426 const QuadList& quad_list = main_pass->quad_list; |
427 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); | 427 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); |
428 it != quad_list.BackToFrontEnd(); ++it) { | 428 it != quad_list.BackToFrontEnd(); ++it) { |
429 EXPECT_NE(DrawQuad::TEXTURE_CONTENT, it->material); | 429 EXPECT_NE(DrawQuad::TEXTURE_CONTENT, it->material); |
430 } | 430 } |
431 | 431 |
432 // Check that the right resource id got extracted. | 432 // Check that the right resource id got extracted. |
433 EXPECT_EQ(original_resource_id, candidate_list.back().resource_id); | 433 EXPECT_EQ(original_resource_id, candidate_list.back().resource_id); |
434 } | 434 } |
435 | 435 |
| 436 TEST_F(SandwichTest, SuccessfulTwoOverlays) { |
| 437 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 438 |
| 439 // Add two non-overlapping candidates. |
| 440 CreateCandidateQuadAt(resource_provider_.get(), |
| 441 pass->shared_quad_state_list.back(), pass.get(), |
| 442 kOverlayTopLeftRect); |
| 443 CreateCandidateQuadAt(resource_provider_.get(), |
| 444 pass->shared_quad_state_list.back(), pass.get(), |
| 445 kOverlayBottomRightRect); |
| 446 |
| 447 // Add something behind it. |
| 448 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 449 pass->shared_quad_state_list.back(), pass.get()); |
| 450 |
| 451 RenderPassList pass_list; |
| 452 pass_list.push_back(pass.Pass()); |
| 453 OverlayCandidateList candidate_list; |
| 454 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 455 |
| 456 // Both candidates should become overlays. |
| 457 EXPECT_EQ(1u, pass_list.size()); |
| 458 EXPECT_EQ(3u, candidate_list.size()); |
| 459 EXPECT_EQ(kOverlayTopLeftRect, candidate_list[1].display_rect); |
| 460 EXPECT_EQ(kOverlayBottomRightRect, candidate_list[2].display_rect); |
| 461 |
| 462 // The overlay quads should be gone. |
| 463 const QuadList& quad_list = pass_list.back()->quad_list; |
| 464 EXPECT_EQ(1u, quad_list.size()); |
| 465 EXPECT_EQ(DrawQuad::SOLID_COLOR, quad_list.front()->material); |
| 466 } |
| 467 |
| 468 TEST_F(SandwichTest, OverlappingOverlays) { |
| 469 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 470 |
| 471 // Add two overlapping candidates. |
| 472 CreateCandidateQuadAt(resource_provider_.get(), |
| 473 pass->shared_quad_state_list.back(), pass.get(), |
| 474 kOverlayTopLeftRect); |
| 475 CreateCandidateQuadAt(resource_provider_.get(), |
| 476 pass->shared_quad_state_list.back(), pass.get(), |
| 477 kOverlayRect); |
| 478 |
| 479 // Add something behind it. |
| 480 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 481 pass->shared_quad_state_list.back(), pass.get()); |
| 482 |
| 483 RenderPassList pass_list; |
| 484 pass_list.push_back(pass.Pass()); |
| 485 OverlayCandidateList candidate_list; |
| 486 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 487 |
| 488 // Only one of the candidates should become an overlay. |
| 489 EXPECT_EQ(1u, pass_list.size()); |
| 490 EXPECT_EQ(2u, candidate_list.size()); |
| 491 EXPECT_EQ(kOverlayTopLeftRect, candidate_list[1].display_rect); |
| 492 |
| 493 // One of the overlay quads should be gone. |
| 494 const QuadList& quad_list = pass_list.back()->quad_list; |
| 495 EXPECT_EQ(2u, quad_list.size()); |
| 496 EXPECT_EQ(DrawQuad::TEXTURE_CONTENT, quad_list.front()->material); |
| 497 EXPECT_EQ(DrawQuad::SOLID_COLOR, quad_list.back()->material); |
| 498 } |
| 499 |
436 TEST_F(SandwichTest, SuccessfulSandwichOverlay) { | 500 TEST_F(SandwichTest, SuccessfulSandwichOverlay) { |
437 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 501 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
438 | 502 |
439 CreateOpaqueQuadAt(resource_provider_.get(), | 503 CreateOpaqueQuadAt(resource_provider_.get(), |
440 pass->shared_quad_state_list.back(), pass.get(), | 504 pass->shared_quad_state_list.back(), pass.get(), |
441 gfx::Rect(16, 16, 32, 32)); | 505 gfx::Rect(16, 16, 32, 32)); |
442 unsigned candidate_id = | 506 unsigned candidate_id = |
443 CreateCandidateQuadAt(resource_provider_.get(), | 507 CreateCandidateQuadAt(resource_provider_.get(), |
444 pass->shared_quad_state_list.back(), pass.get(), | 508 pass->shared_quad_state_list.back(), pass.get(), |
445 gfx::Rect(32, 32, 32, 32)) | 509 gfx::Rect(32, 32, 32, 32)) |
(...skipping 1104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1550 renderer_->BeginDrawingFrame(&frame_no_overlays); | 1614 renderer_->BeginDrawingFrame(&frame_no_overlays); |
1551 renderer_->FinishDrawingFrame(&frame_no_overlays); | 1615 renderer_->FinishDrawingFrame(&frame_no_overlays); |
1552 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 1616 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
1553 SwapBuffers(); | 1617 SwapBuffers(); |
1554 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); | 1618 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); |
1555 Mock::VerifyAndClearExpectations(&scheduler_); | 1619 Mock::VerifyAndClearExpectations(&scheduler_); |
1556 } | 1620 } |
1557 | 1621 |
1558 } // namespace | 1622 } // namespace |
1559 } // namespace cc | 1623 } // namespace cc |
OLD | NEW |