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