OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |