| 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 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 59 | 59 |
| 60 class SingleOverlayValidator : public OverlayCandidateValidator { | 60 class SingleOverlayValidator : public OverlayCandidateValidator { |
| 61 public: | 61 public: |
| 62 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { | 62 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { |
| 63 strategies->push_back(make_scoped_ptr( | 63 strategies->push_back(make_scoped_ptr( |
| 64 new OverlayStrategyCommon(this, new OverlayStrategySingleOnTop))); | 64 new OverlayStrategyCommon(this, new OverlayStrategySingleOnTop))); |
| 65 strategies->push_back(make_scoped_ptr( | 65 strategies->push_back(make_scoped_ptr( |
| 66 new OverlayStrategyCommon(this, new OverlayStrategyUnderlay))); | 66 new OverlayStrategyCommon(this, new OverlayStrategyUnderlay))); |
| 67 } | 67 } |
| 68 void CheckOverlaySupport(OverlayCandidateList* surfaces) override { | 68 void CheckOverlaySupport(OverlayCandidateList* surfaces) override { |
| 69 ASSERT_EQ(2U, surfaces->size()); | 69 // We may have 1 or 2 surfaces depending on whether this ran through the |
| 70 // full renderer and picked up the output surface, or not. |
| 71 ASSERT_LE(1U, surfaces->size()); |
| 72 ASSERT_GE(2U, surfaces->size()); |
| 70 | 73 |
| 71 OverlayCandidate& candidate = surfaces->back(); | 74 OverlayCandidate& candidate = surfaces->back(); |
| 75 EXPECT_TRUE(!candidate.use_output_surface_for_resource); |
| 72 if (candidate.display_rect.width() == 64) { | 76 if (candidate.display_rect.width() == 64) { |
| 73 EXPECT_EQ(gfx::RectF(kOverlayBottomRightRect), candidate.display_rect); | 77 EXPECT_EQ(gfx::RectF(kOverlayBottomRightRect), candidate.display_rect); |
| 74 } else { | 78 } else { |
| 75 EXPECT_NEAR(kOverlayRect.x(), candidate.display_rect.x(), 0.01f); | 79 EXPECT_NEAR(kOverlayRect.x(), candidate.display_rect.x(), 0.01f); |
| 76 EXPECT_NEAR(kOverlayRect.y(), candidate.display_rect.y(), 0.01f); | 80 EXPECT_NEAR(kOverlayRect.y(), candidate.display_rect.y(), 0.01f); |
| 77 EXPECT_NEAR(kOverlayRect.width(), candidate.display_rect.width(), 0.01f); | 81 EXPECT_NEAR(kOverlayRect.width(), candidate.display_rect.width(), 0.01f); |
| 78 EXPECT_NEAR(kOverlayRect.height(), candidate.display_rect.height(), | 82 EXPECT_NEAR(kOverlayRect.height(), candidate.display_rect.height(), |
| 79 0.01f); | 83 0.01f); |
| 80 } | 84 } |
| 81 EXPECT_FLOAT_RECT_EQ(BoundingRect(kUVTopLeft, kUVBottomRight), | 85 EXPECT_FLOAT_RECT_EQ(BoundingRect(kUVTopLeft, kUVBottomRight), |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 129 size_t DefaultOverlayProcessor::GetStrategyCount() { | 133 size_t DefaultOverlayProcessor::GetStrategyCount() { |
| 130 return strategies_.size(); | 134 return strategies_.size(); |
| 131 } | 135 } |
| 132 | 136 |
| 133 class OverlayOutputSurface : public OutputSurface { | 137 class OverlayOutputSurface : public OutputSurface { |
| 134 public: | 138 public: |
| 135 explicit OverlayOutputSurface(scoped_refptr<ContextProvider> context_provider) | 139 explicit OverlayOutputSurface(scoped_refptr<ContextProvider> context_provider) |
| 136 : OutputSurface(context_provider) { | 140 : OutputSurface(context_provider) { |
| 137 surface_size_ = kDisplaySize; | 141 surface_size_ = kDisplaySize; |
| 138 device_scale_factor_ = 1; | 142 device_scale_factor_ = 1; |
| 143 is_displayed_as_overlay_plane_ = true; |
| 139 } | 144 } |
| 140 | 145 |
| 141 void SetScaleFactor(float scale_factor) { | 146 void SetScaleFactor(float scale_factor) { |
| 142 device_scale_factor_ = scale_factor; | 147 device_scale_factor_ = scale_factor; |
| 143 } | 148 } |
| 144 | 149 |
| 145 // OutputSurface implementation | 150 // OutputSurface implementation |
| 146 void SwapBuffers(CompositorFrame* frame) override; | 151 void SwapBuffers(CompositorFrame* frame) override; |
| 147 | 152 |
| 148 void SetOverlayCandidateValidator(OverlayCandidateValidator* validator) { | 153 void SetOverlayCandidateValidator(OverlayCandidateValidator* validator) { |
| 149 overlay_candidate_validator_.reset(validator); | 154 overlay_candidate_validator_.reset(validator); |
| 150 } | 155 } |
| 151 | 156 |
| 152 OverlayCandidateValidator* GetOverlayCandidateValidator() const override { | 157 OverlayCandidateValidator* GetOverlayCandidateValidator() const override { |
| 153 return overlay_candidate_validator_.get(); | 158 return overlay_candidate_validator_.get(); |
| 154 } | 159 } |
| 155 | 160 |
| 161 bool IsDisplayedAsOverlayPlane() const override { |
| 162 return is_displayed_as_overlay_plane_; |
| 163 } |
| 164 unsigned GetOverlayTextureId() const override { return 10000; } |
| 165 void set_is_displayed_as_overlay_plane(bool value) { |
| 166 is_displayed_as_overlay_plane_ = value; |
| 167 } |
| 168 |
| 156 private: | 169 private: |
| 157 scoped_ptr<OverlayCandidateValidator> overlay_candidate_validator_; | 170 scoped_ptr<OverlayCandidateValidator> overlay_candidate_validator_; |
| 171 bool is_displayed_as_overlay_plane_; |
| 158 }; | 172 }; |
| 159 | 173 |
| 160 void OverlayOutputSurface::SwapBuffers(CompositorFrame* frame) { | 174 void OverlayOutputSurface::SwapBuffers(CompositorFrame* frame) { |
| 161 client_->DidSwapBuffers(); | 175 client_->DidSwapBuffers(); |
| 162 client_->DidSwapBuffersComplete(); | 176 client_->DidSwapBuffersComplete(); |
| 163 } | 177 } |
| 164 | 178 |
| 165 scoped_ptr<RenderPass> CreateRenderPass() { | 179 scoped_ptr<RenderPass> CreateRenderPass() { |
| 166 RenderPassId id(1, 0); | 180 RenderPassId id(1, 0); |
| 167 gfx::Rect output_rect(0, 0, 256, 256); | 181 gfx::Rect output_rect(0, 0, 256, 256); |
| (...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 385 pass->shared_quad_state_list.back(), pass.get()); | 399 pass->shared_quad_state_list.back(), pass.get()); |
| 386 | 400 |
| 387 RenderPassList pass_list; | 401 RenderPassList pass_list; |
| 388 pass_list.push_back(pass.Pass()); | 402 pass_list.push_back(pass.Pass()); |
| 389 | 403 |
| 390 // Check for potential candidates. | 404 // Check for potential candidates. |
| 391 OverlayCandidateList candidate_list; | 405 OverlayCandidateList candidate_list; |
| 392 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 406 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 393 | 407 |
| 394 ASSERT_EQ(1U, pass_list.size()); | 408 ASSERT_EQ(1U, pass_list.size()); |
| 395 ASSERT_EQ(2U, candidate_list.size()); | 409 ASSERT_EQ(1U, candidate_list.size()); |
| 396 | 410 |
| 397 RenderPass* main_pass = pass_list.back(); | 411 RenderPass* main_pass = pass_list.back(); |
| 398 // Check that the quad is gone. | 412 // Check that the quad is gone. |
| 399 EXPECT_EQ(2U, main_pass->quad_list.size()); | 413 EXPECT_EQ(2U, main_pass->quad_list.size()); |
| 400 const QuadList& quad_list = main_pass->quad_list; | 414 const QuadList& quad_list = main_pass->quad_list; |
| 401 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); | 415 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); |
| 402 it != quad_list.BackToFrontEnd(); ++it) { | 416 it != quad_list.BackToFrontEnd(); ++it) { |
| 403 EXPECT_NE(DrawQuad::TEXTURE_CONTENT, it->material); | 417 EXPECT_NE(DrawQuad::TEXTURE_CONTENT, it->material); |
| 404 } | 418 } |
| 405 | 419 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 427 | 441 |
| 428 RenderPassList pass_list; | 442 RenderPassList pass_list; |
| 429 pass_list.push_back(pass.Pass()); | 443 pass_list.push_back(pass.Pass()); |
| 430 | 444 |
| 431 // Check for potential candidates. | 445 // Check for potential candidates. |
| 432 OverlayCandidateList candidate_list; | 446 OverlayCandidateList candidate_list; |
| 433 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 447 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 434 | 448 |
| 435 // Ensure that the display and uv rects have cropping applied to them. | 449 // Ensure that the display and uv rects have cropping applied to them. |
| 436 ASSERT_EQ(1U, pass_list.size()); | 450 ASSERT_EQ(1U, pass_list.size()); |
| 437 ASSERT_EQ(2U, candidate_list.size()); | 451 ASSERT_EQ(1U, candidate_list.size()); |
| 438 EXPECT_EQ(candidate_id, candidate_list[1].resource_id); | 452 EXPECT_EQ(candidate_id, candidate_list[0].resource_id); |
| 439 EXPECT_EQ(gfx::RectF(0.f, 32.f, 64.f, 64.f), candidate_list[1].display_rect); | 453 EXPECT_EQ(gfx::RectF(0.f, 32.f, 64.f, 64.f), candidate_list[0].display_rect); |
| 440 EXPECT_EQ(gfx::RectF(0.f, 0.25f, 0.5f, 0.5f), candidate_list[1].uv_rect); | 454 EXPECT_EQ(gfx::RectF(0.f, 0.25f, 0.5f, 0.5f), candidate_list[0].uv_rect); |
| 441 } | 455 } |
| 442 | 456 |
| 443 TEST_F(SandwichTest, SuccessfulTwoOverlays) { | 457 TEST_F(SandwichTest, SuccessfulTwoOverlays) { |
| 444 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 458 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 445 | 459 |
| 446 // Add two non-overlapping candidates. | 460 // Add two non-overlapping candidates. |
| 447 CreateCandidateQuadAt(resource_provider_.get(), | 461 CreateCandidateQuadAt(resource_provider_.get(), |
| 448 pass->shared_quad_state_list.back(), pass.get(), | 462 pass->shared_quad_state_list.back(), pass.get(), |
| 449 kOverlayTopLeftRect); | 463 kOverlayTopLeftRect); |
| 450 CreateCandidateQuadAt(resource_provider_.get(), | 464 CreateCandidateQuadAt(resource_provider_.get(), |
| 451 pass->shared_quad_state_list.back(), pass.get(), | 465 pass->shared_quad_state_list.back(), pass.get(), |
| 452 kOverlayBottomRightRect); | 466 kOverlayBottomRightRect); |
| 453 | 467 |
| 454 // Add something behind it. | 468 // Add something behind it. |
| 455 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 469 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 456 pass->shared_quad_state_list.back(), pass.get()); | 470 pass->shared_quad_state_list.back(), pass.get()); |
| 457 | 471 |
| 458 RenderPassList pass_list; | 472 RenderPassList pass_list; |
| 459 pass_list.push_back(pass.Pass()); | 473 pass_list.push_back(pass.Pass()); |
| 460 OverlayCandidateList candidate_list; | 474 OverlayCandidateList candidate_list; |
| 461 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 475 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 462 | 476 |
| 463 // Both candidates should become overlays. | 477 // Both candidates should become overlays. |
| 464 EXPECT_EQ(1u, pass_list.size()); | 478 EXPECT_EQ(1u, pass_list.size()); |
| 465 EXPECT_EQ(3u, candidate_list.size()); | 479 EXPECT_EQ(2u, candidate_list.size()); |
| 466 EXPECT_EQ(gfx::RectF(kOverlayTopLeftRect), candidate_list[1].display_rect); | 480 EXPECT_EQ(gfx::RectF(kOverlayTopLeftRect), candidate_list[0].display_rect); |
| 467 EXPECT_EQ(gfx::RectF(kOverlayBottomRightRect), | 481 EXPECT_EQ(gfx::RectF(kOverlayBottomRightRect), |
| 468 candidate_list[2].display_rect); | 482 candidate_list[1].display_rect); |
| 469 | 483 |
| 470 // The overlay quads should be gone. | 484 // The overlay quads should be gone. |
| 471 const QuadList& quad_list = pass_list.back()->quad_list; | 485 const QuadList& quad_list = pass_list.back()->quad_list; |
| 472 EXPECT_EQ(1u, quad_list.size()); | 486 EXPECT_EQ(1u, quad_list.size()); |
| 473 EXPECT_EQ(DrawQuad::SOLID_COLOR, quad_list.front()->material); | 487 EXPECT_EQ(DrawQuad::SOLID_COLOR, quad_list.front()->material); |
| 474 } | 488 } |
| 475 | 489 |
| 476 TEST_F(SandwichTest, OverlappingOverlays) { | 490 TEST_F(SandwichTest, OverlappingOverlays) { |
| 477 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 491 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 478 | 492 |
| 479 // Add two overlapping candidates. | 493 // Add two overlapping candidates. |
| 480 CreateCandidateQuadAt(resource_provider_.get(), | 494 CreateCandidateQuadAt(resource_provider_.get(), |
| 481 pass->shared_quad_state_list.back(), pass.get(), | 495 pass->shared_quad_state_list.back(), pass.get(), |
| 482 kOverlayTopLeftRect); | 496 kOverlayTopLeftRect); |
| 483 CreateCandidateQuadAt(resource_provider_.get(), | 497 CreateCandidateQuadAt(resource_provider_.get(), |
| 484 pass->shared_quad_state_list.back(), pass.get(), | 498 pass->shared_quad_state_list.back(), pass.get(), |
| 485 kOverlayRect); | 499 kOverlayRect); |
| 486 | 500 |
| 487 // Add something behind it. | 501 // Add something behind it. |
| 488 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 502 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 489 pass->shared_quad_state_list.back(), pass.get()); | 503 pass->shared_quad_state_list.back(), pass.get()); |
| 490 | 504 |
| 491 RenderPassList pass_list; | 505 RenderPassList pass_list; |
| 492 pass_list.push_back(pass.Pass()); | 506 pass_list.push_back(pass.Pass()); |
| 493 OverlayCandidateList candidate_list; | 507 OverlayCandidateList candidate_list; |
| 494 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 508 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 495 | 509 |
| 496 // Only one of the candidates should become an overlay. | 510 // Only one of the candidates should become an overlay. |
| 497 EXPECT_EQ(1u, pass_list.size()); | 511 EXPECT_EQ(1u, pass_list.size()); |
| 498 EXPECT_EQ(2u, candidate_list.size()); | 512 EXPECT_EQ(1u, candidate_list.size()); |
| 499 EXPECT_EQ(gfx::RectF(kOverlayTopLeftRect), candidate_list[1].display_rect); | 513 EXPECT_EQ(gfx::RectF(kOverlayTopLeftRect), candidate_list[0].display_rect); |
| 500 | 514 |
| 501 // One of the overlay quads should be gone. | 515 // One of the overlay quads should be gone. |
| 502 const QuadList& quad_list = pass_list.back()->quad_list; | 516 const QuadList& quad_list = pass_list.back()->quad_list; |
| 503 EXPECT_EQ(2u, quad_list.size()); | 517 EXPECT_EQ(2u, quad_list.size()); |
| 504 EXPECT_EQ(DrawQuad::TEXTURE_CONTENT, quad_list.front()->material); | 518 EXPECT_EQ(DrawQuad::TEXTURE_CONTENT, quad_list.front()->material); |
| 505 EXPECT_EQ(DrawQuad::SOLID_COLOR, quad_list.back()->material); | 519 EXPECT_EQ(DrawQuad::SOLID_COLOR, quad_list.back()->material); |
| 506 } | 520 } |
| 507 | 521 |
| 508 TEST_F(SandwichTest, SuccessfulSandwichOverlay) { | 522 TEST_F(SandwichTest, SuccessfulSandwichOverlay) { |
| 509 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 523 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 521 gfx::Rect(kDisplaySize)); | 535 gfx::Rect(kDisplaySize)); |
| 522 | 536 |
| 523 RenderPassList pass_list; | 537 RenderPassList pass_list; |
| 524 pass_list.push_back(pass.Pass()); | 538 pass_list.push_back(pass.Pass()); |
| 525 | 539 |
| 526 // Check for potential candidates. | 540 // Check for potential candidates. |
| 527 OverlayCandidateList candidate_list; | 541 OverlayCandidateList candidate_list; |
| 528 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 542 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 529 | 543 |
| 530 ASSERT_EQ(1U, pass_list.size()); | 544 ASSERT_EQ(1U, pass_list.size()); |
| 531 ASSERT_EQ(3U, candidate_list.size()); | 545 ASSERT_EQ(2U, candidate_list.size()); |
| 532 | 546 |
| 533 RenderPass* main_pass = pass_list.back(); | 547 RenderPass* main_pass = pass_list.back(); |
| 534 // Check that the quad is gone. | 548 // Check that the quad is gone. |
| 535 EXPECT_EQ(3U, main_pass->quad_list.size()); | 549 EXPECT_EQ(3U, main_pass->quad_list.size()); |
| 536 const QuadList& quad_list = main_pass->quad_list; | 550 const QuadList& quad_list = main_pass->quad_list; |
| 537 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); | 551 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); |
| 538 it != quad_list.BackToFrontEnd(); ++it) { | 552 it != quad_list.BackToFrontEnd(); ++it) { |
| 539 EXPECT_NE(DrawQuad::TEXTURE_CONTENT, it->material); | 553 EXPECT_NE(DrawQuad::TEXTURE_CONTENT, it->material); |
| 540 } | 554 } |
| 541 | 555 |
| 542 EXPECT_FALSE(candidate_list[0].use_output_surface_for_resource); | 556 EXPECT_EQ(candidate_id, candidate_list[0].resource_id); |
| 543 EXPECT_EQ(candidate_id, candidate_list[1].resource_id); | 557 EXPECT_EQ(gfx::RectF(32.f, 32.f, 32.f, 32.f), candidate_list[0].display_rect); |
| 544 EXPECT_EQ(gfx::RectF(32.f, 32.f, 32.f, 32.f), candidate_list[1].display_rect); | 558 EXPECT_TRUE(candidate_list[1].use_output_surface_for_resource); |
| 545 EXPECT_TRUE(candidate_list[2].use_output_surface_for_resource); | 559 EXPECT_EQ(gfx::RectF(32.f, 32.f, 16.f, 16.f), candidate_list[1].display_rect); |
| 546 EXPECT_EQ(gfx::RectF(32.f, 32.f, 16.f, 16.f), candidate_list[2].display_rect); | |
| 547 EXPECT_EQ(gfx::RectF(32.f / 256.f, 32.f / 256.f, 16.f / 256.f, 16.f / 256.f), | 560 EXPECT_EQ(gfx::RectF(32.f / 256.f, 32.f / 256.f, 16.f / 256.f, 16.f / 256.f), |
| 548 candidate_list[2].uv_rect); | 561 candidate_list[1].uv_rect); |
| 549 } | 562 } |
| 550 | 563 |
| 551 TEST_F(SandwichTest, MultiQuadOverlay) { | 564 TEST_F(SandwichTest, MultiQuadOverlay) { |
| 552 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 565 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 553 | 566 |
| 554 // Put two non-intersecting quads on top. | 567 // Put two non-intersecting quads on top. |
| 555 const gfx::Rect rect1(gfx::Rect(0, 0, 32, 32)); | 568 const gfx::Rect rect1(gfx::Rect(0, 0, 32, 32)); |
| 556 const gfx::Rect rect2(gfx::Rect(32, 32, 32, 32)); | 569 const gfx::Rect rect2(gfx::Rect(32, 32, 32, 32)); |
| 557 Region covered_region; | 570 Region covered_region; |
| 558 covered_region.Union(rect1); | 571 covered_region.Union(rect1); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 576 | 589 |
| 577 RenderPassList pass_list; | 590 RenderPassList pass_list; |
| 578 pass_list.push_back(pass.Pass()); | 591 pass_list.push_back(pass.Pass()); |
| 579 | 592 |
| 580 // Run the overlay strategy on that input. | 593 // Run the overlay strategy on that input. |
| 581 RenderPass* main_pass = pass_list.back(); | 594 RenderPass* main_pass = pass_list.back(); |
| 582 OverlayCandidateList candidate_list; | 595 OverlayCandidateList candidate_list; |
| 583 EXPECT_EQ(4U, main_pass->quad_list.size()); | 596 EXPECT_EQ(4U, main_pass->quad_list.size()); |
| 584 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 597 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 585 ASSERT_EQ(1U, pass_list.size()); | 598 ASSERT_EQ(1U, pass_list.size()); |
| 586 ASSERT_EQ(4U, candidate_list.size()); | 599 ASSERT_EQ(3U, candidate_list.size()); |
| 587 | 600 |
| 588 // Check that the candidate quad is gone and that we now have two transparent | 601 // Check that the candidate quad is gone and that we now have two transparent |
| 589 // quads for the same region that was covered on the overlay. | 602 // quads for the same region that was covered on the overlay. |
| 590 EXPECT_EQ(5U, main_pass->quad_list.size()); | 603 EXPECT_EQ(5U, main_pass->quad_list.size()); |
| 591 const QuadList& quad_list = main_pass->quad_list; | 604 const QuadList& quad_list = main_pass->quad_list; |
| 592 Region transparent_quad_region; | 605 Region transparent_quad_region; |
| 593 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); | 606 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); |
| 594 it != quad_list.BackToFrontEnd(); ++it) { | 607 it != quad_list.BackToFrontEnd(); ++it) { |
| 595 EXPECT_NE(DrawQuad::TEXTURE_CONTENT, it->material); | 608 EXPECT_NE(DrawQuad::TEXTURE_CONTENT, it->material); |
| 596 if (it->material == DrawQuad::SOLID_COLOR) { | 609 if (it->material == DrawQuad::SOLID_COLOR) { |
| 597 const SolidColorDrawQuad* solid_color_quad = | 610 const SolidColorDrawQuad* solid_color_quad = |
| 598 SolidColorDrawQuad::MaterialCast(*it); | 611 SolidColorDrawQuad::MaterialCast(*it); |
| 599 if (solid_color_quad->color == SK_ColorTRANSPARENT) | 612 if (solid_color_quad->color == SK_ColorTRANSPARENT) |
| 600 transparent_quad_region.Union(solid_color_quad->rect); | 613 transparent_quad_region.Union(solid_color_quad->rect); |
| 601 } | 614 } |
| 602 } | 615 } |
| 603 DCHECK(covered_region == transparent_quad_region); | 616 DCHECK(covered_region == transparent_quad_region); |
| 604 | 617 |
| 605 // Check that overlays cover the same region that the quads covered. | 618 // Check that overlays cover the same region that the quads covered. |
| 606 EXPECT_FALSE(candidate_list[0].use_output_surface_for_resource); | 619 EXPECT_EQ(candidate_id, candidate_list[0].resource_id); |
| 607 EXPECT_EQ(candidate_id, candidate_list[1].resource_id); | 620 EXPECT_EQ(gfx::RectF(64.f, 64.f), candidate_list[0].display_rect); |
| 608 EXPECT_EQ(gfx::RectF(64.f, 64.f), candidate_list[1].display_rect); | 621 EXPECT_TRUE(candidate_list[1].use_output_surface_for_resource); |
| 609 EXPECT_TRUE(candidate_list[2].use_output_surface_for_resource); | 622 EXPECT_TRUE(candidate_list[2].use_output_surface_for_resource); |
| 610 EXPECT_TRUE(candidate_list[3].use_output_surface_for_resource); | |
| 611 Region overlay_region; | 623 Region overlay_region; |
| 624 overlay_region.Union(gfx::ToEnclosingRect(candidate_list[1].display_rect)); |
| 612 overlay_region.Union(gfx::ToEnclosingRect(candidate_list[2].display_rect)); | 625 overlay_region.Union(gfx::ToEnclosingRect(candidate_list[2].display_rect)); |
| 613 overlay_region.Union(gfx::ToEnclosingRect(candidate_list[3].display_rect)); | |
| 614 DCHECK(covered_region == overlay_region); | 626 DCHECK(covered_region == overlay_region); |
| 615 } | 627 } |
| 616 | 628 |
| 617 TEST_F(SingleOverlayOnTopTest, SuccessfullOverlay) { | 629 TEST_F(SingleOverlayOnTopTest, SuccessfullOverlay) { |
| 618 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 630 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 619 TextureDrawQuad* original_quad = | 631 TextureDrawQuad* original_quad = |
| 620 CreateFullscreenCandidateQuad(resource_provider_.get(), | 632 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 621 pass->shared_quad_state_list.back(), | 633 pass->shared_quad_state_list.back(), |
| 622 pass.get()); | 634 pass.get()); |
| 623 unsigned original_resource_id = original_quad->resource_id(); | 635 unsigned original_resource_id = original_quad->resource_id(); |
| 624 | 636 |
| 625 // Add something behind it. | 637 // Add something behind it. |
| 626 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 638 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 627 pass->shared_quad_state_list.back(), pass.get()); | 639 pass->shared_quad_state_list.back(), pass.get()); |
| 628 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 640 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 629 pass->shared_quad_state_list.back(), pass.get()); | 641 pass->shared_quad_state_list.back(), pass.get()); |
| 630 | 642 |
| 631 RenderPassList pass_list; | 643 RenderPassList pass_list; |
| 632 pass_list.push_back(pass.Pass()); | 644 pass_list.push_back(pass.Pass()); |
| 633 | 645 |
| 634 // Check for potential candidates. | 646 // Check for potential candidates. |
| 635 OverlayCandidateList candidate_list; | 647 OverlayCandidateList candidate_list; |
| 636 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 648 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 637 | 649 |
| 638 ASSERT_EQ(1U, pass_list.size()); | 650 ASSERT_EQ(1U, pass_list.size()); |
| 639 ASSERT_EQ(2U, candidate_list.size()); | 651 ASSERT_EQ(1U, candidate_list.size()); |
| 640 | 652 |
| 641 RenderPass* main_pass = pass_list.back(); | 653 RenderPass* main_pass = pass_list.back(); |
| 642 // Check that the quad is gone. | 654 // Check that the quad is gone. |
| 643 EXPECT_EQ(2U, main_pass->quad_list.size()); | 655 EXPECT_EQ(2U, main_pass->quad_list.size()); |
| 644 const QuadList& quad_list = main_pass->quad_list; | 656 const QuadList& quad_list = main_pass->quad_list; |
| 645 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); | 657 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); |
| 646 it != quad_list.BackToFrontEnd(); | 658 it != quad_list.BackToFrontEnd(); |
| 647 ++it) { | 659 ++it) { |
| 648 EXPECT_NE(DrawQuad::TEXTURE_CONTENT, it->material); | 660 EXPECT_NE(DrawQuad::TEXTURE_CONTENT, it->material); |
| 649 } | 661 } |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 713 pass->shared_quad_state_list.back(), pass.get()); | 725 pass->shared_quad_state_list.back(), pass.get()); |
| 714 | 726 |
| 715 pass_list.push_back(pass.Pass()); | 727 pass_list.push_back(pass.Pass()); |
| 716 | 728 |
| 717 RenderPassList original_pass_list; | 729 RenderPassList original_pass_list; |
| 718 RenderPass::CopyAll(pass_list, &original_pass_list); | 730 RenderPass::CopyAll(pass_list, &original_pass_list); |
| 719 | 731 |
| 720 // Check for potential candidates. | 732 // Check for potential candidates. |
| 721 OverlayCandidateList candidate_list; | 733 OverlayCandidateList candidate_list; |
| 722 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 734 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 723 EXPECT_EQ(2U, candidate_list.size()); | 735 EXPECT_EQ(1U, candidate_list.size()); |
| 724 | 736 |
| 725 // This should be the same. | 737 // This should be the same. |
| 726 ASSERT_EQ(2U, pass_list.size()); | 738 ASSERT_EQ(2U, pass_list.size()); |
| 727 } | 739 } |
| 728 | 740 |
| 729 TEST_F(SingleOverlayOnTopTest, RejectPremultipliedAlpha) { | 741 TEST_F(SingleOverlayOnTopTest, RejectPremultipliedAlpha) { |
| 730 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 742 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 731 TextureDrawQuad* quad = | 743 TextureDrawQuad* quad = |
| 732 CreateFullscreenCandidateQuad(resource_provider_.get(), | 744 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 733 pass->shared_quad_state_list.back(), | 745 pass->shared_quad_state_list.back(), |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 826 pass->shared_quad_state_list.back(), | 838 pass->shared_quad_state_list.back(), |
| 827 pass.get()); | 839 pass.get()); |
| 828 pass->shared_quad_state_list.back()->is_clipped = true; | 840 pass->shared_quad_state_list.back()->is_clipped = true; |
| 829 pass->shared_quad_state_list.back()->clip_rect = kOverlayClipRect; | 841 pass->shared_quad_state_list.back()->clip_rect = kOverlayClipRect; |
| 830 | 842 |
| 831 RenderPassList pass_list; | 843 RenderPassList pass_list; |
| 832 pass_list.push_back(pass.Pass()); | 844 pass_list.push_back(pass.Pass()); |
| 833 OverlayCandidateList candidate_list; | 845 OverlayCandidateList candidate_list; |
| 834 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 846 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 835 ASSERT_EQ(1U, pass_list.size()); | 847 ASSERT_EQ(1U, pass_list.size()); |
| 836 EXPECT_EQ(2U, candidate_list.size()); | 848 EXPECT_EQ(1U, candidate_list.size()); |
| 837 } | 849 } |
| 838 | 850 |
| 839 TEST_F(SingleOverlayOnTopTest, AllowVerticalFlip) { | 851 TEST_F(SingleOverlayOnTopTest, AllowVerticalFlip) { |
| 840 gfx::Rect rect = kOverlayRect; | 852 gfx::Rect rect = kOverlayRect; |
| 841 rect.set_width(rect.width() / 2); | 853 rect.set_width(rect.width() / 2); |
| 842 rect.Offset(0, -rect.height()); | 854 rect.Offset(0, -rect.height()); |
| 843 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 855 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 844 CreateCandidateQuadAt(resource_provider_.get(), | 856 CreateCandidateQuadAt(resource_provider_.get(), |
| 845 pass->shared_quad_state_list.back(), pass.get(), rect); | 857 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 846 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f, | 858 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f, |
| 847 -1.0f); | 859 -1.0f); |
| 848 | 860 |
| 849 RenderPassList pass_list; | 861 RenderPassList pass_list; |
| 850 pass_list.push_back(pass.Pass()); | 862 pass_list.push_back(pass.Pass()); |
| 851 OverlayCandidateList candidate_list; | 863 OverlayCandidateList candidate_list; |
| 852 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 864 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 853 ASSERT_EQ(1U, pass_list.size()); | 865 ASSERT_EQ(1U, pass_list.size()); |
| 854 ASSERT_EQ(2U, candidate_list.size()); | 866 ASSERT_EQ(1U, candidate_list.size()); |
| 855 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_VERTICAL, | 867 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_VERTICAL, |
| 856 candidate_list.back().transform); | 868 candidate_list.back().transform); |
| 857 } | 869 } |
| 858 | 870 |
| 859 TEST_F(SingleOverlayOnTopTest, AllowHorizontalFlip) { | 871 TEST_F(SingleOverlayOnTopTest, AllowHorizontalFlip) { |
| 860 gfx::Rect rect = kOverlayRect; | 872 gfx::Rect rect = kOverlayRect; |
| 861 rect.set_height(rect.height() / 2); | 873 rect.set_height(rect.height() / 2); |
| 862 rect.Offset(-rect.width(), 0); | 874 rect.Offset(-rect.width(), 0); |
| 863 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 875 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 864 CreateCandidateQuadAt(resource_provider_.get(), | 876 CreateCandidateQuadAt(resource_provider_.get(), |
| 865 pass->shared_quad_state_list.back(), pass.get(), rect); | 877 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 866 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(-1.0f, | 878 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(-1.0f, |
| 867 2.0f); | 879 2.0f); |
| 868 | 880 |
| 869 RenderPassList pass_list; | 881 RenderPassList pass_list; |
| 870 pass_list.push_back(pass.Pass()); | 882 pass_list.push_back(pass.Pass()); |
| 871 OverlayCandidateList candidate_list; | 883 OverlayCandidateList candidate_list; |
| 872 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 884 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 873 ASSERT_EQ(1U, pass_list.size()); | 885 ASSERT_EQ(1U, pass_list.size()); |
| 874 ASSERT_EQ(2U, candidate_list.size()); | 886 ASSERT_EQ(1U, candidate_list.size()); |
| 875 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_HORIZONTAL, | 887 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_HORIZONTAL, |
| 876 candidate_list.back().transform); | 888 candidate_list.back().transform); |
| 877 } | 889 } |
| 878 | 890 |
| 879 TEST_F(SingleOverlayOnTopTest, AllowPositiveScaleTransform) { | 891 TEST_F(SingleOverlayOnTopTest, AllowPositiveScaleTransform) { |
| 880 gfx::Rect rect = kOverlayRect; | 892 gfx::Rect rect = kOverlayRect; |
| 881 rect.set_width(rect.width() / 2); | 893 rect.set_width(rect.width() / 2); |
| 882 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 894 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 883 CreateCandidateQuadAt(resource_provider_.get(), | 895 CreateCandidateQuadAt(resource_provider_.get(), |
| 884 pass->shared_quad_state_list.back(), pass.get(), rect); | 896 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 885 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f, | 897 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f, |
| 886 1.0f); | 898 1.0f); |
| 887 | 899 |
| 888 RenderPassList pass_list; | 900 RenderPassList pass_list; |
| 889 pass_list.push_back(pass.Pass()); | 901 pass_list.push_back(pass.Pass()); |
| 890 OverlayCandidateList candidate_list; | 902 OverlayCandidateList candidate_list; |
| 891 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 903 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 892 ASSERT_EQ(1U, pass_list.size()); | 904 ASSERT_EQ(1U, pass_list.size()); |
| 893 EXPECT_EQ(2U, candidate_list.size()); | 905 EXPECT_EQ(1U, candidate_list.size()); |
| 894 } | 906 } |
| 895 | 907 |
| 896 TEST_F(SingleOverlayOnTopTest, Allow90DegreeRotation) { | 908 TEST_F(SingleOverlayOnTopTest, Allow90DegreeRotation) { |
| 897 gfx::Rect rect = kOverlayRect; | 909 gfx::Rect rect = kOverlayRect; |
| 898 rect.Offset(0, -rect.height()); | 910 rect.Offset(0, -rect.height()); |
| 899 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 911 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 900 CreateCandidateQuadAt(resource_provider_.get(), | 912 CreateCandidateQuadAt(resource_provider_.get(), |
| 901 pass->shared_quad_state_list.back(), pass.get(), rect); | 913 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 902 pass->shared_quad_state_list.back() | 914 pass->shared_quad_state_list.back() |
| 903 ->quad_to_target_transform.RotateAboutZAxis(90.f); | 915 ->quad_to_target_transform.RotateAboutZAxis(90.f); |
| 904 | 916 |
| 905 RenderPassList pass_list; | 917 RenderPassList pass_list; |
| 906 pass_list.push_back(pass.Pass()); | 918 pass_list.push_back(pass.Pass()); |
| 907 OverlayCandidateList candidate_list; | 919 OverlayCandidateList candidate_list; |
| 908 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 920 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 909 ASSERT_EQ(1U, pass_list.size()); | 921 ASSERT_EQ(1U, pass_list.size()); |
| 910 ASSERT_EQ(2U, candidate_list.size()); | 922 ASSERT_EQ(1U, candidate_list.size()); |
| 911 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_90, candidate_list.back().transform); | 923 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_90, candidate_list.back().transform); |
| 912 } | 924 } |
| 913 | 925 |
| 914 TEST_F(SingleOverlayOnTopTest, Allow180DegreeRotation) { | 926 TEST_F(SingleOverlayOnTopTest, Allow180DegreeRotation) { |
| 915 gfx::Rect rect = kOverlayRect; | 927 gfx::Rect rect = kOverlayRect; |
| 916 rect.Offset(-rect.width(), -rect.height()); | 928 rect.Offset(-rect.width(), -rect.height()); |
| 917 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 929 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 918 CreateCandidateQuadAt(resource_provider_.get(), | 930 CreateCandidateQuadAt(resource_provider_.get(), |
| 919 pass->shared_quad_state_list.back(), pass.get(), rect); | 931 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 920 pass->shared_quad_state_list.back() | 932 pass->shared_quad_state_list.back() |
| 921 ->quad_to_target_transform.RotateAboutZAxis(180.f); | 933 ->quad_to_target_transform.RotateAboutZAxis(180.f); |
| 922 | 934 |
| 923 RenderPassList pass_list; | 935 RenderPassList pass_list; |
| 924 pass_list.push_back(pass.Pass()); | 936 pass_list.push_back(pass.Pass()); |
| 925 OverlayCandidateList candidate_list; | 937 OverlayCandidateList candidate_list; |
| 926 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 938 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 927 ASSERT_EQ(1U, pass_list.size()); | 939 ASSERT_EQ(1U, pass_list.size()); |
| 928 ASSERT_EQ(2U, candidate_list.size()); | 940 ASSERT_EQ(1U, candidate_list.size()); |
| 929 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_180, candidate_list.back().transform); | 941 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_180, candidate_list.back().transform); |
| 930 } | 942 } |
| 931 | 943 |
| 932 TEST_F(SingleOverlayOnTopTest, Allow270DegreeRotation) { | 944 TEST_F(SingleOverlayOnTopTest, Allow270DegreeRotation) { |
| 933 gfx::Rect rect = kOverlayRect; | 945 gfx::Rect rect = kOverlayRect; |
| 934 rect.Offset(-rect.width(), 0); | 946 rect.Offset(-rect.width(), 0); |
| 935 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 947 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 936 CreateCandidateQuadAt(resource_provider_.get(), | 948 CreateCandidateQuadAt(resource_provider_.get(), |
| 937 pass->shared_quad_state_list.back(), pass.get(), rect); | 949 pass->shared_quad_state_list.back(), pass.get(), rect); |
| 938 pass->shared_quad_state_list.back() | 950 pass->shared_quad_state_list.back() |
| 939 ->quad_to_target_transform.RotateAboutZAxis(270.f); | 951 ->quad_to_target_transform.RotateAboutZAxis(270.f); |
| 940 | 952 |
| 941 RenderPassList pass_list; | 953 RenderPassList pass_list; |
| 942 pass_list.push_back(pass.Pass()); | 954 pass_list.push_back(pass.Pass()); |
| 943 OverlayCandidateList candidate_list; | 955 OverlayCandidateList candidate_list; |
| 944 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 956 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 945 ASSERT_EQ(1U, pass_list.size()); | 957 ASSERT_EQ(1U, pass_list.size()); |
| 946 ASSERT_EQ(2U, candidate_list.size()); | 958 ASSERT_EQ(1U, candidate_list.size()); |
| 947 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_270, candidate_list.back().transform); | 959 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_270, candidate_list.back().transform); |
| 948 } | 960 } |
| 949 | 961 |
| 950 TEST_F(SingleOverlayOnTopTest, AllowNotTopIfNotOccluded) { | 962 TEST_F(SingleOverlayOnTopTest, AllowNotTopIfNotOccluded) { |
| 951 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 963 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 952 CreateOpaqueQuadAt(resource_provider_.get(), | 964 CreateOpaqueQuadAt(resource_provider_.get(), |
| 953 pass->shared_quad_state_list.back(), pass.get(), | 965 pass->shared_quad_state_list.back(), pass.get(), |
| 954 kOverlayTopLeftRect); | 966 kOverlayTopLeftRect); |
| 955 CreateCandidateQuadAt(resource_provider_.get(), | 967 CreateCandidateQuadAt(resource_provider_.get(), |
| 956 pass->shared_quad_state_list.back(), | 968 pass->shared_quad_state_list.back(), |
| 957 pass.get(), | 969 pass.get(), |
| 958 kOverlayBottomRightRect); | 970 kOverlayBottomRightRect); |
| 959 | 971 |
| 960 RenderPassList pass_list; | 972 RenderPassList pass_list; |
| 961 pass_list.push_back(pass.Pass()); | 973 pass_list.push_back(pass.Pass()); |
| 962 | 974 |
| 963 RenderPassList original_pass_list; | 975 RenderPassList original_pass_list; |
| 964 RenderPass::CopyAll(pass_list, &original_pass_list); | 976 RenderPass::CopyAll(pass_list, &original_pass_list); |
| 965 | 977 |
| 966 OverlayCandidateList candidate_list; | 978 OverlayCandidateList candidate_list; |
| 967 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 979 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 968 EXPECT_EQ(1U, pass_list.size()); | 980 EXPECT_EQ(1U, pass_list.size()); |
| 969 EXPECT_EQ(2U, candidate_list.size()); | 981 EXPECT_EQ(1U, candidate_list.size()); |
| 970 } | 982 } |
| 971 | 983 |
| 972 TEST_F(SingleOverlayOnTopTest, AllowTransparentOnTop) { | 984 TEST_F(SingleOverlayOnTopTest, AllowTransparentOnTop) { |
| 973 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 985 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 974 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); | 986 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); |
| 975 shared_state->opacity = 0.f; | 987 shared_state->opacity = 0.f; |
| 976 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), | 988 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), |
| 977 kOverlayBottomRightRect); | 989 kOverlayBottomRightRect); |
| 978 shared_state = pass->CreateAndAppendSharedQuadState(); | 990 shared_state = pass->CreateAndAppendSharedQuadState(); |
| 979 shared_state->opacity = 1.f; | 991 shared_state->opacity = 1.f; |
| 980 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), | 992 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), |
| 981 kOverlayBottomRightRect); | 993 kOverlayBottomRightRect); |
| 982 | 994 |
| 983 RenderPassList pass_list; | 995 RenderPassList pass_list; |
| 984 pass_list.push_back(pass.Pass()); | 996 pass_list.push_back(pass.Pass()); |
| 985 | 997 |
| 986 RenderPassList original_pass_list; | 998 RenderPassList original_pass_list; |
| 987 RenderPass::CopyAll(pass_list, &original_pass_list); | 999 RenderPass::CopyAll(pass_list, &original_pass_list); |
| 988 | 1000 |
| 989 OverlayCandidateList candidate_list; | 1001 OverlayCandidateList candidate_list; |
| 990 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 1002 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 991 EXPECT_EQ(1U, pass_list.size()); | 1003 EXPECT_EQ(1U, pass_list.size()); |
| 992 EXPECT_EQ(2U, candidate_list.size()); | 1004 EXPECT_EQ(1U, candidate_list.size()); |
| 993 } | 1005 } |
| 994 | 1006 |
| 995 TEST_F(SingleOverlayOnTopTest, AllowTransparentColorOnTop) { | 1007 TEST_F(SingleOverlayOnTopTest, AllowTransparentColorOnTop) { |
| 996 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1008 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 997 CreateSolidColorQuadAt(pass->shared_quad_state_list.back(), | 1009 CreateSolidColorQuadAt(pass->shared_quad_state_list.back(), |
| 998 SK_ColorTRANSPARENT, pass.get(), | 1010 SK_ColorTRANSPARENT, pass.get(), |
| 999 kOverlayBottomRightRect); | 1011 kOverlayBottomRightRect); |
| 1000 CreateCandidateQuadAt(resource_provider_.get(), | 1012 CreateCandidateQuadAt(resource_provider_.get(), |
| 1001 pass->shared_quad_state_list.back(), pass.get(), | 1013 pass->shared_quad_state_list.back(), pass.get(), |
| 1002 kOverlayBottomRightRect); | 1014 kOverlayBottomRightRect); |
| 1003 | 1015 |
| 1004 RenderPassList pass_list; | 1016 RenderPassList pass_list; |
| 1005 pass_list.push_back(pass.Pass()); | 1017 pass_list.push_back(pass.Pass()); |
| 1006 | 1018 |
| 1007 RenderPassList original_pass_list; | 1019 RenderPassList original_pass_list; |
| 1008 RenderPass::CopyAll(pass_list, &original_pass_list); | 1020 RenderPass::CopyAll(pass_list, &original_pass_list); |
| 1009 | 1021 |
| 1010 OverlayCandidateList candidate_list; | 1022 OverlayCandidateList candidate_list; |
| 1011 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 1023 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 1012 EXPECT_EQ(1U, pass_list.size()); | 1024 EXPECT_EQ(1U, pass_list.size()); |
| 1013 EXPECT_EQ(2U, candidate_list.size()); | 1025 EXPECT_EQ(1U, candidate_list.size()); |
| 1014 } | 1026 } |
| 1015 | 1027 |
| 1016 TEST_F(SingleOverlayOnTopTest, RejectOpaqueColorOnTop) { | 1028 TEST_F(SingleOverlayOnTopTest, RejectOpaqueColorOnTop) { |
| 1017 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1029 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1018 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); | 1030 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); |
| 1019 shared_state->opacity = 0.5f; | 1031 shared_state->opacity = 0.5f; |
| 1020 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), | 1032 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), |
| 1021 kOverlayBottomRightRect); | 1033 kOverlayBottomRightRect); |
| 1022 shared_state = pass->CreateAndAppendSharedQuadState(); | 1034 shared_state = pass->CreateAndAppendSharedQuadState(); |
| 1023 shared_state->opacity = 1.f; | 1035 shared_state->opacity = 1.f; |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1075 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1087 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1076 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | 1088 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
| 1077 pass->shared_quad_state_list.back(), | 1089 pass->shared_quad_state_list.back(), |
| 1078 pass.get(), kXMirrorTransform); | 1090 pass.get(), kXMirrorTransform); |
| 1079 | 1091 |
| 1080 RenderPassList pass_list; | 1092 RenderPassList pass_list; |
| 1081 pass_list.push_back(pass.Pass()); | 1093 pass_list.push_back(pass.Pass()); |
| 1082 OverlayCandidateList candidate_list; | 1094 OverlayCandidateList candidate_list; |
| 1083 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 1095 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 1084 ASSERT_EQ(1U, pass_list.size()); | 1096 ASSERT_EQ(1U, pass_list.size()); |
| 1085 EXPECT_EQ(2U, candidate_list.size()); | 1097 EXPECT_EQ(1U, candidate_list.size()); |
| 1086 } | 1098 } |
| 1087 | 1099 |
| 1088 TEST_F(SingleOverlayOnTopTest, AllowVideoBothMirrorTransform) { | 1100 TEST_F(SingleOverlayOnTopTest, AllowVideoBothMirrorTransform) { |
| 1089 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1101 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1090 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | 1102 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
| 1091 pass->shared_quad_state_list.back(), | 1103 pass->shared_quad_state_list.back(), |
| 1092 pass.get(), kBothMirrorTransform); | 1104 pass.get(), kBothMirrorTransform); |
| 1093 | 1105 |
| 1094 RenderPassList pass_list; | 1106 RenderPassList pass_list; |
| 1095 pass_list.push_back(pass.Pass()); | 1107 pass_list.push_back(pass.Pass()); |
| 1096 OverlayCandidateList candidate_list; | 1108 OverlayCandidateList candidate_list; |
| 1097 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 1109 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 1098 ASSERT_EQ(1U, pass_list.size()); | 1110 ASSERT_EQ(1U, pass_list.size()); |
| 1099 EXPECT_EQ(2U, candidate_list.size()); | 1111 EXPECT_EQ(1U, candidate_list.size()); |
| 1100 } | 1112 } |
| 1101 | 1113 |
| 1102 TEST_F(SingleOverlayOnTopTest, AllowVideoNormalTransform) { | 1114 TEST_F(SingleOverlayOnTopTest, AllowVideoNormalTransform) { |
| 1103 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1115 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1104 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | 1116 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
| 1105 pass->shared_quad_state_list.back(), | 1117 pass->shared_quad_state_list.back(), |
| 1106 pass.get(), kNormalTransform); | 1118 pass.get(), kNormalTransform); |
| 1107 | 1119 |
| 1108 RenderPassList pass_list; | 1120 RenderPassList pass_list; |
| 1109 pass_list.push_back(pass.Pass()); | 1121 pass_list.push_back(pass.Pass()); |
| 1110 OverlayCandidateList candidate_list; | 1122 OverlayCandidateList candidate_list; |
| 1111 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 1123 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 1112 ASSERT_EQ(1U, pass_list.size()); | 1124 ASSERT_EQ(1U, pass_list.size()); |
| 1113 EXPECT_EQ(2U, candidate_list.size()); | 1125 EXPECT_EQ(1U, candidate_list.size()); |
| 1114 } | 1126 } |
| 1115 | 1127 |
| 1116 TEST_F(SingleOverlayOnTopTest, AllowVideoYMirrorTransform) { | 1128 TEST_F(SingleOverlayOnTopTest, AllowVideoYMirrorTransform) { |
| 1117 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1129 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1118 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | 1130 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
| 1119 pass->shared_quad_state_list.back(), | 1131 pass->shared_quad_state_list.back(), |
| 1120 pass.get(), kYMirrorTransform); | 1132 pass.get(), kYMirrorTransform); |
| 1121 | 1133 |
| 1122 RenderPassList pass_list; | 1134 RenderPassList pass_list; |
| 1123 pass_list.push_back(pass.Pass()); | 1135 pass_list.push_back(pass.Pass()); |
| 1124 OverlayCandidateList candidate_list; | 1136 OverlayCandidateList candidate_list; |
| 1125 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 1137 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 1126 ASSERT_EQ(1U, pass_list.size()); | 1138 ASSERT_EQ(1U, pass_list.size()); |
| 1127 EXPECT_EQ(2U, candidate_list.size()); | 1139 EXPECT_EQ(1U, candidate_list.size()); |
| 1128 } | 1140 } |
| 1129 | 1141 |
| 1130 TEST_F(UnderlayTest, OverlayLayerUnderMainLayer) { | 1142 TEST_F(UnderlayTest, OverlayLayerUnderMainLayer) { |
| 1131 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1143 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1132 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1144 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1133 pass->shared_quad_state_list.back(), pass.get()); | 1145 pass->shared_quad_state_list.back(), pass.get()); |
| 1134 CreateCandidateQuadAt(resource_provider_.get(), | 1146 CreateCandidateQuadAt(resource_provider_.get(), |
| 1135 pass->shared_quad_state_list.back(), pass.get(), | 1147 pass->shared_quad_state_list.back(), pass.get(), |
| 1136 kOverlayBottomRightRect); | 1148 kOverlayBottomRightRect); |
| 1137 | 1149 |
| 1138 RenderPassList pass_list; | 1150 RenderPassList pass_list; |
| 1139 pass_list.push_back(pass.Pass()); | 1151 pass_list.push_back(pass.Pass()); |
| 1140 | 1152 |
| 1141 OverlayCandidateList candidate_list; | 1153 OverlayCandidateList candidate_list; |
| 1142 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 1154 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 1143 EXPECT_EQ(1U, pass_list.size()); | 1155 EXPECT_EQ(1U, pass_list.size()); |
| 1144 ASSERT_EQ(2U, candidate_list.size()); | 1156 ASSERT_EQ(1U, candidate_list.size()); |
| 1145 EXPECT_EQ(0, candidate_list[0].plane_z_order); | 1157 EXPECT_EQ(-1, candidate_list[0].plane_z_order); |
| 1146 EXPECT_EQ(-1, candidate_list[1].plane_z_order); | |
| 1147 EXPECT_EQ(2U, pass_list[0]->quad_list.size()); | 1158 EXPECT_EQ(2U, pass_list[0]->quad_list.size()); |
| 1148 // The overlay quad should have changed to a SOLID_COLOR quad. | 1159 // The overlay quad should have changed to a SOLID_COLOR quad. |
| 1149 EXPECT_EQ(pass_list[0]->quad_list.back()->material, DrawQuad::SOLID_COLOR); | 1160 EXPECT_EQ(pass_list[0]->quad_list.back()->material, DrawQuad::SOLID_COLOR); |
| 1150 } | 1161 } |
| 1151 | 1162 |
| 1152 TEST_F(UnderlayTest, AllowOnTop) { | 1163 TEST_F(UnderlayTest, AllowOnTop) { |
| 1153 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1164 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1154 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1165 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 1155 pass->shared_quad_state_list.back(), | 1166 pass->shared_quad_state_list.back(), |
| 1156 pass.get()); | 1167 pass.get()); |
| 1157 pass->CreateAndAppendSharedQuadState()->opacity = 0.5f; | 1168 pass->CreateAndAppendSharedQuadState()->opacity = 0.5f; |
| 1158 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1169 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1159 pass->shared_quad_state_list.back(), pass.get()); | 1170 pass->shared_quad_state_list.back(), pass.get()); |
| 1160 | 1171 |
| 1161 RenderPassList pass_list; | 1172 RenderPassList pass_list; |
| 1162 pass_list.push_back(pass.Pass()); | 1173 pass_list.push_back(pass.Pass()); |
| 1163 | 1174 |
| 1164 OverlayCandidateList candidate_list; | 1175 OverlayCandidateList candidate_list; |
| 1165 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); | 1176 overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
| 1166 EXPECT_EQ(1U, pass_list.size()); | 1177 EXPECT_EQ(1U, pass_list.size()); |
| 1167 ASSERT_EQ(2U, candidate_list.size()); | 1178 ASSERT_EQ(1U, candidate_list.size()); |
| 1168 EXPECT_EQ(0, candidate_list[0].plane_z_order); | 1179 EXPECT_EQ(-1, candidate_list[0].plane_z_order); |
| 1169 EXPECT_EQ(-1, candidate_list[1].plane_z_order); | |
| 1170 // The overlay quad should have changed to a SOLID_COLOR quad. | 1180 // The overlay quad should have changed to a SOLID_COLOR quad. |
| 1171 EXPECT_EQ(pass_list[0]->quad_list.front()->material, DrawQuad::SOLID_COLOR); | 1181 EXPECT_EQ(pass_list[0]->quad_list.front()->material, DrawQuad::SOLID_COLOR); |
| 1172 } | 1182 } |
| 1173 | 1183 |
| 1174 class OverlayInfoRendererGL : public GLRenderer { | 1184 class OverlayInfoRendererGL : public GLRenderer { |
| 1175 public: | 1185 public: |
| 1176 OverlayInfoRendererGL(RendererClient* client, | 1186 OverlayInfoRendererGL(RendererClient* client, |
| 1177 const RendererSettings* settings, | 1187 const RendererSettings* settings, |
| 1178 OutputSurface* output_surface, | 1188 OutputSurface* output_surface, |
| 1179 ResourceProvider* resource_provider) | 1189 ResourceProvider* resource_provider) |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1281 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1291 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1282 pass->shared_quad_state_list.back(), pass.get()); | 1292 pass->shared_quad_state_list.back(), pass.get()); |
| 1283 | 1293 |
| 1284 RenderPassList pass_list; | 1294 RenderPassList pass_list; |
| 1285 pass_list.push_back(pass.Pass()); | 1295 pass_list.push_back(pass.Pass()); |
| 1286 | 1296 |
| 1287 // Candidate pass was taken out and extra skipped pass added, | 1297 // Candidate pass was taken out and extra skipped pass added, |
| 1288 // so only draw 2 quads. | 1298 // so only draw 2 quads. |
| 1289 EXPECT_CALL(*renderer_, DoDrawQuad(_, _, _)).Times(2); | 1299 EXPECT_CALL(*renderer_, DoDrawQuad(_, _, _)).Times(2); |
| 1290 EXPECT_CALL(scheduler_, | 1300 EXPECT_CALL(scheduler_, |
| 1291 Schedule(1, | 1301 Schedule(0, gfx::OVERLAY_TRANSFORM_NONE, _, |
| 1292 gfx::OVERLAY_TRANSFORM_NONE, | 1302 gfx::Rect(kDisplaySize), gfx::RectF(0, 0, 1, 1))) |
| 1293 _, | 1303 .Times(1); |
| 1294 kOverlayRect, | 1304 EXPECT_CALL(scheduler_, |
| 1295 BoundingRect(kUVTopLeft, kUVBottomRight))).Times(1); | 1305 Schedule(1, gfx::OVERLAY_TRANSFORM_NONE, _, kOverlayRect, |
| 1306 BoundingRect(kUVTopLeft, kUVBottomRight))) |
| 1307 .Times(1); |
| 1296 renderer_->DrawFrame(&pass_list, 1.f, viewport_rect, viewport_rect, false); | 1308 renderer_->DrawFrame(&pass_list, 1.f, viewport_rect, viewport_rect, false); |
| 1297 | 1309 |
| 1298 SwapBuffers(); | 1310 SwapBuffers(); |
| 1299 | 1311 |
| 1300 Mock::VerifyAndClearExpectations(renderer_.get()); | 1312 Mock::VerifyAndClearExpectations(renderer_.get()); |
| 1301 Mock::VerifyAndClearExpectations(&scheduler_); | 1313 Mock::VerifyAndClearExpectations(&scheduler_); |
| 1302 } | 1314 } |
| 1303 | 1315 |
| 1304 TEST_F(GLRendererWithOverlaysTest, OccludedQuadInUnderlay) { | 1316 TEST_F(GLRendererWithOverlaysTest, OccludedQuadInUnderlay) { |
| 1305 bool use_validator = true; | 1317 bool use_validator = true; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1318 pass->shared_quad_state_list.back(), | 1330 pass->shared_quad_state_list.back(), |
| 1319 pass.get()); | 1331 pass.get()); |
| 1320 | 1332 |
| 1321 RenderPassList pass_list; | 1333 RenderPassList pass_list; |
| 1322 pass_list.push_back(pass.Pass()); | 1334 pass_list.push_back(pass.Pass()); |
| 1323 | 1335 |
| 1324 // Candidate quad should fail to be overlaid on top because of occlusion. | 1336 // Candidate quad should fail to be overlaid on top because of occlusion. |
| 1325 // Expect to be replaced with transparent hole quad and placed in underlay. | 1337 // Expect to be replaced with transparent hole quad and placed in underlay. |
| 1326 EXPECT_CALL(*renderer_, DoDrawQuad(_, _, _)).Times(3); | 1338 EXPECT_CALL(*renderer_, DoDrawQuad(_, _, _)).Times(3); |
| 1327 EXPECT_CALL(scheduler_, | 1339 EXPECT_CALL(scheduler_, |
| 1340 Schedule(0, gfx::OVERLAY_TRANSFORM_NONE, _, |
| 1341 gfx::Rect(kDisplaySize), gfx::RectF(0, 0, 1, 1))) |
| 1342 .Times(1); |
| 1343 EXPECT_CALL(scheduler_, |
| 1328 Schedule(-1, gfx::OVERLAY_TRANSFORM_NONE, _, kOverlayRect, | 1344 Schedule(-1, gfx::OVERLAY_TRANSFORM_NONE, _, kOverlayRect, |
| 1329 BoundingRect(kUVTopLeft, kUVBottomRight))).Times(1); | 1345 BoundingRect(kUVTopLeft, kUVBottomRight))) |
| 1346 .Times(1); |
| 1330 renderer_->DrawFrame(&pass_list, 1.f, viewport_rect, viewport_rect, false); | 1347 renderer_->DrawFrame(&pass_list, 1.f, viewport_rect, viewport_rect, false); |
| 1331 | 1348 |
| 1332 SwapBuffers(); | 1349 SwapBuffers(); |
| 1333 | 1350 |
| 1334 Mock::VerifyAndClearExpectations(renderer_.get()); | 1351 Mock::VerifyAndClearExpectations(renderer_.get()); |
| 1335 Mock::VerifyAndClearExpectations(&scheduler_); | 1352 Mock::VerifyAndClearExpectations(&scheduler_); |
| 1336 } | 1353 } |
| 1337 | 1354 |
| 1338 TEST_F(GLRendererWithOverlaysTest, NoValidatorNoOverlay) { | 1355 TEST_F(GLRendererWithOverlaysTest, NoValidatorNoOverlay) { |
| 1339 bool use_validator = false; | 1356 bool use_validator = false; |
| 1340 Init(use_validator); | 1357 Init(use_validator); |
| 1341 renderer_->set_expect_overlays(false); | 1358 renderer_->set_expect_overlays(false); |
| 1342 gfx::Rect viewport_rect(16, 16); | 1359 gfx::Rect viewport_rect(16, 16); |
| 1343 | 1360 |
| 1344 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1361 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1345 | 1362 |
| 1346 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1363 CreateFullscreenCandidateQuad(resource_provider_.get(), |
| 1347 pass->shared_quad_state_list.back(), | 1364 pass->shared_quad_state_list.back(), |
| 1348 pass.get()); | 1365 pass.get()); |
| 1349 | 1366 |
| 1350 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1367 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1351 pass->shared_quad_state_list.back(), pass.get()); | 1368 pass->shared_quad_state_list.back(), pass.get()); |
| 1352 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1369 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1353 pass->shared_quad_state_list.back(), pass.get()); | 1370 pass->shared_quad_state_list.back(), pass.get()); |
| 1354 | 1371 |
| 1355 RenderPassList pass_list; | 1372 RenderPassList pass_list; |
| 1356 pass_list.push_back(pass.Pass()); | 1373 pass_list.push_back(pass.Pass()); |
| 1357 | 1374 |
| 1358 // Should see no overlays. | 1375 // Should not see the primary surface's overlay. |
| 1376 output_surface_->set_is_displayed_as_overlay_plane(false); |
| 1359 EXPECT_CALL(*renderer_, DoDrawQuad(_, _, _)).Times(3); | 1377 EXPECT_CALL(*renderer_, DoDrawQuad(_, _, _)).Times(3); |
| 1360 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(0); | 1378 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(0); |
| 1361 renderer_->DrawFrame(&pass_list, 1.f, viewport_rect, viewport_rect, false); | 1379 renderer_->DrawFrame(&pass_list, 1.f, viewport_rect, viewport_rect, false); |
| 1362 | |
| 1363 SwapBuffers(); | 1380 SwapBuffers(); |
| 1364 | |
| 1365 Mock::VerifyAndClearExpectations(renderer_.get()); | 1381 Mock::VerifyAndClearExpectations(renderer_.get()); |
| 1366 Mock::VerifyAndClearExpectations(&scheduler_); | 1382 Mock::VerifyAndClearExpectations(&scheduler_); |
| 1367 } | 1383 } |
| 1368 | 1384 |
| 1369 TEST_F(GLRendererWithOverlaysTest, ResourcesExportedAndReturned) { | 1385 TEST_F(GLRendererWithOverlaysTest, ResourcesExportedAndReturned) { |
| 1370 bool use_validator = true; | 1386 bool use_validator = true; |
| 1371 Init(use_validator); | 1387 Init(use_validator); |
| 1372 renderer_->set_expect_overlays(true); | 1388 renderer_->set_expect_overlays(true); |
| 1373 | 1389 |
| 1374 ResourceId resource1 = CreateResource(resource_provider_.get()); | 1390 ResourceId resource1 = CreateResource(resource_provider_.get()); |
| 1375 ResourceId resource2 = CreateResource(resource_provider_.get()); | 1391 ResourceId resource2 = CreateResource(resource_provider_.get()); |
| 1376 | 1392 |
| 1377 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1393 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1378 RenderPassList pass_list; | 1394 RenderPassList pass_list; |
| 1379 pass_list.push_back(pass.Pass()); | 1395 pass_list.push_back(pass.Pass()); |
| 1380 | 1396 |
| 1381 DirectRenderer::DrawingFrame frame1; | 1397 DirectRenderer::DrawingFrame frame1; |
| 1382 frame1.render_passes_in_draw_order = &pass_list; | 1398 frame1.render_passes_in_draw_order = &pass_list; |
| 1383 frame1.overlay_list.resize(2); | 1399 frame1.overlay_list.resize(2); |
| 1400 frame1.overlay_list.front().use_output_surface_for_resource = true; |
| 1384 OverlayCandidate& overlay1 = frame1.overlay_list.back(); | 1401 OverlayCandidate& overlay1 = frame1.overlay_list.back(); |
| 1385 overlay1.resource_id = resource1; | 1402 overlay1.resource_id = resource1; |
| 1386 overlay1.plane_z_order = 1; | 1403 overlay1.plane_z_order = 1; |
| 1387 | 1404 |
| 1388 DirectRenderer::DrawingFrame frame2; | 1405 DirectRenderer::DrawingFrame frame2; |
| 1389 frame2.render_passes_in_draw_order = &pass_list; | 1406 frame2.render_passes_in_draw_order = &pass_list; |
| 1390 frame2.overlay_list.resize(2); | 1407 frame2.overlay_list.resize(2); |
| 1408 frame2.overlay_list.front().use_output_surface_for_resource = true; |
| 1391 OverlayCandidate& overlay2 = frame2.overlay_list.back(); | 1409 OverlayCandidate& overlay2 = frame2.overlay_list.back(); |
| 1392 overlay2.resource_id = resource2; | 1410 overlay2.resource_id = resource2; |
| 1393 overlay2.plane_z_order = 1; | 1411 overlay2.plane_z_order = 1; |
| 1394 | 1412 |
| 1395 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(1); | 1413 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(2); |
| 1396 renderer_->BeginDrawingFrame(&frame1); | 1414 renderer_->BeginDrawingFrame(&frame1); |
| 1415 printf("About to finish, %d %d\n", resource1, resource2); |
| 1397 renderer_->FinishDrawingFrame(&frame1); | 1416 renderer_->FinishDrawingFrame(&frame1); |
| 1398 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 1417 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
| 1399 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource2)); | 1418 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource2)); |
| 1400 SwapBuffers(); | 1419 SwapBuffers(); |
| 1401 Mock::VerifyAndClearExpectations(&scheduler_); | 1420 Mock::VerifyAndClearExpectations(&scheduler_); |
| 1402 | 1421 |
| 1403 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(1); | 1422 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(2); |
| 1404 renderer_->BeginDrawingFrame(&frame2); | 1423 renderer_->BeginDrawingFrame(&frame2); |
| 1405 renderer_->FinishDrawingFrame(&frame2); | 1424 renderer_->FinishDrawingFrame(&frame2); |
| 1406 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 1425 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
| 1407 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); | 1426 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); |
| 1408 SwapBuffers(); | 1427 SwapBuffers(); |
| 1409 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); | 1428 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); |
| 1410 Mock::VerifyAndClearExpectations(&scheduler_); | 1429 Mock::VerifyAndClearExpectations(&scheduler_); |
| 1411 | 1430 |
| 1412 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(1); | 1431 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(2); |
| 1413 renderer_->BeginDrawingFrame(&frame1); | 1432 renderer_->BeginDrawingFrame(&frame1); |
| 1414 renderer_->FinishDrawingFrame(&frame1); | 1433 renderer_->FinishDrawingFrame(&frame1); |
| 1415 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 1434 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
| 1416 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); | 1435 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); |
| 1417 SwapBuffers(); | 1436 SwapBuffers(); |
| 1418 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource2)); | 1437 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource2)); |
| 1419 Mock::VerifyAndClearExpectations(&scheduler_); | 1438 Mock::VerifyAndClearExpectations(&scheduler_); |
| 1420 | 1439 |
| 1421 // No overlays, release the resource. | 1440 // No overlays, release the resource. |
| 1422 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(0); | 1441 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(0); |
| 1423 DirectRenderer::DrawingFrame frame3; | 1442 DirectRenderer::DrawingFrame frame3; |
| 1424 frame3.render_passes_in_draw_order = &pass_list; | 1443 frame3.render_passes_in_draw_order = &pass_list; |
| 1425 renderer_->set_expect_overlays(false); | 1444 renderer_->set_expect_overlays(false); |
| 1426 renderer_->BeginDrawingFrame(&frame3); | 1445 renderer_->BeginDrawingFrame(&frame3); |
| 1427 renderer_->FinishDrawingFrame(&frame3); | 1446 renderer_->FinishDrawingFrame(&frame3); |
| 1428 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 1447 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
| 1429 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource2)); | 1448 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource2)); |
| 1430 SwapBuffers(); | 1449 SwapBuffers(); |
| 1431 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); | 1450 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); |
| 1432 Mock::VerifyAndClearExpectations(&scheduler_); | 1451 Mock::VerifyAndClearExpectations(&scheduler_); |
| 1433 | 1452 |
| 1434 // Use the same buffer twice. | 1453 // Use the same buffer twice. |
| 1435 renderer_->set_expect_overlays(true); | 1454 renderer_->set_expect_overlays(true); |
| 1436 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(1); | 1455 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(2); |
| 1437 renderer_->BeginDrawingFrame(&frame1); | 1456 renderer_->BeginDrawingFrame(&frame1); |
| 1438 renderer_->FinishDrawingFrame(&frame1); | 1457 renderer_->FinishDrawingFrame(&frame1); |
| 1439 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 1458 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
| 1440 SwapBuffers(); | 1459 SwapBuffers(); |
| 1441 Mock::VerifyAndClearExpectations(&scheduler_); | 1460 Mock::VerifyAndClearExpectations(&scheduler_); |
| 1442 | 1461 |
| 1443 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(1); | 1462 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(2); |
| 1444 renderer_->BeginDrawingFrame(&frame1); | 1463 renderer_->BeginDrawingFrame(&frame1); |
| 1445 renderer_->FinishDrawingFrame(&frame1); | 1464 renderer_->FinishDrawingFrame(&frame1); |
| 1446 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 1465 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
| 1447 SwapBuffers(); | 1466 SwapBuffers(); |
| 1448 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 1467 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
| 1449 Mock::VerifyAndClearExpectations(&scheduler_); | 1468 Mock::VerifyAndClearExpectations(&scheduler_); |
| 1450 | 1469 |
| 1451 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(0); | 1470 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(0); |
| 1452 renderer_->set_expect_overlays(false); | 1471 renderer_->set_expect_overlays(false); |
| 1453 renderer_->BeginDrawingFrame(&frame3); | 1472 renderer_->BeginDrawingFrame(&frame3); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1468 ResourceId resource2 = CreateResource(resource_provider_.get()); | 1487 ResourceId resource2 = CreateResource(resource_provider_.get()); |
| 1469 ResourceId resource3 = CreateResource(resource_provider_.get()); | 1488 ResourceId resource3 = CreateResource(resource_provider_.get()); |
| 1470 | 1489 |
| 1471 scoped_ptr<RenderPass> pass = CreateRenderPass(); | 1490 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 1472 RenderPassList pass_list; | 1491 RenderPassList pass_list; |
| 1473 pass_list.push_back(pass.Pass()); | 1492 pass_list.push_back(pass.Pass()); |
| 1474 | 1493 |
| 1475 DirectRenderer::DrawingFrame frame1; | 1494 DirectRenderer::DrawingFrame frame1; |
| 1476 frame1.render_passes_in_draw_order = &pass_list; | 1495 frame1.render_passes_in_draw_order = &pass_list; |
| 1477 frame1.overlay_list.resize(2); | 1496 frame1.overlay_list.resize(2); |
| 1497 frame1.overlay_list.front().use_output_surface_for_resource = true; |
| 1478 OverlayCandidate& overlay1 = frame1.overlay_list.back(); | 1498 OverlayCandidate& overlay1 = frame1.overlay_list.back(); |
| 1479 overlay1.resource_id = resource1; | 1499 overlay1.resource_id = resource1; |
| 1480 overlay1.plane_z_order = 1; | 1500 overlay1.plane_z_order = 1; |
| 1481 | 1501 |
| 1482 DirectRenderer::DrawingFrame frame2; | 1502 DirectRenderer::DrawingFrame frame2; |
| 1483 frame2.render_passes_in_draw_order = &pass_list; | 1503 frame2.render_passes_in_draw_order = &pass_list; |
| 1484 frame2.overlay_list.resize(2); | 1504 frame2.overlay_list.resize(2); |
| 1505 frame2.overlay_list.front().use_output_surface_for_resource = true; |
| 1485 OverlayCandidate& overlay2 = frame2.overlay_list.back(); | 1506 OverlayCandidate& overlay2 = frame2.overlay_list.back(); |
| 1486 overlay2.resource_id = resource2; | 1507 overlay2.resource_id = resource2; |
| 1487 overlay2.plane_z_order = 1; | 1508 overlay2.plane_z_order = 1; |
| 1488 | 1509 |
| 1489 DirectRenderer::DrawingFrame frame3; | 1510 DirectRenderer::DrawingFrame frame3; |
| 1490 frame3.render_passes_in_draw_order = &pass_list; | 1511 frame3.render_passes_in_draw_order = &pass_list; |
| 1491 frame3.overlay_list.resize(2); | 1512 frame3.overlay_list.resize(2); |
| 1513 frame3.overlay_list.front().use_output_surface_for_resource = true; |
| 1492 OverlayCandidate& overlay3 = frame3.overlay_list.back(); | 1514 OverlayCandidate& overlay3 = frame3.overlay_list.back(); |
| 1493 overlay3.resource_id = resource3; | 1515 overlay3.resource_id = resource3; |
| 1494 overlay3.plane_z_order = 1; | 1516 overlay3.plane_z_order = 1; |
| 1495 | 1517 |
| 1496 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(1); | 1518 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(2); |
| 1497 renderer_->BeginDrawingFrame(&frame1); | 1519 renderer_->BeginDrawingFrame(&frame1); |
| 1498 renderer_->FinishDrawingFrame(&frame1); | 1520 renderer_->FinishDrawingFrame(&frame1); |
| 1499 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 1521 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
| 1500 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource2)); | 1522 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource2)); |
| 1501 SwapBuffers(); | 1523 SwapBuffers(); |
| 1502 Mock::VerifyAndClearExpectations(&scheduler_); | 1524 Mock::VerifyAndClearExpectations(&scheduler_); |
| 1503 | 1525 |
| 1504 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(1); | 1526 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(2); |
| 1505 renderer_->BeginDrawingFrame(&frame2); | 1527 renderer_->BeginDrawingFrame(&frame2); |
| 1506 renderer_->FinishDrawingFrame(&frame2); | 1528 renderer_->FinishDrawingFrame(&frame2); |
| 1507 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 1529 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
| 1508 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); | 1530 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); |
| 1509 SwapBuffers(); | 1531 SwapBuffers(); |
| 1510 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 1532 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
| 1511 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); | 1533 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); |
| 1512 Mock::VerifyAndClearExpectations(&scheduler_); | 1534 Mock::VerifyAndClearExpectations(&scheduler_); |
| 1513 | 1535 |
| 1514 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(1); | 1536 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(2); |
| 1515 renderer_->BeginDrawingFrame(&frame3); | 1537 renderer_->BeginDrawingFrame(&frame3); |
| 1516 renderer_->FinishDrawingFrame(&frame3); | 1538 renderer_->FinishDrawingFrame(&frame3); |
| 1517 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 1539 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
| 1518 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); | 1540 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); |
| 1519 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource3)); | 1541 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource3)); |
| 1520 SwapBuffers(); | 1542 SwapBuffers(); |
| 1521 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); | 1543 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); |
| 1522 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); | 1544 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); |
| 1523 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource3)); | 1545 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource3)); |
| 1524 Mock::VerifyAndClearExpectations(&scheduler_); | 1546 Mock::VerifyAndClearExpectations(&scheduler_); |
| 1525 | 1547 |
| 1526 // No overlays, release the resource. | 1548 // No overlays, release the resource. |
| 1527 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(0); | 1549 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(0); |
| 1528 DirectRenderer::DrawingFrame frame_no_overlays; | 1550 DirectRenderer::DrawingFrame frame_no_overlays; |
| 1529 frame_no_overlays.render_passes_in_draw_order = &pass_list; | 1551 frame_no_overlays.render_passes_in_draw_order = &pass_list; |
| 1530 renderer_->set_expect_overlays(false); | 1552 renderer_->set_expect_overlays(false); |
| 1531 renderer_->BeginDrawingFrame(&frame_no_overlays); | 1553 renderer_->BeginDrawingFrame(&frame_no_overlays); |
| 1532 renderer_->FinishDrawingFrame(&frame_no_overlays); | 1554 renderer_->FinishDrawingFrame(&frame_no_overlays); |
| 1533 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); | 1555 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); |
| 1534 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); | 1556 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); |
| 1535 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource3)); | 1557 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource3)); |
| 1536 SwapBuffers(); | 1558 SwapBuffers(); |
| 1537 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); | 1559 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); |
| 1538 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource2)); | 1560 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource2)); |
| 1539 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource3)); | 1561 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource3)); |
| 1540 Mock::VerifyAndClearExpectations(&scheduler_); | 1562 Mock::VerifyAndClearExpectations(&scheduler_); |
| 1541 | 1563 |
| 1542 // Use the same buffer twice. | 1564 // Use the same buffer twice. |
| 1543 renderer_->set_expect_overlays(true); | 1565 renderer_->set_expect_overlays(true); |
| 1544 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(1); | 1566 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(2); |
| 1545 renderer_->BeginDrawingFrame(&frame1); | 1567 renderer_->BeginDrawingFrame(&frame1); |
| 1546 renderer_->FinishDrawingFrame(&frame1); | 1568 renderer_->FinishDrawingFrame(&frame1); |
| 1547 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 1569 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
| 1548 SwapBuffers(); | 1570 SwapBuffers(); |
| 1549 Mock::VerifyAndClearExpectations(&scheduler_); | 1571 Mock::VerifyAndClearExpectations(&scheduler_); |
| 1550 | 1572 |
| 1551 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(1); | 1573 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(2); |
| 1552 renderer_->BeginDrawingFrame(&frame1); | 1574 renderer_->BeginDrawingFrame(&frame1); |
| 1553 renderer_->FinishDrawingFrame(&frame1); | 1575 renderer_->FinishDrawingFrame(&frame1); |
| 1554 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 1576 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
| 1555 SwapBuffers(); | 1577 SwapBuffers(); |
| 1556 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 1578 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
| 1557 Mock::VerifyAndClearExpectations(&scheduler_); | 1579 Mock::VerifyAndClearExpectations(&scheduler_); |
| 1558 | 1580 |
| 1559 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(0); | 1581 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(0); |
| 1560 renderer_->set_expect_overlays(false); | 1582 renderer_->set_expect_overlays(false); |
| 1561 renderer_->BeginDrawingFrame(&frame_no_overlays); | 1583 renderer_->BeginDrawingFrame(&frame_no_overlays); |
| 1562 renderer_->FinishDrawingFrame(&frame_no_overlays); | 1584 renderer_->FinishDrawingFrame(&frame_no_overlays); |
| 1563 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 1585 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
| 1564 SwapBuffers(); | 1586 SwapBuffers(); |
| 1565 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 1587 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
| 1566 Mock::VerifyAndClearExpectations(&scheduler_); | 1588 Mock::VerifyAndClearExpectations(&scheduler_); |
| 1567 | 1589 |
| 1568 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(0); | 1590 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(0); |
| 1569 renderer_->set_expect_overlays(false); | 1591 renderer_->set_expect_overlays(false); |
| 1570 renderer_->BeginDrawingFrame(&frame_no_overlays); | 1592 renderer_->BeginDrawingFrame(&frame_no_overlays); |
| 1571 renderer_->FinishDrawingFrame(&frame_no_overlays); | 1593 renderer_->FinishDrawingFrame(&frame_no_overlays); |
| 1572 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 1594 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
| 1573 SwapBuffers(); | 1595 SwapBuffers(); |
| 1574 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); | 1596 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); |
| 1575 Mock::VerifyAndClearExpectations(&scheduler_); | 1597 Mock::VerifyAndClearExpectations(&scheduler_); |
| 1576 } | 1598 } |
| 1577 | 1599 |
| 1578 } // namespace | 1600 } // namespace |
| 1579 } // namespace cc | 1601 } // namespace cc |
| OLD | NEW |