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

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

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