Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(211)

Side by Side Diff: cc/output/overlay_unittest.cc

Issue 1383293002: Revert of Overlays: Remove special casing of primary overlay plane (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « cc/output/overlay_strategy_common.cc ('k') | content/browser/compositor/gpu_surfaceless_browser_compositor_output_surface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698