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

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

Issue 2736643004: Add DCLayerOverlayProcessor and supporting DCLayer structures. (Closed)
Patch Set: split CALayerOverlay into DCLayerOverlay Created 3 years, 9 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 <stddef.h> 5 #include <stddef.h>
6 6
7 #include <utility> 7 #include <utility>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 void MailboxReleased(const gpu::SyncToken& sync_token, 66 void MailboxReleased(const gpu::SyncToken& sync_token,
67 bool lost_resource, 67 bool lost_resource,
68 BlockingTaskRunner* main_thread_task_runner) {} 68 BlockingTaskRunner* main_thread_task_runner) {}
69 69
70 class FullscreenOverlayValidator : public OverlayCandidateValidator { 70 class FullscreenOverlayValidator : public OverlayCandidateValidator {
71 public: 71 public:
72 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { 72 void GetStrategies(OverlayProcessor::StrategyList* strategies) override {
73 strategies->push_back(base::MakeUnique<OverlayStrategyFullscreen>(this)); 73 strategies->push_back(base::MakeUnique<OverlayStrategyFullscreen>(this));
74 } 74 }
75 bool AllowCALayerOverlays() override { return false; } 75 bool AllowCALayerOverlays() override { return false; }
76 bool AllowDCLayerOverlays() override { return false; }
76 void CheckOverlaySupport(OverlayCandidateList* surfaces) override {} 77 void CheckOverlaySupport(OverlayCandidateList* surfaces) override {}
77 }; 78 };
78 79
79 class SingleOverlayValidator : public OverlayCandidateValidator { 80 class SingleOverlayValidator : public OverlayCandidateValidator {
80 public: 81 public:
81 SingleOverlayValidator() : expected_rect_(kOverlayRect) {} 82 SingleOverlayValidator() : expected_rect_(kOverlayRect) {}
82 83
83 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { 84 void GetStrategies(OverlayProcessor::StrategyList* strategies) override {
84 strategies->push_back(base::MakeUnique<OverlayStrategySingleOnTop>(this)); 85 strategies->push_back(base::MakeUnique<OverlayStrategySingleOnTop>(this));
85 strategies->push_back(base::MakeUnique<OverlayStrategyUnderlay>(this)); 86 strategies->push_back(base::MakeUnique<OverlayStrategyUnderlay>(this));
86 } 87 }
87 bool AllowCALayerOverlays() override { return false; } 88 bool AllowCALayerOverlays() override { return false; }
89 bool AllowDCLayerOverlays() override { return false; }
88 void CheckOverlaySupport(OverlayCandidateList* surfaces) override { 90 void CheckOverlaySupport(OverlayCandidateList* surfaces) override {
89 // We may have 1 or 2 surfaces depending on whether this ran through the 91 // We may have 1 or 2 surfaces depending on whether this ran through the
90 // full renderer and picked up the output surface, or not. 92 // full renderer and picked up the output surface, or not.
91 ASSERT_LE(1U, surfaces->size()); 93 ASSERT_LE(1U, surfaces->size());
92 ASSERT_GE(2U, surfaces->size()); 94 ASSERT_GE(2U, surfaces->size());
93 95
94 OverlayCandidate& candidate = surfaces->back(); 96 OverlayCandidate& candidate = surfaces->back();
95 EXPECT_TRUE(!candidate.use_output_surface_for_resource); 97 EXPECT_TRUE(!candidate.use_output_surface_for_resource);
96 EXPECT_NEAR(expected_rect_.x(), candidate.display_rect.x(), 0.01f); 98 EXPECT_NEAR(expected_rect_.x(), candidate.display_rect.x(), 0.01f);
97 EXPECT_NEAR(expected_rect_.y(), candidate.display_rect.y(), 0.01f); 99 EXPECT_NEAR(expected_rect_.y(), candidate.display_rect.y(), 0.01f);
(...skipping 13 matching lines...) Expand all
111 void SetExpectedRect(const gfx::RectF& rect) { expected_rect_ = rect; } 113 void SetExpectedRect(const gfx::RectF& rect) { expected_rect_ = rect; }
112 114
113 private: 115 private:
114 gfx::RectF expected_rect_; 116 gfx::RectF expected_rect_;
115 }; 117 };
116 118
117 class CALayerValidator : public OverlayCandidateValidator { 119 class CALayerValidator : public OverlayCandidateValidator {
118 public: 120 public:
119 void GetStrategies(OverlayProcessor::StrategyList* strategies) override {} 121 void GetStrategies(OverlayProcessor::StrategyList* strategies) override {}
120 bool AllowCALayerOverlays() override { return true; } 122 bool AllowCALayerOverlays() override { return true; }
123 bool AllowDCLayerOverlays() override { return false; }
121 void CheckOverlaySupport(OverlayCandidateList* surfaces) override {} 124 void CheckOverlaySupport(OverlayCandidateList* surfaces) override {}
122 }; 125 };
123 126
127 class DCLayerValidator : public OverlayCandidateValidator {
128 public:
129 void GetStrategies(OverlayProcessor::StrategyList* strategies) override {}
130 bool AllowCALayerOverlays() override { return false; }
131 bool AllowDCLayerOverlays() override { return true; }
132 void CheckOverlaySupport(OverlayCandidateList* surfaces) override {}
133 };
134
124 class SingleOnTopOverlayValidator : public SingleOverlayValidator { 135 class SingleOnTopOverlayValidator : public SingleOverlayValidator {
125 public: 136 public:
126 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { 137 void GetStrategies(OverlayProcessor::StrategyList* strategies) override {
127 strategies->push_back(base::MakeUnique<OverlayStrategySingleOnTop>(this)); 138 strategies->push_back(base::MakeUnique<OverlayStrategySingleOnTop>(this));
128 } 139 }
129 }; 140 };
130 141
131 class UnderlayOverlayValidator : public SingleOverlayValidator { 142 class UnderlayOverlayValidator : public SingleOverlayValidator {
132 public: 143 public:
133 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { 144 void GetStrategies(OverlayProcessor::StrategyList* strategies) override {
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 StreamVideoDrawQuad* CreateFullscreenCandidateVideoQuad( 325 StreamVideoDrawQuad* CreateFullscreenCandidateVideoQuad(
315 ResourceProvider* resource_provider, 326 ResourceProvider* resource_provider,
316 const SharedQuadState* shared_quad_state, 327 const SharedQuadState* shared_quad_state,
317 RenderPass* render_pass, 328 RenderPass* render_pass,
318 const gfx::Transform& transform) { 329 const gfx::Transform& transform) {
319 return CreateCandidateVideoQuadAt(resource_provider, shared_quad_state, 330 return CreateCandidateVideoQuadAt(resource_provider, shared_quad_state,
320 render_pass, render_pass->output_rect, 331 render_pass, render_pass->output_rect,
321 transform); 332 transform);
322 } 333 }
323 334
335 YUVVideoDrawQuad* CreateFullscreenCandidateYUVVideoQuad(
336 ResourceProvider* resource_provider,
337 const SharedQuadState* shared_quad_state,
338 RenderPass* render_pass) {
339 gfx::RectF tex_coord_rect(0, 0, 1, 1);
340 gfx::Rect rect = render_pass->output_rect;
341 gfx::Size resource_size_in_pixels = rect.size();
342 bool is_overlay_candidate = true;
343 ResourceId resource_id = CreateResource(
344 resource_provider, resource_size_in_pixels, is_overlay_candidate);
345
346 YUVVideoDrawQuad* overlay_quad =
347 render_pass->CreateAndAppendDrawQuad<YUVVideoDrawQuad>();
348 overlay_quad->SetNew(shared_quad_state, rect, rect, rect, tex_coord_rect,
349 tex_coord_rect, resource_size_in_pixels,
350 resource_size_in_pixels, resource_id, resource_id,
351 resource_id, resource_id, YUVVideoDrawQuad::REC_601,
352 gfx::ColorSpace(), 0, 1.0, 8);
353
354 return overlay_quad;
355 }
356
324 void CreateOpaqueQuadAt(ResourceProvider* resource_provider, 357 void CreateOpaqueQuadAt(ResourceProvider* resource_provider,
325 const SharedQuadState* shared_quad_state, 358 const SharedQuadState* shared_quad_state,
326 RenderPass* render_pass, 359 RenderPass* render_pass,
327 const gfx::Rect& rect) { 360 const gfx::Rect& rect) {
328 SolidColorDrawQuad* color_quad = 361 SolidColorDrawQuad* color_quad =
329 render_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); 362 render_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
330 color_quad->SetNew(shared_quad_state, rect, rect, SK_ColorBLACK, false); 363 color_quad->SetNew(shared_quad_state, rect, rect, SK_ColorBLACK, false);
331 } 364 }
332 365
333 void CreateOpaqueQuadAt(ResourceProvider* resource_provider, 366 void CreateOpaqueQuadAt(ResourceProvider* resource_provider,
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 std::unique_ptr<OverlayProcessor> overlay_processor_; 440 std::unique_ptr<OverlayProcessor> overlay_processor_;
408 gfx::Rect damage_rect_; 441 gfx::Rect damage_rect_;
409 std::vector<gfx::Rect> content_bounds_; 442 std::vector<gfx::Rect> content_bounds_;
410 }; 443 };
411 444
412 using FullscreenOverlayTest = OverlayTest<FullscreenOverlayValidator>; 445 using FullscreenOverlayTest = OverlayTest<FullscreenOverlayValidator>;
413 using SingleOverlayOnTopTest = OverlayTest<SingleOnTopOverlayValidator>; 446 using SingleOverlayOnTopTest = OverlayTest<SingleOnTopOverlayValidator>;
414 using UnderlayTest = OverlayTest<UnderlayOverlayValidator>; 447 using UnderlayTest = OverlayTest<UnderlayOverlayValidator>;
415 using UnderlayCastTest = OverlayTest<UnderlayCastOverlayValidator>; 448 using UnderlayCastTest = OverlayTest<UnderlayCastOverlayValidator>;
416 using CALayerOverlayTest = OverlayTest<CALayerValidator>; 449 using CALayerOverlayTest = OverlayTest<CALayerValidator>;
450 using DCLayerOverlayTest = OverlayTest<DCLayerValidator>;
417 451
418 TEST(OverlayTest, NoOverlaysByDefault) { 452 TEST(OverlayTest, NoOverlaysByDefault) {
419 scoped_refptr<TestContextProvider> provider = TestContextProvider::Create(); 453 scoped_refptr<TestContextProvider> provider = TestContextProvider::Create();
420 OverlayOutputSurface<OverlayCandidateValidator> output_surface(provider); 454 OverlayOutputSurface<OverlayCandidateValidator> output_surface(provider);
421 EXPECT_EQ(NULL, output_surface.GetOverlayCandidateValidator()); 455 EXPECT_EQ(NULL, output_surface.GetOverlayCandidateValidator());
422 456
423 output_surface.SetOverlayCandidateValidator(new SingleOverlayValidator); 457 output_surface.SetOverlayCandidateValidator(new SingleOverlayValidator);
424 EXPECT_TRUE(output_surface.GetOverlayCandidateValidator() != NULL); 458 EXPECT_TRUE(output_surface.GetOverlayCandidateValidator() != NULL);
425 } 459 }
426 460
(...skipping 26 matching lines...) Expand all
453 // Add something behind it. 487 // Add something behind it.
454 CreateFullscreenOpaqueQuad(resource_provider_.get(), 488 CreateFullscreenOpaqueQuad(resource_provider_.get(),
455 pass->shared_quad_state_list.back(), pass.get()); 489 pass->shared_quad_state_list.back(), pass.get());
456 490
457 // Check for potential candidates. 491 // Check for potential candidates.
458 OverlayCandidateList candidate_list; 492 OverlayCandidateList candidate_list;
459 RenderPassFilterList render_pass_filters; 493 RenderPassFilterList render_pass_filters;
460 RenderPassFilterList render_pass_background_filters; 494 RenderPassFilterList render_pass_background_filters;
461 overlay_processor_->ProcessForOverlays( 495 overlay_processor_->ProcessForOverlays(
462 resource_provider_.get(), pass.get(), render_pass_filters, 496 resource_provider_.get(), pass.get(), render_pass_filters,
463 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 497 render_pass_background_filters, &candidate_list, nullptr, nullptr,
464 &content_bounds_); 498 &damage_rect_, &content_bounds_);
465 ASSERT_EQ(1U, candidate_list.size()); 499 ASSERT_EQ(1U, candidate_list.size());
466 500
467 RenderPass* main_pass = pass.get(); 501 RenderPass* main_pass = pass.get();
468 // Check that all the quads are gone. 502 // Check that all the quads are gone.
469 EXPECT_EQ(0U, main_pass->quad_list.size()); 503 EXPECT_EQ(0U, main_pass->quad_list.size());
470 // Check that we have only one overlay. 504 // Check that we have only one overlay.
471 EXPECT_EQ(1U, candidate_list.size()); 505 EXPECT_EQ(1U, candidate_list.size());
472 // Check that the right resource id got extracted. 506 // Check that the right resource id got extracted.
473 EXPECT_EQ(original_resource_id, candidate_list.front().resource_id); 507 EXPECT_EQ(original_resource_id, candidate_list.front().resource_id);
474 } 508 }
475 509
476 TEST_F(FullscreenOverlayTest, ResourceSizeInPixelsFail) { 510 TEST_F(FullscreenOverlayTest, ResourceSizeInPixelsFail) {
477 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 511 std::unique_ptr<RenderPass> pass = CreateRenderPass();
478 TextureDrawQuad* original_quad = CreateFullscreenCandidateQuad( 512 TextureDrawQuad* original_quad = CreateFullscreenCandidateQuad(
479 resource_provider_.get(), pass->shared_quad_state_list.back(), 513 resource_provider_.get(), pass->shared_quad_state_list.back(),
480 pass.get()); 514 pass.get());
481 original_quad->set_resource_size_in_pixels(gfx::Size(64, 64)); 515 original_quad->set_resource_size_in_pixels(gfx::Size(64, 64));
482 516
483 // Check for potential candidates. 517 // Check for potential candidates.
484 OverlayCandidateList candidate_list; 518 OverlayCandidateList candidate_list;
485 RenderPassFilterList render_pass_filters; 519 RenderPassFilterList render_pass_filters;
486 RenderPassFilterList render_pass_background_filters; 520 RenderPassFilterList render_pass_background_filters;
487 overlay_processor_->ProcessForOverlays( 521 overlay_processor_->ProcessForOverlays(
488 resource_provider_.get(), pass.get(), render_pass_filters, 522 resource_provider_.get(), pass.get(), render_pass_filters,
489 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 523 render_pass_background_filters, &candidate_list, nullptr, nullptr,
490 &content_bounds_); 524 &damage_rect_, &content_bounds_);
491 ASSERT_EQ(0U, candidate_list.size()); 525 ASSERT_EQ(0U, candidate_list.size());
492 526
493 RenderPass* main_pass = pass.get(); 527 RenderPass* main_pass = pass.get();
494 // Check that the quad is not gone. 528 // Check that the quad is not gone.
495 EXPECT_EQ(1U, main_pass->quad_list.size()); 529 EXPECT_EQ(1U, main_pass->quad_list.size());
496 } 530 }
497 531
498 TEST_F(FullscreenOverlayTest, OnTopFail) { 532 TEST_F(FullscreenOverlayTest, OnTopFail) {
499 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 533 std::unique_ptr<RenderPass> pass = CreateRenderPass();
500 534
501 // Add something in front of it. 535 // Add something in front of it.
502 CreateOpaqueQuadAt(resource_provider_.get(), 536 CreateOpaqueQuadAt(resource_provider_.get(),
503 pass->shared_quad_state_list.back(), pass.get(), 537 pass->shared_quad_state_list.back(), pass.get(),
504 kOverlayTopLeftRect); 538 kOverlayTopLeftRect);
505 539
506 CreateFullscreenCandidateQuad(resource_provider_.get(), 540 CreateFullscreenCandidateQuad(resource_provider_.get(),
507 pass->shared_quad_state_list.back(), 541 pass->shared_quad_state_list.back(),
508 pass.get()); 542 pass.get());
509 543
510 // Check for potential candidates. 544 // Check for potential candidates.
511 OverlayCandidateList candidate_list; 545 OverlayCandidateList candidate_list;
512 RenderPassFilterList render_pass_filters; 546 RenderPassFilterList render_pass_filters;
513 RenderPassFilterList render_pass_background_filters; 547 RenderPassFilterList render_pass_background_filters;
514 overlay_processor_->ProcessForOverlays( 548 overlay_processor_->ProcessForOverlays(
515 resource_provider_.get(), pass.get(), render_pass_filters, 549 resource_provider_.get(), pass.get(), render_pass_filters,
516 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 550 render_pass_background_filters, &candidate_list, nullptr, nullptr,
517 &content_bounds_); 551 &damage_rect_, &content_bounds_);
518 ASSERT_EQ(0U, candidate_list.size()); 552 ASSERT_EQ(0U, candidate_list.size());
519 553
520 RenderPass* main_pass = pass.get(); 554 RenderPass* main_pass = pass.get();
521 // Check that the 2 quads are not gone. 555 // Check that the 2 quads are not gone.
522 EXPECT_EQ(2U, main_pass->quad_list.size()); 556 EXPECT_EQ(2U, main_pass->quad_list.size());
523 } 557 }
524 558
525 TEST_F(FullscreenOverlayTest, NotCoveringFullscreenFail) { 559 TEST_F(FullscreenOverlayTest, NotCoveringFullscreenFail) {
526 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 560 std::unique_ptr<RenderPass> pass = CreateRenderPass();
527 gfx::Rect inset_rect = pass->output_rect; 561 gfx::Rect inset_rect = pass->output_rect;
528 inset_rect.Inset(0, 1, 0, 1); 562 inset_rect.Inset(0, 1, 0, 1);
529 CreateCandidateQuadAt(resource_provider_.get(), 563 CreateCandidateQuadAt(resource_provider_.get(),
530 pass->shared_quad_state_list.back(), pass.get(), 564 pass->shared_quad_state_list.back(), pass.get(),
531 inset_rect); 565 inset_rect);
532 566
533 // Check for potential candidates. 567 // Check for potential candidates.
534 OverlayCandidateList candidate_list; 568 OverlayCandidateList candidate_list;
535 RenderPassFilterList render_pass_filters; 569 RenderPassFilterList render_pass_filters;
536 RenderPassFilterList render_pass_background_filters; 570 RenderPassFilterList render_pass_background_filters;
537 overlay_processor_->ProcessForOverlays( 571 overlay_processor_->ProcessForOverlays(
538 resource_provider_.get(), pass.get(), render_pass_filters, 572 resource_provider_.get(), pass.get(), render_pass_filters,
539 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 573 render_pass_background_filters, &candidate_list, nullptr, nullptr,
540 &content_bounds_); 574 &damage_rect_, &content_bounds_);
541 ASSERT_EQ(0U, candidate_list.size()); 575 ASSERT_EQ(0U, candidate_list.size());
542 576
543 RenderPass* main_pass = pass.get(); 577 RenderPass* main_pass = pass.get();
544 // Check that the quad is not gone. 578 // Check that the quad is not gone.
545 EXPECT_EQ(1U, main_pass->quad_list.size()); 579 EXPECT_EQ(1U, main_pass->quad_list.size());
546 } 580 }
547 581
548 TEST_F(FullscreenOverlayTest, RemoveFullscreenQuadFromQuadList) { 582 TEST_F(FullscreenOverlayTest, RemoveFullscreenQuadFromQuadList) {
549 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 583 std::unique_ptr<RenderPass> pass = CreateRenderPass();
550 584
551 // Add something in front of it that is fully transparent. 585 // Add something in front of it that is fully transparent.
552 pass->shared_quad_state_list.back()->opacity = 0.0f; 586 pass->shared_quad_state_list.back()->opacity = 0.0f;
553 CreateOpaqueQuadAt(resource_provider_.get(), 587 CreateOpaqueQuadAt(resource_provider_.get(),
554 pass->shared_quad_state_list.back(), pass.get(), 588 pass->shared_quad_state_list.back(), pass.get(),
555 kOverlayTopLeftRect); 589 kOverlayTopLeftRect);
556 590
557 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); 591 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState();
558 shared_state->opacity = 1.f; 592 shared_state->opacity = 1.f;
559 CreateFullscreenCandidateQuad(resource_provider_.get(), 593 CreateFullscreenCandidateQuad(resource_provider_.get(),
560 pass->shared_quad_state_list.back(), 594 pass->shared_quad_state_list.back(),
561 pass.get()); 595 pass.get());
562 596
563 // Check for potential candidates. 597 // Check for potential candidates.
564 OverlayCandidateList candidate_list; 598 OverlayCandidateList candidate_list;
565 RenderPassFilterList render_pass_filters; 599 RenderPassFilterList render_pass_filters;
566 RenderPassFilterList render_pass_background_filters; 600 RenderPassFilterList render_pass_background_filters;
567 overlay_processor_->ProcessForOverlays( 601 overlay_processor_->ProcessForOverlays(
568 resource_provider_.get(), pass.get(), render_pass_filters, 602 resource_provider_.get(), pass.get(), render_pass_filters,
569 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 603 render_pass_background_filters, &candidate_list, nullptr, nullptr,
570 &content_bounds_); 604 &damage_rect_, &content_bounds_);
571 ASSERT_EQ(1U, candidate_list.size()); 605 ASSERT_EQ(1U, candidate_list.size());
572 606
573 // Check that the fullscreen quad is gone. 607 // Check that the fullscreen quad is gone.
574 for (const DrawQuad* quad : pass->quad_list) { 608 for (const DrawQuad* quad : pass->quad_list) {
575 EXPECT_NE(pass->output_rect, quad->rect); 609 EXPECT_NE(pass->output_rect, quad->rect);
576 } 610 }
577 } 611 }
578 612
579 TEST_F(SingleOverlayOnTopTest, SuccessfulOverlay) { 613 TEST_F(SingleOverlayOnTopTest, SuccessfulOverlay) {
580 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 614 std::unique_ptr<RenderPass> pass = CreateRenderPass();
581 TextureDrawQuad* original_quad = 615 TextureDrawQuad* original_quad =
582 CreateFullscreenCandidateQuad(resource_provider_.get(), 616 CreateFullscreenCandidateQuad(resource_provider_.get(),
583 pass->shared_quad_state_list.back(), 617 pass->shared_quad_state_list.back(),
584 pass.get()); 618 pass.get());
585 unsigned original_resource_id = original_quad->resource_id(); 619 unsigned original_resource_id = original_quad->resource_id();
586 620
587 // Add something behind it. 621 // Add something behind it.
588 CreateFullscreenOpaqueQuad(resource_provider_.get(), 622 CreateFullscreenOpaqueQuad(resource_provider_.get(),
589 pass->shared_quad_state_list.back(), pass.get()); 623 pass->shared_quad_state_list.back(), pass.get());
590 CreateFullscreenOpaqueQuad(resource_provider_.get(), 624 CreateFullscreenOpaqueQuad(resource_provider_.get(),
591 pass->shared_quad_state_list.back(), pass.get()); 625 pass->shared_quad_state_list.back(), pass.get());
592 626
593 // Check for potential candidates. 627 // Check for potential candidates.
594 OverlayCandidateList candidate_list; 628 OverlayCandidateList candidate_list;
595 RenderPassFilterList render_pass_filters; 629 RenderPassFilterList render_pass_filters;
596 RenderPassFilterList render_pass_background_filters; 630 RenderPassFilterList render_pass_background_filters;
597 overlay_processor_->ProcessForOverlays( 631 overlay_processor_->ProcessForOverlays(
598 resource_provider_.get(), pass.get(), render_pass_filters, 632 resource_provider_.get(), pass.get(), render_pass_filters,
599 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 633 render_pass_background_filters, &candidate_list, nullptr, nullptr,
600 &content_bounds_); 634 &damage_rect_, &content_bounds_);
601 ASSERT_EQ(1U, candidate_list.size()); 635 ASSERT_EQ(1U, candidate_list.size());
602 636
603 RenderPass* main_pass = pass.get(); 637 RenderPass* main_pass = pass.get();
604 // Check that the quad is gone. 638 // Check that the quad is gone.
605 EXPECT_EQ(2U, main_pass->quad_list.size()); 639 EXPECT_EQ(2U, main_pass->quad_list.size());
606 const QuadList& quad_list = main_pass->quad_list; 640 const QuadList& quad_list = main_pass->quad_list;
607 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); 641 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin();
608 it != quad_list.BackToFrontEnd(); 642 it != quad_list.BackToFrontEnd();
609 ++it) { 643 ++it) {
610 EXPECT_NE(DrawQuad::TEXTURE_CONTENT, it->material); 644 EXPECT_NE(DrawQuad::TEXTURE_CONTENT, it->material);
(...skipping 24 matching lines...) Expand all
635 output_surface_plane.display_rect = gfx::RectF(kOverlayRect); 669 output_surface_plane.display_rect = gfx::RectF(kOverlayRect);
636 output_surface_plane.quad_rect_in_target_space = kOverlayRect; 670 output_surface_plane.quad_rect_in_target_space = kOverlayRect;
637 output_surface_plane.use_output_surface_for_resource = true; 671 output_surface_plane.use_output_surface_for_resource = true;
638 output_surface_plane.overlay_handled = true; 672 output_surface_plane.overlay_handled = true;
639 candidate_list.push_back(output_surface_plane); 673 candidate_list.push_back(output_surface_plane);
640 674
641 RenderPassFilterList render_pass_filters; 675 RenderPassFilterList render_pass_filters;
642 RenderPassFilterList render_pass_background_filters; 676 RenderPassFilterList render_pass_background_filters;
643 overlay_processor_->ProcessForOverlays( 677 overlay_processor_->ProcessForOverlays(
644 resource_provider_.get(), pass.get(), render_pass_filters, 678 resource_provider_.get(), pass.get(), render_pass_filters,
645 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 679 render_pass_background_filters, &candidate_list, nullptr, nullptr,
646 &content_bounds_); 680 &damage_rect_, &content_bounds_);
647 DCHECK(damage_rect_.IsEmpty()); 681 DCHECK(damage_rect_.IsEmpty());
648 } 682 }
649 683
650 TEST_F(SingleOverlayOnTopTest, NoCandidates) { 684 TEST_F(SingleOverlayOnTopTest, NoCandidates) {
651 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 685 std::unique_ptr<RenderPass> pass = CreateRenderPass();
652 CreateFullscreenOpaqueQuad(resource_provider_.get(), 686 CreateFullscreenOpaqueQuad(resource_provider_.get(),
653 pass->shared_quad_state_list.back(), pass.get()); 687 pass->shared_quad_state_list.back(), pass.get());
654 CreateFullscreenOpaqueQuad(resource_provider_.get(), 688 CreateFullscreenOpaqueQuad(resource_provider_.get(),
655 pass->shared_quad_state_list.back(), pass.get()); 689 pass->shared_quad_state_list.back(), pass.get());
656 690
657 RenderPassList pass_list; 691 RenderPassList pass_list;
658 pass_list.push_back(std::move(pass)); 692 pass_list.push_back(std::move(pass));
659 693
660 RenderPassList original_pass_list; 694 RenderPassList original_pass_list;
661 RenderPass::CopyAll(pass_list, &original_pass_list); 695 RenderPass::CopyAll(pass_list, &original_pass_list);
662 696
663 OverlayCandidateList candidate_list; 697 OverlayCandidateList candidate_list;
664 RenderPassFilterList render_pass_filters; 698 RenderPassFilterList render_pass_filters;
665 RenderPassFilterList render_pass_background_filters; 699 RenderPassFilterList render_pass_background_filters;
666 overlay_processor_->ProcessForOverlays( 700 overlay_processor_->ProcessForOverlays(
667 resource_provider_.get(), pass_list.back().get(), render_pass_filters, 701 resource_provider_.get(), pass_list.back().get(), render_pass_filters,
668 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 702 render_pass_background_filters, &candidate_list, nullptr, nullptr,
669 &content_bounds_); 703 &damage_rect_, &content_bounds_);
670 EXPECT_EQ(0U, candidate_list.size()); 704 EXPECT_EQ(0U, candidate_list.size());
671 // There should be nothing new here. 705 // There should be nothing new here.
672 CompareRenderPassLists(pass_list, original_pass_list); 706 CompareRenderPassLists(pass_list, original_pass_list);
673 } 707 }
674 708
675 TEST_F(SingleOverlayOnTopTest, OccludedCandidates) { 709 TEST_F(SingleOverlayOnTopTest, OccludedCandidates) {
676 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 710 std::unique_ptr<RenderPass> pass = CreateRenderPass();
677 CreateFullscreenOpaqueQuad(resource_provider_.get(), 711 CreateFullscreenOpaqueQuad(resource_provider_.get(),
678 pass->shared_quad_state_list.back(), pass.get()); 712 pass->shared_quad_state_list.back(), pass.get());
679 CreateFullscreenOpaqueQuad(resource_provider_.get(), 713 CreateFullscreenOpaqueQuad(resource_provider_.get(),
680 pass->shared_quad_state_list.back(), pass.get()); 714 pass->shared_quad_state_list.back(), pass.get());
681 715
682 CreateFullscreenCandidateQuad(resource_provider_.get(), 716 CreateFullscreenCandidateQuad(resource_provider_.get(),
683 pass->shared_quad_state_list.back(), 717 pass->shared_quad_state_list.back(),
684 pass.get()); 718 pass.get());
685 719
686 RenderPassList pass_list; 720 RenderPassList pass_list;
687 pass_list.push_back(std::move(pass)); 721 pass_list.push_back(std::move(pass));
688 722
689 RenderPassList original_pass_list; 723 RenderPassList original_pass_list;
690 RenderPass::CopyAll(pass_list, &original_pass_list); 724 RenderPass::CopyAll(pass_list, &original_pass_list);
691 725
692 OverlayCandidateList candidate_list; 726 OverlayCandidateList candidate_list;
693 RenderPassFilterList render_pass_filters; 727 RenderPassFilterList render_pass_filters;
694 RenderPassFilterList render_pass_background_filters; 728 RenderPassFilterList render_pass_background_filters;
695 overlay_processor_->ProcessForOverlays( 729 overlay_processor_->ProcessForOverlays(
696 resource_provider_.get(), pass_list.back().get(), render_pass_filters, 730 resource_provider_.get(), pass_list.back().get(), render_pass_filters,
697 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 731 render_pass_background_filters, &candidate_list, nullptr, nullptr,
698 &content_bounds_); 732 &damage_rect_, &content_bounds_);
699 EXPECT_EQ(0U, candidate_list.size()); 733 EXPECT_EQ(0U, candidate_list.size());
700 // There should be nothing new here. 734 // There should be nothing new here.
701 CompareRenderPassLists(pass_list, original_pass_list); 735 CompareRenderPassLists(pass_list, original_pass_list);
702 } 736 }
703 737
704 // Test with multiple render passes. 738 // Test with multiple render passes.
705 TEST_F(SingleOverlayOnTopTest, MultipleRenderPasses) { 739 TEST_F(SingleOverlayOnTopTest, MultipleRenderPasses) {
706 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 740 std::unique_ptr<RenderPass> pass = CreateRenderPass();
707 CreateFullscreenCandidateQuad(resource_provider_.get(), 741 CreateFullscreenCandidateQuad(resource_provider_.get(),
708 pass->shared_quad_state_list.back(), 742 pass->shared_quad_state_list.back(),
709 pass.get()); 743 pass.get());
710 744
711 // Add something behind it. 745 // Add something behind it.
712 CreateFullscreenOpaqueQuad(resource_provider_.get(), 746 CreateFullscreenOpaqueQuad(resource_provider_.get(),
713 pass->shared_quad_state_list.back(), pass.get()); 747 pass->shared_quad_state_list.back(), pass.get());
714 CreateFullscreenOpaqueQuad(resource_provider_.get(), 748 CreateFullscreenOpaqueQuad(resource_provider_.get(),
715 pass->shared_quad_state_list.back(), pass.get()); 749 pass->shared_quad_state_list.back(), pass.get());
716 750
717 // Check for potential candidates. 751 // Check for potential candidates.
718 OverlayCandidateList candidate_list; 752 OverlayCandidateList candidate_list;
719 RenderPassFilterList render_pass_filters; 753 RenderPassFilterList render_pass_filters;
720 RenderPassFilterList render_pass_background_filters; 754 RenderPassFilterList render_pass_background_filters;
721 overlay_processor_->ProcessForOverlays( 755 overlay_processor_->ProcessForOverlays(
722 resource_provider_.get(), pass.get(), render_pass_filters, 756 resource_provider_.get(), pass.get(), render_pass_filters,
723 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 757 render_pass_background_filters, &candidate_list, nullptr, nullptr,
724 &content_bounds_); 758 &damage_rect_, &content_bounds_);
725 EXPECT_EQ(1U, candidate_list.size()); 759 EXPECT_EQ(1U, candidate_list.size());
726 } 760 }
727 761
728 TEST_F(SingleOverlayOnTopTest, RejectBlending) { 762 TEST_F(SingleOverlayOnTopTest, RejectBlending) {
729 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 763 std::unique_ptr<RenderPass> pass = CreateRenderPass();
730 TextureDrawQuad* quad = 764 TextureDrawQuad* quad =
731 CreateFullscreenCandidateQuad(resource_provider_.get(), 765 CreateFullscreenCandidateQuad(resource_provider_.get(),
732 pass->shared_quad_state_list.back(), 766 pass->shared_quad_state_list.back(),
733 pass.get()); 767 pass.get());
734 quad->needs_blending = true; 768 quad->needs_blending = true;
735 769
736 OverlayCandidateList candidate_list; 770 OverlayCandidateList candidate_list;
737 RenderPassFilterList render_pass_filters; 771 RenderPassFilterList render_pass_filters;
738 RenderPassFilterList render_pass_background_filters; 772 RenderPassFilterList render_pass_background_filters;
739 overlay_processor_->ProcessForOverlays( 773 overlay_processor_->ProcessForOverlays(
740 resource_provider_.get(), pass.get(), render_pass_filters, 774 resource_provider_.get(), pass.get(), render_pass_filters,
741 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 775 render_pass_background_filters, &candidate_list, nullptr, nullptr,
742 &content_bounds_); 776 &damage_rect_, &content_bounds_);
743 EXPECT_EQ(0U, candidate_list.size()); 777 EXPECT_EQ(0U, candidate_list.size());
744 } 778 }
745 779
746 TEST_F(SingleOverlayOnTopTest, RejectBackgroundColor) { 780 TEST_F(SingleOverlayOnTopTest, RejectBackgroundColor) {
747 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 781 std::unique_ptr<RenderPass> pass = CreateRenderPass();
748 TextureDrawQuad* quad = 782 TextureDrawQuad* quad =
749 CreateFullscreenCandidateQuad(resource_provider_.get(), 783 CreateFullscreenCandidateQuad(resource_provider_.get(),
750 pass->shared_quad_state_list.back(), 784 pass->shared_quad_state_list.back(),
751 pass.get()); 785 pass.get());
752 quad->background_color = SK_ColorBLACK; 786 quad->background_color = SK_ColorBLACK;
753 787
754 OverlayCandidateList candidate_list; 788 OverlayCandidateList candidate_list;
755 RenderPassFilterList render_pass_filters; 789 RenderPassFilterList render_pass_filters;
756 RenderPassFilterList render_pass_background_filters; 790 RenderPassFilterList render_pass_background_filters;
757 overlay_processor_->ProcessForOverlays( 791 overlay_processor_->ProcessForOverlays(
758 resource_provider_.get(), pass.get(), render_pass_filters, 792 resource_provider_.get(), pass.get(), render_pass_filters,
759 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 793 render_pass_background_filters, &candidate_list, nullptr, nullptr,
760 &content_bounds_); 794 &damage_rect_, &content_bounds_);
761 EXPECT_EQ(0U, candidate_list.size()); 795 EXPECT_EQ(0U, candidate_list.size());
762 } 796 }
763 797
764 TEST_F(SingleOverlayOnTopTest, RejectBlendMode) { 798 TEST_F(SingleOverlayOnTopTest, RejectBlendMode) {
765 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 799 std::unique_ptr<RenderPass> pass = CreateRenderPass();
766 CreateFullscreenCandidateQuad(resource_provider_.get(), 800 CreateFullscreenCandidateQuad(resource_provider_.get(),
767 pass->shared_quad_state_list.back(), 801 pass->shared_quad_state_list.back(),
768 pass.get()); 802 pass.get());
769 pass->shared_quad_state_list.back()->blend_mode = SkBlendMode::kScreen; 803 pass->shared_quad_state_list.back()->blend_mode = SkBlendMode::kScreen;
770 804
771 OverlayCandidateList candidate_list; 805 OverlayCandidateList candidate_list;
772 RenderPassFilterList render_pass_filters; 806 RenderPassFilterList render_pass_filters;
773 RenderPassFilterList render_pass_background_filters; 807 RenderPassFilterList render_pass_background_filters;
774 overlay_processor_->ProcessForOverlays( 808 overlay_processor_->ProcessForOverlays(
775 resource_provider_.get(), pass.get(), render_pass_filters, 809 resource_provider_.get(), pass.get(), render_pass_filters,
776 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 810 render_pass_background_filters, &candidate_list, nullptr, nullptr,
777 &content_bounds_); 811 &damage_rect_, &content_bounds_);
778 EXPECT_EQ(0U, candidate_list.size()); 812 EXPECT_EQ(0U, candidate_list.size());
779 } 813 }
780 814
781 TEST_F(SingleOverlayOnTopTest, RejectOpacity) { 815 TEST_F(SingleOverlayOnTopTest, RejectOpacity) {
782 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 816 std::unique_ptr<RenderPass> pass = CreateRenderPass();
783 CreateFullscreenCandidateQuad(resource_provider_.get(), 817 CreateFullscreenCandidateQuad(resource_provider_.get(),
784 pass->shared_quad_state_list.back(), 818 pass->shared_quad_state_list.back(),
785 pass.get()); 819 pass.get());
786 pass->shared_quad_state_list.back()->opacity = 0.5f; 820 pass->shared_quad_state_list.back()->opacity = 0.5f;
787 821
788 OverlayCandidateList candidate_list; 822 OverlayCandidateList candidate_list;
789 RenderPassFilterList render_pass_filters; 823 RenderPassFilterList render_pass_filters;
790 RenderPassFilterList render_pass_background_filters; 824 RenderPassFilterList render_pass_background_filters;
791 overlay_processor_->ProcessForOverlays( 825 overlay_processor_->ProcessForOverlays(
792 resource_provider_.get(), pass.get(), render_pass_filters, 826 resource_provider_.get(), pass.get(), render_pass_filters,
793 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 827 render_pass_background_filters, &candidate_list, nullptr, nullptr,
794 &content_bounds_); 828 &damage_rect_, &content_bounds_);
795 EXPECT_EQ(0U, candidate_list.size()); 829 EXPECT_EQ(0U, candidate_list.size());
796 } 830 }
797 831
798 TEST_F(SingleOverlayOnTopTest, RejectNonAxisAlignedTransform) { 832 TEST_F(SingleOverlayOnTopTest, RejectNonAxisAlignedTransform) {
799 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 833 std::unique_ptr<RenderPass> pass = CreateRenderPass();
800 CreateFullscreenCandidateQuad(resource_provider_.get(), 834 CreateFullscreenCandidateQuad(resource_provider_.get(),
801 pass->shared_quad_state_list.back(), 835 pass->shared_quad_state_list.back(),
802 pass.get()); 836 pass.get());
803 pass->shared_quad_state_list.back() 837 pass->shared_quad_state_list.back()
804 ->quad_to_target_transform.RotateAboutXAxis(45.f); 838 ->quad_to_target_transform.RotateAboutXAxis(45.f);
805 839
806 OverlayCandidateList candidate_list; 840 OverlayCandidateList candidate_list;
807 RenderPassFilterList render_pass_filters; 841 RenderPassFilterList render_pass_filters;
808 RenderPassFilterList render_pass_background_filters; 842 RenderPassFilterList render_pass_background_filters;
809 overlay_processor_->ProcessForOverlays( 843 overlay_processor_->ProcessForOverlays(
810 resource_provider_.get(), pass.get(), render_pass_filters, 844 resource_provider_.get(), pass.get(), render_pass_filters,
811 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 845 render_pass_background_filters, &candidate_list, nullptr, nullptr,
812 &content_bounds_); 846 &damage_rect_, &content_bounds_);
813 EXPECT_EQ(0U, candidate_list.size()); 847 EXPECT_EQ(0U, candidate_list.size());
814 } 848 }
815 849
816 TEST_F(SingleOverlayOnTopTest, AllowClipped) { 850 TEST_F(SingleOverlayOnTopTest, AllowClipped) {
817 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 851 std::unique_ptr<RenderPass> pass = CreateRenderPass();
818 CreateFullscreenCandidateQuad(resource_provider_.get(), 852 CreateFullscreenCandidateQuad(resource_provider_.get(),
819 pass->shared_quad_state_list.back(), 853 pass->shared_quad_state_list.back(),
820 pass.get()); 854 pass.get());
821 pass->shared_quad_state_list.back()->is_clipped = true; 855 pass->shared_quad_state_list.back()->is_clipped = true;
822 pass->shared_quad_state_list.back()->clip_rect = kOverlayClipRect; 856 pass->shared_quad_state_list.back()->clip_rect = kOverlayClipRect;
823 857
824 OverlayCandidateList candidate_list; 858 OverlayCandidateList candidate_list;
825 RenderPassFilterList render_pass_filters; 859 RenderPassFilterList render_pass_filters;
826 RenderPassFilterList render_pass_background_filters; 860 RenderPassFilterList render_pass_background_filters;
827 overlay_processor_->ProcessForOverlays( 861 overlay_processor_->ProcessForOverlays(
828 resource_provider_.get(), pass.get(), render_pass_filters, 862 resource_provider_.get(), pass.get(), render_pass_filters,
829 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 863 render_pass_background_filters, &candidate_list, nullptr, nullptr,
830 &content_bounds_); 864 &damage_rect_, &content_bounds_);
831 EXPECT_EQ(1U, candidate_list.size()); 865 EXPECT_EQ(1U, candidate_list.size());
832 } 866 }
833 867
834 TEST_F(UnderlayTest, AllowVerticalFlip) { 868 TEST_F(UnderlayTest, AllowVerticalFlip) {
835 gfx::Rect rect = kOverlayRect; 869 gfx::Rect rect = kOverlayRect;
836 rect.set_width(rect.width() / 2); 870 rect.set_width(rect.width() / 2);
837 rect.Offset(0, -rect.height()); 871 rect.Offset(0, -rect.height());
838 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 872 std::unique_ptr<RenderPass> pass = CreateRenderPass();
839 CreateCandidateQuadAt(resource_provider_.get(), 873 CreateCandidateQuadAt(resource_provider_.get(),
840 pass->shared_quad_state_list.back(), pass.get(), rect); 874 pass->shared_quad_state_list.back(), pass.get(), rect);
841 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f, 875 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f,
842 -1.0f); 876 -1.0f);
843 OverlayCandidateList candidate_list; 877 OverlayCandidateList candidate_list;
844 RenderPassFilterList render_pass_filters; 878 RenderPassFilterList render_pass_filters;
845 RenderPassFilterList render_pass_background_filters; 879 RenderPassFilterList render_pass_background_filters;
846 overlay_processor_->ProcessForOverlays( 880 overlay_processor_->ProcessForOverlays(
847 resource_provider_.get(), pass.get(), render_pass_filters, 881 resource_provider_.get(), pass.get(), render_pass_filters,
848 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 882 render_pass_background_filters, &candidate_list, nullptr, nullptr,
849 &content_bounds_); 883 &damage_rect_, &content_bounds_);
850 ASSERT_EQ(1U, candidate_list.size()); 884 ASSERT_EQ(1U, candidate_list.size());
851 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_VERTICAL, 885 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_VERTICAL,
852 candidate_list.back().transform); 886 candidate_list.back().transform);
853 } 887 }
854 888
855 TEST_F(UnderlayTest, AllowHorizontalFlip) { 889 TEST_F(UnderlayTest, AllowHorizontalFlip) {
856 gfx::Rect rect = kOverlayRect; 890 gfx::Rect rect = kOverlayRect;
857 rect.set_height(rect.height() / 2); 891 rect.set_height(rect.height() / 2);
858 rect.Offset(-rect.width(), 0); 892 rect.Offset(-rect.width(), 0);
859 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 893 std::unique_ptr<RenderPass> pass = CreateRenderPass();
860 CreateCandidateQuadAt(resource_provider_.get(), 894 CreateCandidateQuadAt(resource_provider_.get(),
861 pass->shared_quad_state_list.back(), pass.get(), rect); 895 pass->shared_quad_state_list.back(), pass.get(), rect);
862 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(-1.0f, 896 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(-1.0f,
863 2.0f); 897 2.0f);
864 898
865 OverlayCandidateList candidate_list; 899 OverlayCandidateList candidate_list;
866 RenderPassFilterList render_pass_filters; 900 RenderPassFilterList render_pass_filters;
867 RenderPassFilterList render_pass_background_filters; 901 RenderPassFilterList render_pass_background_filters;
868 overlay_processor_->ProcessForOverlays( 902 overlay_processor_->ProcessForOverlays(
869 resource_provider_.get(), pass.get(), render_pass_filters, 903 resource_provider_.get(), pass.get(), render_pass_filters,
870 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 904 render_pass_background_filters, &candidate_list, nullptr, nullptr,
871 &content_bounds_); 905 &damage_rect_, &content_bounds_);
872 ASSERT_EQ(1U, candidate_list.size()); 906 ASSERT_EQ(1U, candidate_list.size());
873 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_HORIZONTAL, 907 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_HORIZONTAL,
874 candidate_list.back().transform); 908 candidate_list.back().transform);
875 } 909 }
876 910
877 TEST_F(SingleOverlayOnTopTest, AllowPositiveScaleTransform) { 911 TEST_F(SingleOverlayOnTopTest, AllowPositiveScaleTransform) {
878 gfx::Rect rect = kOverlayRect; 912 gfx::Rect rect = kOverlayRect;
879 rect.set_width(rect.width() / 2); 913 rect.set_width(rect.width() / 2);
880 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 914 std::unique_ptr<RenderPass> pass = CreateRenderPass();
881 CreateCandidateQuadAt(resource_provider_.get(), 915 CreateCandidateQuadAt(resource_provider_.get(),
882 pass->shared_quad_state_list.back(), pass.get(), rect); 916 pass->shared_quad_state_list.back(), pass.get(), rect);
883 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f, 917 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f,
884 1.0f); 918 1.0f);
885 OverlayCandidateList candidate_list; 919 OverlayCandidateList candidate_list;
886 RenderPassFilterList render_pass_filters; 920 RenderPassFilterList render_pass_filters;
887 RenderPassFilterList render_pass_background_filters; 921 RenderPassFilterList render_pass_background_filters;
888 overlay_processor_->ProcessForOverlays( 922 overlay_processor_->ProcessForOverlays(
889 resource_provider_.get(), pass.get(), render_pass_filters, 923 resource_provider_.get(), pass.get(), render_pass_filters,
890 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 924 render_pass_background_filters, &candidate_list, nullptr, nullptr,
891 &content_bounds_); 925 &damage_rect_, &content_bounds_);
892 EXPECT_EQ(1U, candidate_list.size()); 926 EXPECT_EQ(1U, candidate_list.size());
893 } 927 }
894 928
895 TEST_F(SingleOverlayOnTopTest, RejectTransform) { 929 TEST_F(SingleOverlayOnTopTest, RejectTransform) {
896 gfx::Rect rect = kOverlayRect; 930 gfx::Rect rect = kOverlayRect;
897 rect.Offset(0, -rect.height()); 931 rect.Offset(0, -rect.height());
898 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 932 std::unique_ptr<RenderPass> pass = CreateRenderPass();
899 CreateCandidateQuadAt(resource_provider_.get(), 933 CreateCandidateQuadAt(resource_provider_.get(),
900 pass->shared_quad_state_list.back(), pass.get(), rect); 934 pass->shared_quad_state_list.back(), pass.get(), rect);
901 pass->shared_quad_state_list.back() 935 pass->shared_quad_state_list.back()
902 ->quad_to_target_transform.RotateAboutZAxis(90.f); 936 ->quad_to_target_transform.RotateAboutZAxis(90.f);
903 937
904 OverlayCandidateList candidate_list; 938 OverlayCandidateList candidate_list;
905 RenderPassFilterList render_pass_filters; 939 RenderPassFilterList render_pass_filters;
906 RenderPassFilterList render_pass_background_filters; 940 RenderPassFilterList render_pass_background_filters;
907 overlay_processor_->ProcessForOverlays( 941 overlay_processor_->ProcessForOverlays(
908 resource_provider_.get(), pass.get(), render_pass_filters, 942 resource_provider_.get(), pass.get(), render_pass_filters,
909 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 943 render_pass_background_filters, &candidate_list, nullptr, nullptr,
910 &content_bounds_); 944 &damage_rect_, &content_bounds_);
911 ASSERT_EQ(0U, candidate_list.size()); 945 ASSERT_EQ(0U, candidate_list.size());
912 } 946 }
913 947
914 TEST_F(UnderlayTest, Allow90DegreeRotation) { 948 TEST_F(UnderlayTest, Allow90DegreeRotation) {
915 gfx::Rect rect = kOverlayRect; 949 gfx::Rect rect = kOverlayRect;
916 rect.Offset(0, -rect.height()); 950 rect.Offset(0, -rect.height());
917 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 951 std::unique_ptr<RenderPass> pass = CreateRenderPass();
918 CreateCandidateQuadAt(resource_provider_.get(), 952 CreateCandidateQuadAt(resource_provider_.get(),
919 pass->shared_quad_state_list.back(), pass.get(), rect); 953 pass->shared_quad_state_list.back(), pass.get(), rect);
920 pass->shared_quad_state_list.back() 954 pass->shared_quad_state_list.back()
921 ->quad_to_target_transform.RotateAboutZAxis(90.f); 955 ->quad_to_target_transform.RotateAboutZAxis(90.f);
922 956
923 OverlayCandidateList candidate_list; 957 OverlayCandidateList candidate_list;
924 RenderPassFilterList render_pass_filters; 958 RenderPassFilterList render_pass_filters;
925 RenderPassFilterList render_pass_background_filters; 959 RenderPassFilterList render_pass_background_filters;
926 overlay_processor_->ProcessForOverlays( 960 overlay_processor_->ProcessForOverlays(
927 resource_provider_.get(), pass.get(), render_pass_filters, 961 resource_provider_.get(), pass.get(), render_pass_filters,
928 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 962 render_pass_background_filters, &candidate_list, nullptr, nullptr,
929 &content_bounds_); 963 &damage_rect_, &content_bounds_);
930 ASSERT_EQ(1U, candidate_list.size()); 964 ASSERT_EQ(1U, candidate_list.size());
931 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_90, candidate_list.back().transform); 965 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_90, candidate_list.back().transform);
932 } 966 }
933 967
934 TEST_F(UnderlayTest, Allow180DegreeRotation) { 968 TEST_F(UnderlayTest, Allow180DegreeRotation) {
935 gfx::Rect rect = kOverlayRect; 969 gfx::Rect rect = kOverlayRect;
936 rect.Offset(-rect.width(), -rect.height()); 970 rect.Offset(-rect.width(), -rect.height());
937 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 971 std::unique_ptr<RenderPass> pass = CreateRenderPass();
938 CreateCandidateQuadAt(resource_provider_.get(), 972 CreateCandidateQuadAt(resource_provider_.get(),
939 pass->shared_quad_state_list.back(), pass.get(), rect); 973 pass->shared_quad_state_list.back(), pass.get(), rect);
940 pass->shared_quad_state_list.back() 974 pass->shared_quad_state_list.back()
941 ->quad_to_target_transform.RotateAboutZAxis(180.f); 975 ->quad_to_target_transform.RotateAboutZAxis(180.f);
942 976
943 OverlayCandidateList candidate_list; 977 OverlayCandidateList candidate_list;
944 RenderPassFilterList render_pass_filters; 978 RenderPassFilterList render_pass_filters;
945 RenderPassFilterList render_pass_background_filters; 979 RenderPassFilterList render_pass_background_filters;
946 overlay_processor_->ProcessForOverlays( 980 overlay_processor_->ProcessForOverlays(
947 resource_provider_.get(), pass.get(), render_pass_filters, 981 resource_provider_.get(), pass.get(), render_pass_filters,
948 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 982 render_pass_background_filters, &candidate_list, nullptr, nullptr,
949 &content_bounds_); 983 &damage_rect_, &content_bounds_);
950 ASSERT_EQ(1U, candidate_list.size()); 984 ASSERT_EQ(1U, candidate_list.size());
951 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_180, candidate_list.back().transform); 985 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_180, candidate_list.back().transform);
952 } 986 }
953 987
954 TEST_F(UnderlayTest, Allow270DegreeRotation) { 988 TEST_F(UnderlayTest, Allow270DegreeRotation) {
955 gfx::Rect rect = kOverlayRect; 989 gfx::Rect rect = kOverlayRect;
956 rect.Offset(-rect.width(), 0); 990 rect.Offset(-rect.width(), 0);
957 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 991 std::unique_ptr<RenderPass> pass = CreateRenderPass();
958 CreateCandidateQuadAt(resource_provider_.get(), 992 CreateCandidateQuadAt(resource_provider_.get(),
959 pass->shared_quad_state_list.back(), pass.get(), rect); 993 pass->shared_quad_state_list.back(), pass.get(), rect);
960 pass->shared_quad_state_list.back() 994 pass->shared_quad_state_list.back()
961 ->quad_to_target_transform.RotateAboutZAxis(270.f); 995 ->quad_to_target_transform.RotateAboutZAxis(270.f);
962 996
963 OverlayCandidateList candidate_list; 997 OverlayCandidateList candidate_list;
964 RenderPassFilterList render_pass_filters; 998 RenderPassFilterList render_pass_filters;
965 RenderPassFilterList render_pass_background_filters; 999 RenderPassFilterList render_pass_background_filters;
966 overlay_processor_->ProcessForOverlays( 1000 overlay_processor_->ProcessForOverlays(
967 resource_provider_.get(), pass.get(), render_pass_filters, 1001 resource_provider_.get(), pass.get(), render_pass_filters,
968 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 1002 render_pass_background_filters, &candidate_list, nullptr, nullptr,
969 &content_bounds_); 1003 &damage_rect_, &content_bounds_);
970 ASSERT_EQ(1U, candidate_list.size()); 1004 ASSERT_EQ(1U, candidate_list.size());
971 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_270, candidate_list.back().transform); 1005 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_270, candidate_list.back().transform);
972 } 1006 }
973 1007
974 TEST_F(SingleOverlayOnTopTest, AllowNotTopIfNotOccluded) { 1008 TEST_F(SingleOverlayOnTopTest, AllowNotTopIfNotOccluded) {
975 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( 1009 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect(
976 gfx::RectF(kOverlayBottomRightRect)); 1010 gfx::RectF(kOverlayBottomRightRect));
977 1011
978 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 1012 std::unique_ptr<RenderPass> pass = CreateRenderPass();
979 CreateOpaqueQuadAt(resource_provider_.get(), 1013 CreateOpaqueQuadAt(resource_provider_.get(),
980 pass->shared_quad_state_list.back(), pass.get(), 1014 pass->shared_quad_state_list.back(), pass.get(),
981 kOverlayTopLeftRect); 1015 kOverlayTopLeftRect);
982 CreateCandidateQuadAt(resource_provider_.get(), 1016 CreateCandidateQuadAt(resource_provider_.get(),
983 pass->shared_quad_state_list.back(), 1017 pass->shared_quad_state_list.back(),
984 pass.get(), 1018 pass.get(),
985 kOverlayBottomRightRect); 1019 kOverlayBottomRightRect);
986 1020
987 OverlayCandidateList candidate_list; 1021 OverlayCandidateList candidate_list;
988 RenderPassFilterList render_pass_filters; 1022 RenderPassFilterList render_pass_filters;
989 RenderPassFilterList render_pass_background_filters; 1023 RenderPassFilterList render_pass_background_filters;
990 overlay_processor_->ProcessForOverlays( 1024 overlay_processor_->ProcessForOverlays(
991 resource_provider_.get(), pass.get(), render_pass_filters, 1025 resource_provider_.get(), pass.get(), render_pass_filters,
992 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 1026 render_pass_background_filters, &candidate_list, nullptr, nullptr,
993 &content_bounds_); 1027 &damage_rect_, &content_bounds_);
994 EXPECT_EQ(1U, candidate_list.size()); 1028 EXPECT_EQ(1U, candidate_list.size());
995 } 1029 }
996 1030
997 TEST_F(SingleOverlayOnTopTest, AllowTransparentOnTop) { 1031 TEST_F(SingleOverlayOnTopTest, AllowTransparentOnTop) {
998 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( 1032 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect(
999 gfx::RectF(kOverlayBottomRightRect)); 1033 gfx::RectF(kOverlayBottomRightRect));
1000 1034
1001 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 1035 std::unique_ptr<RenderPass> pass = CreateRenderPass();
1002 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); 1036 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState();
1003 shared_state->opacity = 0.f; 1037 shared_state->opacity = 0.f;
1004 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), 1038 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(),
1005 kOverlayBottomRightRect); 1039 kOverlayBottomRightRect);
1006 shared_state = pass->CreateAndAppendSharedQuadState(); 1040 shared_state = pass->CreateAndAppendSharedQuadState();
1007 shared_state->opacity = 1.f; 1041 shared_state->opacity = 1.f;
1008 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), 1042 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(),
1009 kOverlayBottomRightRect); 1043 kOverlayBottomRightRect);
1010 1044
1011 OverlayCandidateList candidate_list; 1045 OverlayCandidateList candidate_list;
1012 RenderPassFilterList render_pass_filters; 1046 RenderPassFilterList render_pass_filters;
1013 RenderPassFilterList render_pass_background_filters; 1047 RenderPassFilterList render_pass_background_filters;
1014 overlay_processor_->ProcessForOverlays( 1048 overlay_processor_->ProcessForOverlays(
1015 resource_provider_.get(), pass.get(), render_pass_filters, 1049 resource_provider_.get(), pass.get(), render_pass_filters,
1016 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 1050 render_pass_background_filters, &candidate_list, nullptr, nullptr,
1017 &content_bounds_); 1051 &damage_rect_, &content_bounds_);
1018 EXPECT_EQ(1U, candidate_list.size()); 1052 EXPECT_EQ(1U, candidate_list.size());
1019 } 1053 }
1020 1054
1021 TEST_F(SingleOverlayOnTopTest, AllowTransparentColorOnTop) { 1055 TEST_F(SingleOverlayOnTopTest, AllowTransparentColorOnTop) {
1022 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( 1056 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect(
1023 gfx::RectF(kOverlayBottomRightRect)); 1057 gfx::RectF(kOverlayBottomRightRect));
1024 1058
1025 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 1059 std::unique_ptr<RenderPass> pass = CreateRenderPass();
1026 CreateSolidColorQuadAt(pass->shared_quad_state_list.back(), 1060 CreateSolidColorQuadAt(pass->shared_quad_state_list.back(),
1027 SK_ColorTRANSPARENT, pass.get(), 1061 SK_ColorTRANSPARENT, pass.get(),
1028 kOverlayBottomRightRect); 1062 kOverlayBottomRightRect);
1029 CreateCandidateQuadAt(resource_provider_.get(), 1063 CreateCandidateQuadAt(resource_provider_.get(),
1030 pass->shared_quad_state_list.back(), pass.get(), 1064 pass->shared_quad_state_list.back(), pass.get(),
1031 kOverlayBottomRightRect); 1065 kOverlayBottomRightRect);
1032 1066
1033 OverlayCandidateList candidate_list; 1067 OverlayCandidateList candidate_list;
1034 RenderPassFilterList render_pass_filters; 1068 RenderPassFilterList render_pass_filters;
1035 RenderPassFilterList render_pass_background_filters; 1069 RenderPassFilterList render_pass_background_filters;
1036 overlay_processor_->ProcessForOverlays( 1070 overlay_processor_->ProcessForOverlays(
1037 resource_provider_.get(), pass.get(), render_pass_filters, 1071 resource_provider_.get(), pass.get(), render_pass_filters,
1038 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 1072 render_pass_background_filters, &candidate_list, nullptr, nullptr,
1039 &content_bounds_); 1073 &damage_rect_, &content_bounds_);
1040 EXPECT_EQ(1U, candidate_list.size()); 1074 EXPECT_EQ(1U, candidate_list.size());
1041 } 1075 }
1042 1076
1043 TEST_F(SingleOverlayOnTopTest, RejectOpaqueColorOnTop) { 1077 TEST_F(SingleOverlayOnTopTest, RejectOpaqueColorOnTop) {
1044 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 1078 std::unique_ptr<RenderPass> pass = CreateRenderPass();
1045 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); 1079 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState();
1046 shared_state->opacity = 0.5f; 1080 shared_state->opacity = 0.5f;
1047 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), 1081 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(),
1048 kOverlayBottomRightRect); 1082 kOverlayBottomRightRect);
1049 shared_state = pass->CreateAndAppendSharedQuadState(); 1083 shared_state = pass->CreateAndAppendSharedQuadState();
1050 shared_state->opacity = 1.f; 1084 shared_state->opacity = 1.f;
1051 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), 1085 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(),
1052 kOverlayBottomRightRect); 1086 kOverlayBottomRightRect);
1053 1087
1054 OverlayCandidateList candidate_list; 1088 OverlayCandidateList candidate_list;
1055 RenderPassFilterList render_pass_filters; 1089 RenderPassFilterList render_pass_filters;
1056 RenderPassFilterList render_pass_background_filters; 1090 RenderPassFilterList render_pass_background_filters;
1057 overlay_processor_->ProcessForOverlays( 1091 overlay_processor_->ProcessForOverlays(
1058 resource_provider_.get(), pass.get(), render_pass_filters, 1092 resource_provider_.get(), pass.get(), render_pass_filters,
1059 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 1093 render_pass_background_filters, &candidate_list, nullptr, nullptr,
1060 &content_bounds_); 1094 &damage_rect_, &content_bounds_);
1061 EXPECT_EQ(0U, candidate_list.size()); 1095 EXPECT_EQ(0U, candidate_list.size());
1062 } 1096 }
1063 1097
1064 TEST_F(SingleOverlayOnTopTest, RejectTransparentColorOnTopWithoutBlending) { 1098 TEST_F(SingleOverlayOnTopTest, RejectTransparentColorOnTopWithoutBlending) {
1065 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 1099 std::unique_ptr<RenderPass> pass = CreateRenderPass();
1066 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); 1100 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState();
1067 CreateSolidColorQuadAt(shared_state, SK_ColorTRANSPARENT, pass.get(), 1101 CreateSolidColorQuadAt(shared_state, SK_ColorTRANSPARENT, pass.get(),
1068 kOverlayBottomRightRect)->opaque_rect = 1102 kOverlayBottomRightRect)->opaque_rect =
1069 kOverlayBottomRightRect; 1103 kOverlayBottomRightRect;
1070 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), 1104 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(),
1071 kOverlayBottomRightRect); 1105 kOverlayBottomRightRect);
1072 1106
1073 OverlayCandidateList candidate_list; 1107 OverlayCandidateList candidate_list;
1074 RenderPassFilterList render_pass_filters; 1108 RenderPassFilterList render_pass_filters;
1075 RenderPassFilterList render_pass_background_filters; 1109 RenderPassFilterList render_pass_background_filters;
1076 overlay_processor_->ProcessForOverlays( 1110 overlay_processor_->ProcessForOverlays(
1077 resource_provider_.get(), pass.get(), render_pass_filters, 1111 resource_provider_.get(), pass.get(), render_pass_filters,
1078 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 1112 render_pass_background_filters, &candidate_list, nullptr, nullptr,
1079 &content_bounds_); 1113 &damage_rect_, &content_bounds_);
1080 EXPECT_EQ(0U, candidate_list.size()); 1114 EXPECT_EQ(0U, candidate_list.size());
1081 } 1115 }
1082 1116
1083 TEST_F(SingleOverlayOnTopTest, RejectVideoSwapTransform) { 1117 TEST_F(SingleOverlayOnTopTest, RejectVideoSwapTransform) {
1084 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 1118 std::unique_ptr<RenderPass> pass = CreateRenderPass();
1085 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), 1119 CreateFullscreenCandidateVideoQuad(resource_provider_.get(),
1086 pass->shared_quad_state_list.back(), 1120 pass->shared_quad_state_list.back(),
1087 pass.get(), kSwapTransform); 1121 pass.get(), kSwapTransform);
1088 1122
1089 OverlayCandidateList candidate_list; 1123 OverlayCandidateList candidate_list;
1090 RenderPassFilterList render_pass_filters; 1124 RenderPassFilterList render_pass_filters;
1091 RenderPassFilterList render_pass_background_filters; 1125 RenderPassFilterList render_pass_background_filters;
1092 overlay_processor_->ProcessForOverlays( 1126 overlay_processor_->ProcessForOverlays(
1093 resource_provider_.get(), pass.get(), render_pass_filters, 1127 resource_provider_.get(), pass.get(), render_pass_filters,
1094 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 1128 render_pass_background_filters, &candidate_list, nullptr, nullptr,
1095 &content_bounds_); 1129 &damage_rect_, &content_bounds_);
1096 EXPECT_EQ(0U, candidate_list.size()); 1130 EXPECT_EQ(0U, candidate_list.size());
1097 } 1131 }
1098 1132
1099 TEST_F(UnderlayTest, AllowVideoXMirrorTransform) { 1133 TEST_F(UnderlayTest, AllowVideoXMirrorTransform) {
1100 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 1134 std::unique_ptr<RenderPass> pass = CreateRenderPass();
1101 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), 1135 CreateFullscreenCandidateVideoQuad(resource_provider_.get(),
1102 pass->shared_quad_state_list.back(), 1136 pass->shared_quad_state_list.back(),
1103 pass.get(), kXMirrorTransform); 1137 pass.get(), kXMirrorTransform);
1104 1138
1105 OverlayCandidateList candidate_list; 1139 OverlayCandidateList candidate_list;
1106 RenderPassFilterList render_pass_filters; 1140 RenderPassFilterList render_pass_filters;
1107 RenderPassFilterList render_pass_background_filters; 1141 RenderPassFilterList render_pass_background_filters;
1108 overlay_processor_->ProcessForOverlays( 1142 overlay_processor_->ProcessForOverlays(
1109 resource_provider_.get(), pass.get(), render_pass_filters, 1143 resource_provider_.get(), pass.get(), render_pass_filters,
1110 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 1144 render_pass_background_filters, &candidate_list, nullptr, nullptr,
1111 &content_bounds_); 1145 &damage_rect_, &content_bounds_);
1112 EXPECT_EQ(1U, candidate_list.size()); 1146 EXPECT_EQ(1U, candidate_list.size());
1113 } 1147 }
1114 1148
1115 TEST_F(UnderlayTest, AllowVideoBothMirrorTransform) { 1149 TEST_F(UnderlayTest, AllowVideoBothMirrorTransform) {
1116 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 1150 std::unique_ptr<RenderPass> pass = CreateRenderPass();
1117 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), 1151 CreateFullscreenCandidateVideoQuad(resource_provider_.get(),
1118 pass->shared_quad_state_list.back(), 1152 pass->shared_quad_state_list.back(),
1119 pass.get(), kBothMirrorTransform); 1153 pass.get(), kBothMirrorTransform);
1120 1154
1121 OverlayCandidateList candidate_list; 1155 OverlayCandidateList candidate_list;
1122 RenderPassFilterList render_pass_filters; 1156 RenderPassFilterList render_pass_filters;
1123 RenderPassFilterList render_pass_background_filters; 1157 RenderPassFilterList render_pass_background_filters;
1124 overlay_processor_->ProcessForOverlays( 1158 overlay_processor_->ProcessForOverlays(
1125 resource_provider_.get(), pass.get(), render_pass_filters, 1159 resource_provider_.get(), pass.get(), render_pass_filters,
1126 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 1160 render_pass_background_filters, &candidate_list, nullptr, nullptr,
1127 &content_bounds_); 1161 &damage_rect_, &content_bounds_);
1128 EXPECT_EQ(1U, candidate_list.size()); 1162 EXPECT_EQ(1U, candidate_list.size());
1129 } 1163 }
1130 1164
1131 TEST_F(UnderlayTest, AllowVideoNormalTransform) { 1165 TEST_F(UnderlayTest, AllowVideoNormalTransform) {
1132 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 1166 std::unique_ptr<RenderPass> pass = CreateRenderPass();
1133 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), 1167 CreateFullscreenCandidateVideoQuad(resource_provider_.get(),
1134 pass->shared_quad_state_list.back(), 1168 pass->shared_quad_state_list.back(),
1135 pass.get(), kNormalTransform); 1169 pass.get(), kNormalTransform);
1136 1170
1137 OverlayCandidateList candidate_list; 1171 OverlayCandidateList candidate_list;
1138 RenderPassFilterList render_pass_filters; 1172 RenderPassFilterList render_pass_filters;
1139 RenderPassFilterList render_pass_background_filters; 1173 RenderPassFilterList render_pass_background_filters;
1140 overlay_processor_->ProcessForOverlays( 1174 overlay_processor_->ProcessForOverlays(
1141 resource_provider_.get(), pass.get(), render_pass_filters, 1175 resource_provider_.get(), pass.get(), render_pass_filters,
1142 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 1176 render_pass_background_filters, &candidate_list, nullptr, nullptr,
1143 &content_bounds_); 1177 &damage_rect_, &content_bounds_);
1144 EXPECT_EQ(1U, candidate_list.size()); 1178 EXPECT_EQ(1U, candidate_list.size());
1145 } 1179 }
1146 1180
1147 TEST_F(SingleOverlayOnTopTest, AllowVideoYMirrorTransform) { 1181 TEST_F(SingleOverlayOnTopTest, AllowVideoYMirrorTransform) {
1148 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 1182 std::unique_ptr<RenderPass> pass = CreateRenderPass();
1149 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), 1183 CreateFullscreenCandidateVideoQuad(resource_provider_.get(),
1150 pass->shared_quad_state_list.back(), 1184 pass->shared_quad_state_list.back(),
1151 pass.get(), kYMirrorTransform); 1185 pass.get(), kYMirrorTransform);
1152 1186
1153 OverlayCandidateList candidate_list; 1187 OverlayCandidateList candidate_list;
1154 RenderPassFilterList render_pass_filters; 1188 RenderPassFilterList render_pass_filters;
1155 RenderPassFilterList render_pass_background_filters; 1189 RenderPassFilterList render_pass_background_filters;
1156 overlay_processor_->ProcessForOverlays( 1190 overlay_processor_->ProcessForOverlays(
1157 resource_provider_.get(), pass.get(), render_pass_filters, 1191 resource_provider_.get(), pass.get(), render_pass_filters,
1158 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 1192 render_pass_background_filters, &candidate_list, nullptr, nullptr,
1159 &content_bounds_); 1193 &damage_rect_, &content_bounds_);
1160 EXPECT_EQ(1U, candidate_list.size()); 1194 EXPECT_EQ(1U, candidate_list.size());
1161 } 1195 }
1162 1196
1163 TEST_F(UnderlayTest, OverlayLayerUnderMainLayer) { 1197 TEST_F(UnderlayTest, OverlayLayerUnderMainLayer) {
1164 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( 1198 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect(
1165 gfx::RectF(kOverlayBottomRightRect)); 1199 gfx::RectF(kOverlayBottomRightRect));
1166 1200
1167 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 1201 std::unique_ptr<RenderPass> pass = CreateRenderPass();
1168 CreateFullscreenOpaqueQuad(resource_provider_.get(), 1202 CreateFullscreenOpaqueQuad(resource_provider_.get(),
1169 pass->shared_quad_state_list.back(), pass.get()); 1203 pass->shared_quad_state_list.back(), pass.get());
1170 CreateCandidateQuadAt(resource_provider_.get(), 1204 CreateCandidateQuadAt(resource_provider_.get(),
1171 pass->shared_quad_state_list.back(), pass.get(), 1205 pass->shared_quad_state_list.back(), pass.get(),
1172 kOverlayBottomRightRect); 1206 kOverlayBottomRightRect);
1173 1207
1174 OverlayCandidateList candidate_list; 1208 OverlayCandidateList candidate_list;
1175 RenderPassFilterList render_pass_filters; 1209 RenderPassFilterList render_pass_filters;
1176 RenderPassFilterList render_pass_background_filters; 1210 RenderPassFilterList render_pass_background_filters;
1177 overlay_processor_->ProcessForOverlays( 1211 overlay_processor_->ProcessForOverlays(
1178 resource_provider_.get(), pass.get(), render_pass_filters, 1212 resource_provider_.get(), pass.get(), render_pass_filters,
1179 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 1213 render_pass_background_filters, &candidate_list, nullptr, nullptr,
1180 &content_bounds_); 1214 &damage_rect_, &content_bounds_);
1181 ASSERT_EQ(1U, candidate_list.size()); 1215 ASSERT_EQ(1U, candidate_list.size());
1182 EXPECT_EQ(-1, candidate_list[0].plane_z_order); 1216 EXPECT_EQ(-1, candidate_list[0].plane_z_order);
1183 EXPECT_EQ(2U, pass->quad_list.size()); 1217 EXPECT_EQ(2U, pass->quad_list.size());
1184 // The overlay quad should have changed to a SOLID_COLOR quad. 1218 // The overlay quad should have changed to a SOLID_COLOR quad.
1185 EXPECT_EQ(pass->quad_list.back()->material, DrawQuad::SOLID_COLOR); 1219 EXPECT_EQ(pass->quad_list.back()->material, DrawQuad::SOLID_COLOR);
1186 } 1220 }
1187 1221
1188 TEST_F(UnderlayTest, AllowOnTop) { 1222 TEST_F(UnderlayTest, AllowOnTop) {
1189 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 1223 std::unique_ptr<RenderPass> pass = CreateRenderPass();
1190 CreateFullscreenCandidateQuad(resource_provider_.get(), 1224 CreateFullscreenCandidateQuad(resource_provider_.get(),
1191 pass->shared_quad_state_list.back(), 1225 pass->shared_quad_state_list.back(),
1192 pass.get()); 1226 pass.get());
1193 pass->CreateAndAppendSharedQuadState()->opacity = 0.5f; 1227 pass->CreateAndAppendSharedQuadState()->opacity = 0.5f;
1194 CreateFullscreenOpaqueQuad(resource_provider_.get(), 1228 CreateFullscreenOpaqueQuad(resource_provider_.get(),
1195 pass->shared_quad_state_list.back(), pass.get()); 1229 pass->shared_quad_state_list.back(), pass.get());
1196 1230
1197 OverlayCandidateList candidate_list; 1231 OverlayCandidateList candidate_list;
1198 RenderPassFilterList render_pass_filters; 1232 RenderPassFilterList render_pass_filters;
1199 RenderPassFilterList render_pass_background_filters; 1233 RenderPassFilterList render_pass_background_filters;
1200 overlay_processor_->ProcessForOverlays( 1234 overlay_processor_->ProcessForOverlays(
1201 resource_provider_.get(), pass.get(), render_pass_filters, 1235 resource_provider_.get(), pass.get(), render_pass_filters,
1202 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 1236 render_pass_background_filters, &candidate_list, nullptr, nullptr,
1203 &content_bounds_); 1237 &damage_rect_, &content_bounds_);
1204 ASSERT_EQ(1U, candidate_list.size()); 1238 ASSERT_EQ(1U, candidate_list.size());
1205 EXPECT_EQ(-1, candidate_list[0].plane_z_order); 1239 EXPECT_EQ(-1, candidate_list[0].plane_z_order);
1206 // The overlay quad should have changed to a SOLID_COLOR quad. 1240 // The overlay quad should have changed to a SOLID_COLOR quad.
1207 EXPECT_EQ(pass->quad_list.front()->material, DrawQuad::SOLID_COLOR); 1241 EXPECT_EQ(pass->quad_list.front()->material, DrawQuad::SOLID_COLOR);
1208 } 1242 }
1209 1243
1210 // The first time an underlay is scheduled its damage must not be subtracted. 1244 // The first time an underlay is scheduled its damage must not be subtracted.
1211 TEST_F(UnderlayTest, InitialUnderlayDamageNotSubtracted) { 1245 TEST_F(UnderlayTest, InitialUnderlayDamageNotSubtracted) {
1212 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 1246 std::unique_ptr<RenderPass> pass = CreateRenderPass();
1213 CreateFullscreenCandidateQuad(resource_provider_.get(), 1247 CreateFullscreenCandidateQuad(resource_provider_.get(),
1214 pass->shared_quad_state_list.back(), 1248 pass->shared_quad_state_list.back(),
1215 pass.get()); 1249 pass.get());
1216 1250
1217 damage_rect_ = kOverlayRect; 1251 damage_rect_ = kOverlayRect;
1218 1252
1219 OverlayCandidateList candidate_list; 1253 OverlayCandidateList candidate_list;
1220 RenderPassFilterList render_pass_filters; 1254 RenderPassFilterList render_pass_filters;
1221 RenderPassFilterList render_pass_background_filters; 1255 RenderPassFilterList render_pass_background_filters;
1222 overlay_processor_->ProcessForOverlays( 1256 overlay_processor_->ProcessForOverlays(
1223 resource_provider_.get(), pass.get(), render_pass_filters, 1257 resource_provider_.get(), pass.get(), render_pass_filters,
1224 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 1258 render_pass_background_filters, &candidate_list, nullptr, nullptr,
1225 &content_bounds_); 1259 &damage_rect_, &content_bounds_);
1226 1260
1227 EXPECT_EQ(kOverlayRect, damage_rect_); 1261 EXPECT_EQ(kOverlayRect, damage_rect_);
1228 } 1262 }
1229 1263
1230 // An identical underlay for two frames in a row means the damage can be 1264 // An identical underlay for two frames in a row means the damage can be
1231 // subtracted the second time. 1265 // subtracted the second time.
1232 TEST_F(UnderlayTest, DamageSubtractedForConsecutiveIdenticalUnderlays) { 1266 TEST_F(UnderlayTest, DamageSubtractedForConsecutiveIdenticalUnderlays) {
1233 for (int i = 0; i < 2; ++i) { 1267 for (int i = 0; i < 2; ++i) {
1234 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 1268 std::unique_ptr<RenderPass> pass = CreateRenderPass();
1235 CreateFullscreenCandidateQuad(resource_provider_.get(), 1269 CreateFullscreenCandidateQuad(resource_provider_.get(),
1236 pass->shared_quad_state_list.back(), 1270 pass->shared_quad_state_list.back(),
1237 pass.get()); 1271 pass.get());
1238 1272
1239 damage_rect_ = kOverlayRect; 1273 damage_rect_ = kOverlayRect;
1240 1274
1241 // Add something behind it. 1275 // Add something behind it.
1242 CreateFullscreenOpaqueQuad(resource_provider_.get(), 1276 CreateFullscreenOpaqueQuad(resource_provider_.get(),
1243 pass->shared_quad_state_list.back(), pass.get()); 1277 pass->shared_quad_state_list.back(), pass.get());
1244 1278
1245 OverlayCandidateList candidate_list; 1279 OverlayCandidateList candidate_list;
1246 RenderPassFilterList render_pass_filters; 1280 RenderPassFilterList render_pass_filters;
1247 RenderPassFilterList render_pass_background_filters; 1281 RenderPassFilterList render_pass_background_filters;
1248 overlay_processor_->ProcessForOverlays( 1282 overlay_processor_->ProcessForOverlays(
1249 resource_provider_.get(), pass.get(), render_pass_filters, 1283 resource_provider_.get(), pass.get(), render_pass_filters,
1250 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 1284 render_pass_background_filters, &candidate_list, nullptr, nullptr,
1251 &content_bounds_); 1285 &damage_rect_, &content_bounds_);
1252 } 1286 }
1253 1287
1254 // The second time the same overlay rect is scheduled it will be subtracted 1288 // The second time the same overlay rect is scheduled it will be subtracted
1255 // from the damage rect. 1289 // from the damage rect.
1256 EXPECT_TRUE(damage_rect_.IsEmpty()); 1290 EXPECT_TRUE(damage_rect_.IsEmpty());
1257 } 1291 }
1258 1292
1259 // Underlay damage can only be subtracted if the previous frame's underlay 1293 // Underlay damage can only be subtracted if the previous frame's underlay
1260 // was the same rect. 1294 // was the same rect.
1261 TEST_F(UnderlayTest, DamageNotSubtractedForNonIdenticalConsecutiveUnderlays) { 1295 TEST_F(UnderlayTest, DamageNotSubtractedForNonIdenticalConsecutiveUnderlays) {
1262 gfx::Rect overlay_rects[] = {kOverlayBottomRightRect, kOverlayRect}; 1296 gfx::Rect overlay_rects[] = {kOverlayBottomRightRect, kOverlayRect};
1263 for (int i = 0; i < 2; ++i) { 1297 for (int i = 0; i < 2; ++i) {
1264 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( 1298 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect(
1265 gfx::RectF(overlay_rects[i])); 1299 gfx::RectF(overlay_rects[i]));
1266 1300
1267 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 1301 std::unique_ptr<RenderPass> pass = CreateRenderPass();
1268 1302
1269 CreateCandidateQuadAt(resource_provider_.get(), 1303 CreateCandidateQuadAt(resource_provider_.get(),
1270 pass->shared_quad_state_list.back(), pass.get(), 1304 pass->shared_quad_state_list.back(), pass.get(),
1271 overlay_rects[i]); 1305 overlay_rects[i]);
1272 1306
1273 damage_rect_ = overlay_rects[i]; 1307 damage_rect_ = overlay_rects[i];
1274 1308
1275 OverlayCandidateList candidate_list; 1309 OverlayCandidateList candidate_list;
1276 RenderPassFilterList render_pass_filters; 1310 RenderPassFilterList render_pass_filters;
1277 RenderPassFilterList render_pass_background_filters; 1311 RenderPassFilterList render_pass_background_filters;
1278 overlay_processor_->ProcessForOverlays( 1312 overlay_processor_->ProcessForOverlays(
1279 resource_provider_.get(), pass.get(), render_pass_filters, 1313 resource_provider_.get(), pass.get(), render_pass_filters,
1280 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 1314 render_pass_background_filters, &candidate_list, nullptr, nullptr,
1281 &content_bounds_); 1315 &damage_rect_, &content_bounds_);
1282 1316
1283 EXPECT_EQ(overlay_rects[i], damage_rect_); 1317 EXPECT_EQ(overlay_rects[i], damage_rect_);
1284 } 1318 }
1285 } 1319 }
1286 1320
1287 TEST_F(UnderlayTest, DamageNotSubtractedWhenQuadsAboveOverlap) { 1321 TEST_F(UnderlayTest, DamageNotSubtractedWhenQuadsAboveOverlap) {
1288 for (int i = 0; i < 2; ++i) { 1322 for (int i = 0; i < 2; ++i) {
1289 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 1323 std::unique_ptr<RenderPass> pass = CreateRenderPass();
1290 // Add an overlapping quad above the candidate. 1324 // Add an overlapping quad above the candidate.
1291 CreateFullscreenOpaqueQuad(resource_provider_.get(), 1325 CreateFullscreenOpaqueQuad(resource_provider_.get(),
1292 pass->shared_quad_state_list.back(), pass.get()); 1326 pass->shared_quad_state_list.back(), pass.get());
1293 CreateFullscreenCandidateQuad(resource_provider_.get(), 1327 CreateFullscreenCandidateQuad(resource_provider_.get(),
1294 pass->shared_quad_state_list.back(), 1328 pass->shared_quad_state_list.back(),
1295 pass.get()); 1329 pass.get());
1296 1330
1297 damage_rect_ = kOverlayRect; 1331 damage_rect_ = kOverlayRect;
1298 1332
1299 OverlayCandidateList candidate_list; 1333 OverlayCandidateList candidate_list;
1300 RenderPassFilterList render_pass_filters; 1334 RenderPassFilterList render_pass_filters;
1301 RenderPassFilterList render_pass_background_filters; 1335 RenderPassFilterList render_pass_background_filters;
1302 overlay_processor_->ProcessForOverlays( 1336 overlay_processor_->ProcessForOverlays(
1303 resource_provider_.get(), pass.get(), render_pass_filters, 1337 resource_provider_.get(), pass.get(), render_pass_filters,
1304 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 1338 render_pass_background_filters, &candidate_list, nullptr, nullptr,
1305 &content_bounds_); 1339 &damage_rect_, &content_bounds_);
1306 } 1340 }
1307 1341
1308 EXPECT_EQ(kOverlayRect, damage_rect_); 1342 EXPECT_EQ(kOverlayRect, damage_rect_);
1309 } 1343 }
1310 1344
1311 TEST_F(UnderlayTest, DamageSubtractedWhenQuadsAboveDontOverlap) { 1345 TEST_F(UnderlayTest, DamageSubtractedWhenQuadsAboveDontOverlap) {
1312 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( 1346 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect(
1313 gfx::RectF(kOverlayBottomRightRect)); 1347 gfx::RectF(kOverlayBottomRightRect));
1314 1348
1315 for (int i = 0; i < 2; ++i) { 1349 for (int i = 0; i < 2; ++i) {
1316 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 1350 std::unique_ptr<RenderPass> pass = CreateRenderPass();
1317 // Add a non-overlapping quad above the candidate. 1351 // Add a non-overlapping quad above the candidate.
1318 CreateOpaqueQuadAt(resource_provider_.get(), 1352 CreateOpaqueQuadAt(resource_provider_.get(),
1319 pass->shared_quad_state_list.back(), pass.get(), 1353 pass->shared_quad_state_list.back(), pass.get(),
1320 kOverlayTopLeftRect); 1354 kOverlayTopLeftRect);
1321 CreateCandidateQuadAt(resource_provider_.get(), 1355 CreateCandidateQuadAt(resource_provider_.get(),
1322 pass->shared_quad_state_list.back(), pass.get(), 1356 pass->shared_quad_state_list.back(), pass.get(),
1323 kOverlayBottomRightRect); 1357 kOverlayBottomRightRect);
1324 1358
1325 damage_rect_ = kOverlayBottomRightRect; 1359 damage_rect_ = kOverlayBottomRightRect;
1326 1360
1327 OverlayCandidateList candidate_list; 1361 OverlayCandidateList candidate_list;
1328 RenderPassFilterList render_pass_filters; 1362 RenderPassFilterList render_pass_filters;
1329 RenderPassFilterList render_pass_background_filters; 1363 RenderPassFilterList render_pass_background_filters;
1330 overlay_processor_->ProcessForOverlays( 1364 overlay_processor_->ProcessForOverlays(
1331 resource_provider_.get(), pass.get(), render_pass_filters, 1365 resource_provider_.get(), pass.get(), render_pass_filters,
1332 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 1366 render_pass_background_filters, &candidate_list, nullptr, nullptr,
1333 &content_bounds_); 1367 &damage_rect_, &content_bounds_);
1334 } 1368 }
1335 1369
1336 EXPECT_TRUE(damage_rect_.IsEmpty()); 1370 EXPECT_TRUE(damage_rect_.IsEmpty());
1337 } 1371 }
1338 1372
1339 TEST_F(UnderlayCastTest, NoOverlayContentBounds) { 1373 TEST_F(UnderlayCastTest, NoOverlayContentBounds) {
1340 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 1374 std::unique_ptr<RenderPass> pass = CreateRenderPass();
1341 1375
1342 CreateOpaqueQuadAt(resource_provider_.get(), 1376 CreateOpaqueQuadAt(resource_provider_.get(),
1343 pass->shared_quad_state_list.back(), pass.get(), 1377 pass->shared_quad_state_list.back(), pass.get(),
1344 kOverlayTopLeftRect); 1378 kOverlayTopLeftRect);
1345 1379
1346 OverlayCandidateList candidate_list; 1380 OverlayCandidateList candidate_list;
1347 RenderPassFilterList render_pass_filters; 1381 RenderPassFilterList render_pass_filters;
1348 RenderPassFilterList render_pass_background_filters; 1382 RenderPassFilterList render_pass_background_filters;
1349 overlay_processor_->ProcessForOverlays( 1383 overlay_processor_->ProcessForOverlays(
1350 resource_provider_.get(), pass.get(), render_pass_filters, 1384 resource_provider_.get(), pass.get(), render_pass_filters,
1351 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 1385 render_pass_background_filters, &candidate_list, nullptr, nullptr,
1352 &content_bounds_); 1386 &damage_rect_, &content_bounds_);
1353 EXPECT_EQ(0U, content_bounds_.size()); 1387 EXPECT_EQ(0U, content_bounds_.size());
1354 } 1388 }
1355 1389
1356 TEST_F(UnderlayCastTest, FullScreenOverlayContentBounds) { 1390 TEST_F(UnderlayCastTest, FullScreenOverlayContentBounds) {
1357 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 1391 std::unique_ptr<RenderPass> pass = CreateRenderPass();
1358 CreateCandidateQuadAt(resource_provider_.get(), 1392 CreateCandidateQuadAt(resource_provider_.get(),
1359 pass->shared_quad_state_list.back(), pass.get(), 1393 pass->shared_quad_state_list.back(), pass.get(),
1360 kOverlayRect); 1394 kOverlayRect);
1361 1395
1362 OverlayCandidateList candidate_list; 1396 OverlayCandidateList candidate_list;
1363 RenderPassFilterList render_pass_filters; 1397 RenderPassFilterList render_pass_filters;
1364 RenderPassFilterList render_pass_background_filters; 1398 RenderPassFilterList render_pass_background_filters;
1365 overlay_processor_->ProcessForOverlays( 1399 overlay_processor_->ProcessForOverlays(
1366 resource_provider_.get(), pass.get(), render_pass_filters, 1400 resource_provider_.get(), pass.get(), render_pass_filters,
1367 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 1401 render_pass_background_filters, &candidate_list, nullptr, nullptr,
1368 &content_bounds_); 1402 &damage_rect_, &content_bounds_);
1369 1403
1370 EXPECT_EQ(1U, content_bounds_.size()); 1404 EXPECT_EQ(1U, content_bounds_.size());
1371 EXPECT_TRUE(content_bounds_[0].IsEmpty()); 1405 EXPECT_TRUE(content_bounds_[0].IsEmpty());
1372 } 1406 }
1373 1407
1374 TEST_F(UnderlayCastTest, BlackOutsideOverlayContentBounds) { 1408 TEST_F(UnderlayCastTest, BlackOutsideOverlayContentBounds) {
1375 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( 1409 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect(
1376 gfx::RectF(kOverlayBottomRightRect)); 1410 gfx::RectF(kOverlayBottomRightRect));
1377 1411
1378 const gfx::Rect kLeftSide(0, 0, 128, 256); 1412 const gfx::Rect kLeftSide(0, 0, 128, 256);
1379 const gfx::Rect kTopRight(128, 0, 128, 128); 1413 const gfx::Rect kTopRight(128, 0, 128, 128);
1380 1414
1381 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 1415 std::unique_ptr<RenderPass> pass = CreateRenderPass();
1382 CreateCandidateQuadAt(resource_provider_.get(), 1416 CreateCandidateQuadAt(resource_provider_.get(),
1383 pass->shared_quad_state_list.back(), pass.get(), 1417 pass->shared_quad_state_list.back(), pass.get(),
1384 kOverlayBottomRightRect); 1418 kOverlayBottomRightRect);
1385 CreateOpaqueQuadAt(resource_provider_.get(), 1419 CreateOpaqueQuadAt(resource_provider_.get(),
1386 pass->shared_quad_state_list.back(), pass.get(), kLeftSide, 1420 pass->shared_quad_state_list.back(), pass.get(), kLeftSide,
1387 SK_ColorBLACK); 1421 SK_ColorBLACK);
1388 CreateOpaqueQuadAt(resource_provider_.get(), 1422 CreateOpaqueQuadAt(resource_provider_.get(),
1389 pass->shared_quad_state_list.back(), pass.get(), kTopRight, 1423 pass->shared_quad_state_list.back(), pass.get(), kTopRight,
1390 SK_ColorBLACK); 1424 SK_ColorBLACK);
1391 1425
1392 OverlayCandidateList candidate_list; 1426 OverlayCandidateList candidate_list;
1393 RenderPassFilterList render_pass_filters; 1427 RenderPassFilterList render_pass_filters;
1394 RenderPassFilterList render_pass_background_filters; 1428 RenderPassFilterList render_pass_background_filters;
1395 overlay_processor_->ProcessForOverlays( 1429 overlay_processor_->ProcessForOverlays(
1396 resource_provider_.get(), pass.get(), render_pass_filters, 1430 resource_provider_.get(), pass.get(), render_pass_filters,
1397 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 1431 render_pass_background_filters, &candidate_list, nullptr, nullptr,
1398 &content_bounds_); 1432 &damage_rect_, &content_bounds_);
1399 1433
1400 EXPECT_EQ(1U, content_bounds_.size()); 1434 EXPECT_EQ(1U, content_bounds_.size());
1401 EXPECT_TRUE(content_bounds_[0].IsEmpty()); 1435 EXPECT_TRUE(content_bounds_[0].IsEmpty());
1402 } 1436 }
1403 1437
1404 TEST_F(UnderlayCastTest, OverlayOccludedContentBounds) { 1438 TEST_F(UnderlayCastTest, OverlayOccludedContentBounds) {
1405 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 1439 std::unique_ptr<RenderPass> pass = CreateRenderPass();
1406 CreateOpaqueQuadAt(resource_provider_.get(), 1440 CreateOpaqueQuadAt(resource_provider_.get(),
1407 pass->shared_quad_state_list.back(), pass.get(), 1441 pass->shared_quad_state_list.back(), pass.get(),
1408 kOverlayTopLeftRect); 1442 kOverlayTopLeftRect);
1409 CreateCandidateQuadAt(resource_provider_.get(), 1443 CreateCandidateQuadAt(resource_provider_.get(),
1410 pass->shared_quad_state_list.back(), pass.get(), 1444 pass->shared_quad_state_list.back(), pass.get(),
1411 kOverlayRect); 1445 kOverlayRect);
1412 1446
1413 OverlayCandidateList candidate_list; 1447 OverlayCandidateList candidate_list;
1414 RenderPassFilterList render_pass_filters; 1448 RenderPassFilterList render_pass_filters;
1415 RenderPassFilterList render_pass_background_filters; 1449 RenderPassFilterList render_pass_background_filters;
1416 overlay_processor_->ProcessForOverlays( 1450 overlay_processor_->ProcessForOverlays(
1417 resource_provider_.get(), pass.get(), render_pass_filters, 1451 resource_provider_.get(), pass.get(), render_pass_filters,
1418 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 1452 render_pass_background_filters, &candidate_list, nullptr, nullptr,
1419 &content_bounds_); 1453 &damage_rect_, &content_bounds_);
1420 1454
1421 EXPECT_EQ(1U, content_bounds_.size()); 1455 EXPECT_EQ(1U, content_bounds_.size());
1422 EXPECT_EQ(kOverlayTopLeftRect, content_bounds_[0]); 1456 EXPECT_EQ(kOverlayTopLeftRect, content_bounds_[0]);
1423 } 1457 }
1424 1458
1425 TEST_F(UnderlayCastTest, OverlayOccludedUnionContentBounds) { 1459 TEST_F(UnderlayCastTest, OverlayOccludedUnionContentBounds) {
1426 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 1460 std::unique_ptr<RenderPass> pass = CreateRenderPass();
1427 CreateOpaqueQuadAt(resource_provider_.get(), 1461 CreateOpaqueQuadAt(resource_provider_.get(),
1428 pass->shared_quad_state_list.back(), pass.get(), 1462 pass->shared_quad_state_list.back(), pass.get(),
1429 kOverlayTopLeftRect); 1463 kOverlayTopLeftRect);
1430 CreateOpaqueQuadAt(resource_provider_.get(), 1464 CreateOpaqueQuadAt(resource_provider_.get(),
1431 pass->shared_quad_state_list.back(), pass.get(), 1465 pass->shared_quad_state_list.back(), pass.get(),
1432 kOverlayBottomRightRect); 1466 kOverlayBottomRightRect);
1433 CreateCandidateQuadAt(resource_provider_.get(), 1467 CreateCandidateQuadAt(resource_provider_.get(),
1434 pass->shared_quad_state_list.back(), pass.get(), 1468 pass->shared_quad_state_list.back(), pass.get(),
1435 kOverlayRect); 1469 kOverlayRect);
1436 1470
1437 OverlayCandidateList candidate_list; 1471 OverlayCandidateList candidate_list;
1438 RenderPassFilterList render_pass_filters; 1472 RenderPassFilterList render_pass_filters;
1439 RenderPassFilterList render_pass_background_filters; 1473 RenderPassFilterList render_pass_background_filters;
1440 overlay_processor_->ProcessForOverlays( 1474 overlay_processor_->ProcessForOverlays(
1441 resource_provider_.get(), pass.get(), render_pass_filters, 1475 resource_provider_.get(), pass.get(), render_pass_filters,
1442 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 1476 render_pass_background_filters, &candidate_list, nullptr, nullptr,
1443 &content_bounds_); 1477 &damage_rect_, &content_bounds_);
1444 1478
1445 EXPECT_EQ(1U, content_bounds_.size()); 1479 EXPECT_EQ(1U, content_bounds_.size());
1446 EXPECT_EQ(kOverlayRect, content_bounds_[0]); 1480 EXPECT_EQ(kOverlayRect, content_bounds_[0]);
1447 } 1481 }
1448 1482
1449 TEST_F(UnderlayCastTest, RoundOverlayContentBounds) { 1483 TEST_F(UnderlayCastTest, RoundOverlayContentBounds) {
1450 // Check rounding behaviour on overlay quads. Be conservative (content 1484 // Check rounding behaviour on overlay quads. Be conservative (content
1451 // potentially visible on boundary). 1485 // potentially visible on boundary).
1452 const gfx::Rect overlay_rect(1, 1, 8, 8); 1486 const gfx::Rect overlay_rect(1, 1, 8, 8);
1453 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( 1487 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect(
1454 gfx::RectF(1.5f, 1.5f, 8, 8)); 1488 gfx::RectF(1.5f, 1.5f, 8, 8));
1455 1489
1456 gfx::Transform transform; 1490 gfx::Transform transform;
1457 transform.Translate(0.5f, 0.5f); 1491 transform.Translate(0.5f, 0.5f);
1458 1492
1459 std::unique_ptr<RenderPass> pass = CreateRenderPassWithTransform(transform); 1493 std::unique_ptr<RenderPass> pass = CreateRenderPassWithTransform(transform);
1460 CreateCandidateQuadAt(resource_provider_.get(), 1494 CreateCandidateQuadAt(resource_provider_.get(),
1461 pass->shared_quad_state_list.back(), pass.get(), 1495 pass->shared_quad_state_list.back(), pass.get(),
1462 overlay_rect); 1496 overlay_rect);
1463 CreateOpaqueQuadAt(resource_provider_.get(), 1497 CreateOpaqueQuadAt(resource_provider_.get(),
1464 pass->shared_quad_state_list.back(), pass.get(), 1498 pass->shared_quad_state_list.back(), pass.get(),
1465 gfx::Rect(0, 0, 10, 10), SK_ColorWHITE); 1499 gfx::Rect(0, 0, 10, 10), SK_ColorWHITE);
1466 1500
1467 OverlayCandidateList candidate_list; 1501 OverlayCandidateList candidate_list;
1468 RenderPassFilterList render_pass_filters; 1502 RenderPassFilterList render_pass_filters;
1469 RenderPassFilterList render_pass_background_filters; 1503 RenderPassFilterList render_pass_background_filters;
1470 overlay_processor_->ProcessForOverlays( 1504 overlay_processor_->ProcessForOverlays(
1471 resource_provider_.get(), pass.get(), render_pass_filters, 1505 resource_provider_.get(), pass.get(), render_pass_filters,
1472 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 1506 render_pass_background_filters, &candidate_list, nullptr, nullptr,
1473 &content_bounds_); 1507 &damage_rect_, &content_bounds_);
1474 1508
1475 EXPECT_EQ(1U, content_bounds_.size()); 1509 EXPECT_EQ(1U, content_bounds_.size());
1476 EXPECT_EQ(gfx::Rect(0, 0, 11, 11), content_bounds_[0]); 1510 EXPECT_EQ(gfx::Rect(0, 0, 11, 11), content_bounds_[0]);
1477 } 1511 }
1478 1512
1479 TEST_F(UnderlayCastTest, RoundContentBounds) { 1513 TEST_F(UnderlayCastTest, RoundContentBounds) {
1480 // Check rounding behaviour on content quads (bounds should be enclosing 1514 // Check rounding behaviour on content quads (bounds should be enclosing
1481 // rect). 1515 // rect).
1482 gfx::Rect overlay_rect = kOverlayRect; 1516 gfx::Rect overlay_rect = kOverlayRect;
1483 overlay_rect.Inset(0, 0, 1, 1); 1517 overlay_rect.Inset(0, 0, 1, 1);
1484 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( 1518 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect(
1485 gfx::RectF(0.5f, 0.5f, 255, 255)); 1519 gfx::RectF(0.5f, 0.5f, 255, 255));
1486 1520
1487 gfx::Transform transform; 1521 gfx::Transform transform;
1488 transform.Translate(0.5f, 0.5f); 1522 transform.Translate(0.5f, 0.5f);
1489 1523
1490 std::unique_ptr<RenderPass> pass = CreateRenderPassWithTransform(transform); 1524 std::unique_ptr<RenderPass> pass = CreateRenderPassWithTransform(transform);
1491 CreateCandidateQuadAt(resource_provider_.get(), 1525 CreateCandidateQuadAt(resource_provider_.get(),
1492 pass->shared_quad_state_list.back(), pass.get(), 1526 pass->shared_quad_state_list.back(), pass.get(),
1493 overlay_rect); 1527 overlay_rect);
1494 CreateOpaqueQuadAt(resource_provider_.get(), 1528 CreateOpaqueQuadAt(resource_provider_.get(),
1495 pass->shared_quad_state_list.back(), pass.get(), 1529 pass->shared_quad_state_list.back(), pass.get(),
1496 gfx::Rect(0, 0, 255, 255), SK_ColorWHITE); 1530 gfx::Rect(0, 0, 255, 255), SK_ColorWHITE);
1497 1531
1498 OverlayCandidateList candidate_list; 1532 OverlayCandidateList candidate_list;
1499 RenderPassFilterList render_pass_filters; 1533 RenderPassFilterList render_pass_filters;
1500 RenderPassFilterList render_pass_background_filters; 1534 RenderPassFilterList render_pass_background_filters;
1501 overlay_processor_->ProcessForOverlays( 1535 overlay_processor_->ProcessForOverlays(
1502 resource_provider_.get(), pass.get(), render_pass_filters, 1536 resource_provider_.get(), pass.get(), render_pass_filters,
1503 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, 1537 render_pass_background_filters, &candidate_list, nullptr, nullptr,
1504 &content_bounds_); 1538 &damage_rect_, &content_bounds_);
1505 1539
1506 EXPECT_EQ(1U, content_bounds_.size()); 1540 EXPECT_EQ(1U, content_bounds_.size());
1507 EXPECT_EQ(kOverlayRect, content_bounds_[0]); 1541 EXPECT_EQ(kOverlayRect, content_bounds_[0]);
1508 } 1542 }
1509 1543
1510 OverlayCandidateList BackbufferOverlayList(const RenderPass* root_render_pass) { 1544 OverlayCandidateList BackbufferOverlayList(const RenderPass* root_render_pass) {
1511 OverlayCandidateList list; 1545 OverlayCandidateList list;
1512 OverlayCandidate output_surface_plane; 1546 OverlayCandidate output_surface_plane;
1513 output_surface_plane.display_rect = gfx::RectF(root_render_pass->output_rect); 1547 output_surface_plane.display_rect = gfx::RectF(root_render_pass->output_rect);
1514 output_surface_plane.quad_rect_in_target_space = 1548 output_surface_plane.quad_rect_in_target_space =
(...skipping 12 matching lines...) Expand all
1527 pass->shared_quad_state_list.back() 1561 pass->shared_quad_state_list.back()
1528 ->quad_to_target_transform.RotateAboutZAxis(45.f); 1562 ->quad_to_target_transform.RotateAboutZAxis(45.f);
1529 1563
1530 gfx::Rect damage_rect; 1564 gfx::Rect damage_rect;
1531 CALayerOverlayList ca_layer_list; 1565 CALayerOverlayList ca_layer_list;
1532 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); 1566 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get()));
1533 RenderPassFilterList render_pass_filters; 1567 RenderPassFilterList render_pass_filters;
1534 RenderPassFilterList render_pass_background_filters; 1568 RenderPassFilterList render_pass_background_filters;
1535 overlay_processor_->ProcessForOverlays( 1569 overlay_processor_->ProcessForOverlays(
1536 resource_provider_.get(), pass.get(), render_pass_filters, 1570 resource_provider_.get(), pass.get(), render_pass_filters,
1537 render_pass_background_filters, &overlay_list, &ca_layer_list, 1571 render_pass_background_filters, &overlay_list, &ca_layer_list, nullptr,
1538 &damage_rect_, &content_bounds_); 1572 &damage_rect_, &content_bounds_);
1539 EXPECT_EQ(gfx::Rect(), damage_rect); 1573 EXPECT_EQ(gfx::Rect(), damage_rect);
1540 EXPECT_EQ(0U, overlay_list.size()); 1574 EXPECT_EQ(0U, overlay_list.size());
1541 EXPECT_EQ(1U, ca_layer_list.size()); 1575 EXPECT_EQ(1U, ca_layer_list.size());
1542 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); 1576 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count());
1543 } 1577 }
1544 1578
1545 TEST_F(CALayerOverlayTest, ThreeDTransform) { 1579 TEST_F(CALayerOverlayTest, ThreeDTransform) {
1546 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 1580 std::unique_ptr<RenderPass> pass = CreateRenderPass();
1547 CreateFullscreenCandidateQuad(resource_provider_.get(), 1581 CreateFullscreenCandidateQuad(resource_provider_.get(),
1548 pass->shared_quad_state_list.back(), 1582 pass->shared_quad_state_list.back(),
1549 pass.get()); 1583 pass.get());
1550 pass->shared_quad_state_list.back() 1584 pass->shared_quad_state_list.back()
1551 ->quad_to_target_transform.RotateAboutXAxis(45.f); 1585 ->quad_to_target_transform.RotateAboutXAxis(45.f);
1552 1586
1553 gfx::Rect damage_rect; 1587 gfx::Rect damage_rect;
1554 CALayerOverlayList ca_layer_list; 1588 CALayerOverlayList ca_layer_list;
1555 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); 1589 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get()));
1556 RenderPassFilterList render_pass_filters; 1590 RenderPassFilterList render_pass_filters;
1557 RenderPassFilterList render_pass_background_filters; 1591 RenderPassFilterList render_pass_background_filters;
1558 overlay_processor_->ProcessForOverlays( 1592 overlay_processor_->ProcessForOverlays(
1559 resource_provider_.get(), pass.get(), render_pass_filters, 1593 resource_provider_.get(), pass.get(), render_pass_filters,
1560 render_pass_background_filters, &overlay_list, &ca_layer_list, 1594 render_pass_background_filters, &overlay_list, &ca_layer_list, nullptr,
1561 &damage_rect_, &content_bounds_); 1595 &damage_rect_, &content_bounds_);
1562 EXPECT_EQ(0U, overlay_list.size()); 1596 EXPECT_EQ(0U, overlay_list.size());
1563 EXPECT_EQ(1U, ca_layer_list.size()); 1597 EXPECT_EQ(1U, ca_layer_list.size());
1564 gfx::Transform expected_transform; 1598 gfx::Transform expected_transform;
1565 expected_transform.RotateAboutXAxis(45.f); 1599 expected_transform.RotateAboutXAxis(45.f);
1566 gfx::Transform actual_transform(ca_layer_list.back().shared_state->transform); 1600 gfx::Transform actual_transform(ca_layer_list.back().shared_state->transform);
1567 EXPECT_EQ(expected_transform.ToString(), actual_transform.ToString()); 1601 EXPECT_EQ(expected_transform.ToString(), actual_transform.ToString());
1568 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); 1602 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count());
1569 } 1603 }
1570 1604
1571 TEST_F(CALayerOverlayTest, AllowContainingClip) { 1605 TEST_F(CALayerOverlayTest, AllowContainingClip) {
1572 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 1606 std::unique_ptr<RenderPass> pass = CreateRenderPass();
1573 CreateFullscreenCandidateQuad(resource_provider_.get(), 1607 CreateFullscreenCandidateQuad(resource_provider_.get(),
1574 pass->shared_quad_state_list.back(), 1608 pass->shared_quad_state_list.back(),
1575 pass.get()); 1609 pass.get());
1576 pass->shared_quad_state_list.back()->is_clipped = true; 1610 pass->shared_quad_state_list.back()->is_clipped = true;
1577 pass->shared_quad_state_list.back()->clip_rect = kOverlayRect; 1611 pass->shared_quad_state_list.back()->clip_rect = kOverlayRect;
1578 1612
1579 gfx::Rect damage_rect; 1613 gfx::Rect damage_rect;
1580 CALayerOverlayList ca_layer_list; 1614 CALayerOverlayList ca_layer_list;
1581 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); 1615 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get()));
1582 RenderPassFilterList render_pass_filters; 1616 RenderPassFilterList render_pass_filters;
1583 RenderPassFilterList render_pass_background_filters; 1617 RenderPassFilterList render_pass_background_filters;
1584 overlay_processor_->ProcessForOverlays( 1618 overlay_processor_->ProcessForOverlays(
1585 resource_provider_.get(), pass.get(), render_pass_filters, 1619 resource_provider_.get(), pass.get(), render_pass_filters,
1586 render_pass_background_filters, &overlay_list, &ca_layer_list, 1620 render_pass_background_filters, &overlay_list, &ca_layer_list, nullptr,
1587 &damage_rect_, &content_bounds_); 1621 &damage_rect_, &content_bounds_);
1588 EXPECT_EQ(gfx::Rect(), damage_rect); 1622 EXPECT_EQ(gfx::Rect(), damage_rect);
1589 EXPECT_EQ(0U, overlay_list.size()); 1623 EXPECT_EQ(0U, overlay_list.size());
1590 EXPECT_EQ(1U, ca_layer_list.size()); 1624 EXPECT_EQ(1U, ca_layer_list.size());
1591 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); 1625 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count());
1592 } 1626 }
1593 1627
1594 TEST_F(CALayerOverlayTest, NontrivialClip) { 1628 TEST_F(CALayerOverlayTest, NontrivialClip) {
1595 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 1629 std::unique_ptr<RenderPass> pass = CreateRenderPass();
1596 CreateFullscreenCandidateQuad(resource_provider_.get(), 1630 CreateFullscreenCandidateQuad(resource_provider_.get(),
1597 pass->shared_quad_state_list.back(), 1631 pass->shared_quad_state_list.back(),
1598 pass.get()); 1632 pass.get());
1599 pass->shared_quad_state_list.back()->is_clipped = true; 1633 pass->shared_quad_state_list.back()->is_clipped = true;
1600 pass->shared_quad_state_list.back()->clip_rect = gfx::Rect(64, 64, 128, 128); 1634 pass->shared_quad_state_list.back()->clip_rect = gfx::Rect(64, 64, 128, 128);
1601 1635
1602 gfx::Rect damage_rect; 1636 gfx::Rect damage_rect;
1603 CALayerOverlayList ca_layer_list; 1637 CALayerOverlayList ca_layer_list;
1604 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); 1638 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get()));
1605 RenderPassFilterList render_pass_filters; 1639 RenderPassFilterList render_pass_filters;
1606 RenderPassFilterList render_pass_background_filters; 1640 RenderPassFilterList render_pass_background_filters;
1607 overlay_processor_->ProcessForOverlays( 1641 overlay_processor_->ProcessForOverlays(
1608 resource_provider_.get(), pass.get(), render_pass_filters, 1642 resource_provider_.get(), pass.get(), render_pass_filters,
1609 render_pass_background_filters, &overlay_list, &ca_layer_list, 1643 render_pass_background_filters, &overlay_list, &ca_layer_list, nullptr,
1610 &damage_rect_, &content_bounds_); 1644 &damage_rect_, &content_bounds_);
1611 EXPECT_EQ(gfx::Rect(), damage_rect); 1645 EXPECT_EQ(gfx::Rect(), damage_rect);
1612 EXPECT_EQ(0U, overlay_list.size()); 1646 EXPECT_EQ(0U, overlay_list.size());
1613 EXPECT_EQ(1U, ca_layer_list.size()); 1647 EXPECT_EQ(1U, ca_layer_list.size());
1614 EXPECT_TRUE(ca_layer_list.back().shared_state->is_clipped); 1648 EXPECT_TRUE(ca_layer_list.back().shared_state->is_clipped);
1615 EXPECT_EQ(gfx::RectF(64, 64, 128, 128), 1649 EXPECT_EQ(gfx::RectF(64, 64, 128, 128),
1616 ca_layer_list.back().shared_state->clip_rect); 1650 ca_layer_list.back().shared_state->clip_rect);
1617 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); 1651 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count());
1618 } 1652 }
1619 1653
1620 TEST_F(CALayerOverlayTest, SkipTransparent) { 1654 TEST_F(CALayerOverlayTest, SkipTransparent) {
1621 std::unique_ptr<RenderPass> pass = CreateRenderPass(); 1655 std::unique_ptr<RenderPass> pass = CreateRenderPass();
1622 CreateFullscreenCandidateQuad(resource_provider_.get(), 1656 CreateFullscreenCandidateQuad(resource_provider_.get(),
1623 pass->shared_quad_state_list.back(), 1657 pass->shared_quad_state_list.back(),
1624 pass.get()); 1658 pass.get());
1625 pass->shared_quad_state_list.back()->opacity = 0; 1659 pass->shared_quad_state_list.back()->opacity = 0;
1626 1660
1627 gfx::Rect damage_rect; 1661 gfx::Rect damage_rect;
1628 CALayerOverlayList ca_layer_list; 1662 CALayerOverlayList ca_layer_list;
1629 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); 1663 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get()));
1630 RenderPassFilterList render_pass_filters; 1664 RenderPassFilterList render_pass_filters;
1631 RenderPassFilterList render_pass_background_filters; 1665 RenderPassFilterList render_pass_background_filters;
1632 overlay_processor_->ProcessForOverlays( 1666 overlay_processor_->ProcessForOverlays(
1633 resource_provider_.get(), pass.get(), render_pass_filters, 1667 resource_provider_.get(), pass.get(), render_pass_filters,
1634 render_pass_background_filters, &overlay_list, &ca_layer_list, 1668 render_pass_background_filters, &overlay_list, &ca_layer_list, nullptr,
1635 &damage_rect_, &content_bounds_); 1669 &damage_rect_, &content_bounds_);
1636 EXPECT_EQ(gfx::Rect(), damage_rect); 1670 EXPECT_EQ(gfx::Rect(), damage_rect);
1637 EXPECT_EQ(0U, overlay_list.size()); 1671 EXPECT_EQ(0U, overlay_list.size());
1638 EXPECT_EQ(0U, ca_layer_list.size()); 1672 EXPECT_EQ(0U, ca_layer_list.size());
1639 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); 1673 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count());
1640 } 1674 }
1641 1675
1676 TEST_F(DCLayerOverlayTest, AllowNonAxisAlignedTransform) {
1677 std::unique_ptr<RenderPass> pass = CreateRenderPass();
1678 CreateFullscreenCandidateYUVVideoQuad(resource_provider_.get(),
1679 pass->shared_quad_state_list.back(),
1680 pass.get());
1681 pass->shared_quad_state_list.back()
1682 ->quad_to_target_transform.RotateAboutZAxis(45.f);
1683
1684 gfx::Rect damage_rect;
1685 DCLayerOverlayList dc_layer_list;
1686 OverlayCandidateList overlay_list;
1687 RenderPassFilterList render_pass_filters;
1688 RenderPassFilterList render_pass_background_filters;
1689 damage_rect_ = gfx::Rect(1, 1, 10, 10);
1690 overlay_processor_->ProcessForOverlays(
1691 resource_provider_.get(), pass.get(), render_pass_filters,
1692 render_pass_background_filters, &overlay_list, nullptr, &dc_layer_list,
1693 &damage_rect_, &content_bounds_);
1694 EXPECT_EQ(gfx::Rect(), damage_rect);
1695 EXPECT_EQ(0U, overlay_list.size());
1696 EXPECT_EQ(1U, dc_layer_list.size());
1697 EXPECT_EQ(1, dc_layer_list.back().shared_state->z_order);
1698 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count());
1699 EXPECT_EQ(gfx::Rect(1, 1, 10, 10), damage_rect_);
1700 }
1701
1702 TEST_F(DCLayerOverlayTest, Occluded) {
1703 {
1704 std::unique_ptr<RenderPass> pass = CreateRenderPass();
1705 CreateOpaqueQuadAt(resource_provider_.get(),
1706 pass->shared_quad_state_list.back(), pass.get(),
1707 gfx::Rect(0, 2, 100, 100), SK_ColorWHITE);
1708 CreateFullscreenCandidateYUVVideoQuad(resource_provider_.get(),
1709 pass->shared_quad_state_list.back(),
1710 pass.get());
1711
1712 gfx::Rect damage_rect;
1713 DCLayerOverlayList dc_layer_list;
1714 OverlayCandidateList overlay_list;
1715 RenderPassFilterList render_pass_filters;
1716 RenderPassFilterList render_pass_background_filters;
1717 damage_rect_ = gfx::Rect(1, 1, 10, 10);
1718 overlay_processor_->ProcessForOverlays(
1719 resource_provider_.get(), pass.get(), render_pass_filters,
1720 render_pass_background_filters, &overlay_list, nullptr, &dc_layer_list,
1721 &damage_rect_, &content_bounds_);
1722 EXPECT_EQ(gfx::Rect(), damage_rect);
1723 EXPECT_EQ(0U, overlay_list.size());
1724 EXPECT_EQ(1U, dc_layer_list.size());
1725 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count());
1726 EXPECT_EQ(-1, dc_layer_list.back().shared_state->z_order);
1727 // Entire underlay rect must be redrawn.
1728 EXPECT_EQ(gfx::Rect(0, 0, 256, 256), damage_rect_);
1729 }
1730 {
1731 std::unique_ptr<RenderPass> pass = CreateRenderPass();
1732 CreateOpaqueQuadAt(resource_provider_.get(),
1733 pass->shared_quad_state_list.back(), pass.get(),
1734 gfx::Rect(2, 2, 100, 100), SK_ColorWHITE);
1735 CreateFullscreenCandidateYUVVideoQuad(resource_provider_.get(),
1736 pass->shared_quad_state_list.back(),
1737 pass.get());
1738
1739 gfx::Rect damage_rect;
1740 DCLayerOverlayList dc_layer_list;
1741 OverlayCandidateList overlay_list;
1742 RenderPassFilterList render_pass_filters;
1743 RenderPassFilterList render_pass_background_filters;
1744 damage_rect_ = gfx::Rect(1, 1, 10, 10);
1745 overlay_processor_->ProcessForOverlays(
1746 resource_provider_.get(), pass.get(), render_pass_filters,
1747 render_pass_background_filters, &overlay_list, nullptr, &dc_layer_list,
1748 &damage_rect_, &content_bounds_);
1749 EXPECT_EQ(gfx::Rect(), damage_rect);
1750 EXPECT_EQ(0U, overlay_list.size());
1751 EXPECT_EQ(1U, dc_layer_list.size());
1752 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count());
1753 EXPECT_EQ(-1, dc_layer_list.back().shared_state->z_order);
1754 // The underlay rectangle is the same, so the damage is contained within
1755 // the combined occluding rects for this and the last frame.
1756 EXPECT_EQ(gfx::Rect(1, 2, 10, 9), damage_rect_);
1757 }
1758 }
1759
1760 TEST_F(DCLayerOverlayTest, DamageRect) {
1761 std::unique_ptr<RenderPass> pass = CreateRenderPass();
1762 CreateFullscreenCandidateYUVVideoQuad(resource_provider_.get(),
1763 pass->shared_quad_state_list.back(),
1764 pass.get());
1765
1766 gfx::Rect damage_rect;
1767 DCLayerOverlayList dc_layer_list;
1768 OverlayCandidateList overlay_list;
1769 RenderPassFilterList render_pass_filters;
1770 RenderPassFilterList render_pass_background_filters;
1771 damage_rect_ = gfx::Rect(1, 1, 10, 10);
1772 overlay_processor_->ProcessForOverlays(
1773 resource_provider_.get(), pass.get(), render_pass_filters,
1774 render_pass_background_filters, &overlay_list, nullptr, &dc_layer_list,
1775 &damage_rect_, &content_bounds_);
1776 EXPECT_EQ(gfx::Rect(), damage_rect);
1777 EXPECT_EQ(0U, overlay_list.size());
1778 EXPECT_EQ(1U, dc_layer_list.size());
1779 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count());
1780 EXPECT_EQ(1, dc_layer_list.back().shared_state->z_order);
1781 EXPECT_TRUE(damage_rect_.IsEmpty());
1782 }
1783
1642 class OverlayInfoRendererGL : public GLRenderer { 1784 class OverlayInfoRendererGL : public GLRenderer {
1643 public: 1785 public:
1644 OverlayInfoRendererGL(const RendererSettings* settings, 1786 OverlayInfoRendererGL(const RendererSettings* settings,
1645 OutputSurface* output_surface, 1787 OutputSurface* output_surface,
1646 ResourceProvider* resource_provider) 1788 ResourceProvider* resource_provider)
1647 : GLRenderer(settings, output_surface, resource_provider, NULL, 0), 1789 : GLRenderer(settings, output_surface, resource_provider, NULL, 0),
1648 expect_overlays_(false) {} 1790 expect_overlays_(false) {}
1649 1791
1650 MOCK_METHOD2(DoDrawQuad, 1792 MOCK_METHOD2(DoDrawQuad,
1651 void(const DrawQuad* quad, const gfx::QuadF* draw_region)); 1793 void(const DrawQuad* quad, const gfx::QuadF* draw_region));
(...skipping 518 matching lines...) Expand 10 before | Expand all | Expand 10 after
2170 quad_ = pass_->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); 2312 quad_ = pass_->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
2171 render_pass_id_ = 3; 2313 render_pass_id_ = 3;
2172 } 2314 }
2173 2315
2174 void ProcessForOverlays() { 2316 void ProcessForOverlays() {
2175 gfx::Rect damage_rect; 2317 gfx::Rect damage_rect;
2176 overlay_list_ = BackbufferOverlayList(pass_.get()); 2318 overlay_list_ = BackbufferOverlayList(pass_.get());
2177 overlay_processor_->ProcessForOverlays( 2319 overlay_processor_->ProcessForOverlays(
2178 resource_provider_.get(), pass_.get(), render_pass_filters_, 2320 resource_provider_.get(), pass_.get(), render_pass_filters_,
2179 render_pass_background_filters_, &overlay_list_, &ca_layer_list_, 2321 render_pass_background_filters_, &overlay_list_, &ca_layer_list_,
2180 &damage_rect_, &content_bounds_); 2322 nullptr, &damage_rect_, &content_bounds_);
2181 } 2323 }
2182 std::unique_ptr<RenderPass> pass_; 2324 std::unique_ptr<RenderPass> pass_;
2183 RenderPassDrawQuad* quad_; 2325 RenderPassDrawQuad* quad_;
2184 int render_pass_id_; 2326 int render_pass_id_;
2185 FilterOperations filters_; 2327 FilterOperations filters_;
2186 FilterOperations background_filters_; 2328 FilterOperations background_filters_;
2187 RenderPassFilterList render_pass_filters_; 2329 RenderPassFilterList render_pass_filters_;
2188 RenderPassFilterList render_pass_background_filters_; 2330 RenderPassFilterList render_pass_background_filters_;
2189 CALayerOverlayList ca_layer_list_; 2331 CALayerOverlayList ca_layer_list_;
2190 OverlayCandidateList overlay_list_; 2332 OverlayCandidateList overlay_list_;
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
2291 kOverlayRect, render_pass_id_, 2, gfx::RectF(), gfx::Size(), 2433 kOverlayRect, render_pass_id_, 2, gfx::RectF(), gfx::Size(),
2292 gfx::Vector2dF(1, 1), gfx::PointF(), gfx::RectF()); 2434 gfx::Vector2dF(1, 1), gfx::PointF(), gfx::RectF());
2293 } 2435 }
2294 2436
2295 ProcessForOverlays(); 2437 ProcessForOverlays();
2296 EXPECT_EQ(0U, ca_layer_list_.size()); 2438 EXPECT_EQ(0U, ca_layer_list_.size());
2297 } 2439 }
2298 2440
2299 } // namespace 2441 } // namespace
2300 } // namespace cc 2442 } // namespace cc
OLDNEW
« no previous file with comments | « cc/output/overlay_processor.cc ('k') | components/display_compositor/compositor_overlay_candidate_validator_android.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698