| Index: cc/output/overlay_unittest.cc
|
| diff --git a/cc/output/overlay_unittest.cc b/cc/output/overlay_unittest.cc
|
| index 8dcd8dd4b0baa0b6f273d9cd2aaff47e8b8517ce..cab912fc0cb2877832bca6fcedc49bcdd13c7a66 100644
|
| --- a/cc/output/overlay_unittest.cc
|
| +++ b/cc/output/overlay_unittest.cc
|
| @@ -20,6 +20,7 @@
|
| #include "cc/output/overlay_strategy_fullscreen.h"
|
| #include "cc/output/overlay_strategy_single_on_top.h"
|
| #include "cc/output/overlay_strategy_underlay.h"
|
| +#include "cc/output/overlay_strategy_underlay_cast.h"
|
| #include "cc/quads/render_pass.h"
|
| #include "cc/quads/render_pass_draw_quad.h"
|
| #include "cc/quads/solid_color_draw_quad.h"
|
| @@ -130,6 +131,13 @@ class UnderlayOverlayValidator : public SingleOverlayValidator {
|
| }
|
| };
|
|
|
| +class UnderlayCastOverlayValidator : public SingleOverlayValidator {
|
| + public:
|
| + void GetStrategies(OverlayProcessor::StrategyList* strategies) override {
|
| + strategies->push_back(base::MakeUnique<OverlayStrategyUnderlayCast>(this));
|
| + }
|
| +};
|
| +
|
| class DefaultOverlayProcessor : public OverlayProcessor {
|
| public:
|
| explicit DefaultOverlayProcessor(OutputSurface* surface);
|
| @@ -302,6 +310,16 @@ void CreateOpaqueQuadAt(ResourceProvider* resource_provider,
|
| color_quad->SetNew(shared_quad_state, rect, rect, SK_ColorBLACK, false);
|
| }
|
|
|
| +void CreateOpaqueQuadAt(ResourceProvider* resource_provider,
|
| + const SharedQuadState* shared_quad_state,
|
| + RenderPass* render_pass,
|
| + const gfx::Rect& rect,
|
| + SkColor color) {
|
| + SolidColorDrawQuad* color_quad =
|
| + render_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
|
| + color_quad->SetNew(shared_quad_state, rect, rect, color, false);
|
| +}
|
| +
|
| void CreateFullscreenOpaqueQuad(ResourceProvider* resource_provider,
|
| const SharedQuadState* shared_quad_state,
|
| RenderPass* render_pass) {
|
| @@ -365,12 +383,14 @@ class OverlayTest : public testing::Test {
|
| std::unique_ptr<ResourceProvider> resource_provider_;
|
| std::unique_ptr<OverlayProcessor> overlay_processor_;
|
| gfx::Rect damage_rect_;
|
| + std::vector<gfx::Rect> content_bounds_;
|
| };
|
|
|
| -typedef OverlayTest<FullscreenOverlayValidator> FullscreenOverlayTest;
|
| -typedef OverlayTest<SingleOnTopOverlayValidator> SingleOverlayOnTopTest;
|
| -typedef OverlayTest<UnderlayOverlayValidator> UnderlayTest;
|
| -typedef OverlayTest<CALayerValidator> CALayerOverlayTest;
|
| +using FullscreenOverlayTest = OverlayTest<FullscreenOverlayValidator>;
|
| +using SingleOverlayOnTopTest = OverlayTest<SingleOnTopOverlayValidator>;
|
| +using UnderlayTest = OverlayTest<UnderlayOverlayValidator>;
|
| +using UnderlayCastTest = OverlayTest<UnderlayCastOverlayValidator>;
|
| +using CALayerOverlayTest = OverlayTest<CALayerValidator>;
|
|
|
| TEST(OverlayTest, NoOverlaysByDefault) {
|
| scoped_refptr<TestContextProvider> provider = TestContextProvider::Create();
|
| @@ -417,7 +437,8 @@ TEST_F(FullscreenOverlayTest, SuccessfulOverlay) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| ASSERT_EQ(1U, candidate_list.size());
|
|
|
| RenderPass* main_pass = pass.get();
|
| @@ -442,7 +463,8 @@ TEST_F(FullscreenOverlayTest, ResourceSizeInPixelsFail) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| ASSERT_EQ(0U, candidate_list.size());
|
|
|
| RenderPass* main_pass = pass.get();
|
| @@ -468,7 +490,8 @@ TEST_F(FullscreenOverlayTest, OnTopFail) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| ASSERT_EQ(0U, candidate_list.size());
|
|
|
| RenderPass* main_pass = pass.get();
|
| @@ -490,7 +513,8 @@ TEST_F(FullscreenOverlayTest, NotCoveringFullscreenFail) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| ASSERT_EQ(0U, candidate_list.size());
|
|
|
| RenderPass* main_pass = pass.get();
|
| @@ -519,7 +543,8 @@ TEST_F(FullscreenOverlayTest, RemoveFullscreenQuadFromQuadList) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| ASSERT_EQ(1U, candidate_list.size());
|
|
|
| // Check that the fullscreen quad is gone.
|
| @@ -548,7 +573,8 @@ TEST_F(SingleOverlayOnTopTest, SuccessfulOverlay) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| ASSERT_EQ(1U, candidate_list.size());
|
|
|
| RenderPass* main_pass = pass.get();
|
| @@ -593,7 +619,8 @@ TEST_F(SingleOverlayOnTopTest, DamageRect) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| DCHECK(damage_rect_.IsEmpty());
|
| }
|
|
|
| @@ -615,7 +642,8 @@ TEST_F(SingleOverlayOnTopTest, NoCandidates) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass_list.back().get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| EXPECT_EQ(0U, candidate_list.size());
|
| // There should be nothing new here.
|
| CompareRenderPassLists(pass_list, original_pass_list);
|
| @@ -643,7 +671,8 @@ TEST_F(SingleOverlayOnTopTest, OccludedCandidates) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass_list.back().get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| EXPECT_EQ(0U, candidate_list.size());
|
| // There should be nothing new here.
|
| CompareRenderPassLists(pass_list, original_pass_list);
|
| @@ -668,7 +697,8 @@ TEST_F(SingleOverlayOnTopTest, MultipleRenderPasses) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| EXPECT_EQ(1U, candidate_list.size());
|
| }
|
|
|
| @@ -685,7 +715,8 @@ TEST_F(SingleOverlayOnTopTest, RejectBlending) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| EXPECT_EQ(0U, candidate_list.size());
|
| }
|
|
|
| @@ -702,7 +733,8 @@ TEST_F(SingleOverlayOnTopTest, RejectBackgroundColor) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| EXPECT_EQ(0U, candidate_list.size());
|
| }
|
|
|
| @@ -718,7 +750,8 @@ TEST_F(SingleOverlayOnTopTest, RejectBlendMode) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| EXPECT_EQ(0U, candidate_list.size());
|
| }
|
|
|
| @@ -734,7 +767,8 @@ TEST_F(SingleOverlayOnTopTest, RejectOpacity) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| EXPECT_EQ(0U, candidate_list.size());
|
| }
|
|
|
| @@ -751,7 +785,8 @@ TEST_F(SingleOverlayOnTopTest, RejectNonAxisAlignedTransform) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| EXPECT_EQ(0U, candidate_list.size());
|
| }
|
|
|
| @@ -768,7 +803,8 @@ TEST_F(SingleOverlayOnTopTest, AllowClipped) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| EXPECT_EQ(1U, candidate_list.size());
|
| }
|
|
|
| @@ -786,7 +822,8 @@ TEST_F(SingleOverlayOnTopTest, AllowVerticalFlip) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| ASSERT_EQ(1U, candidate_list.size());
|
| EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_VERTICAL,
|
| candidate_list.back().transform);
|
| @@ -807,7 +844,8 @@ TEST_F(SingleOverlayOnTopTest, AllowHorizontalFlip) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| ASSERT_EQ(1U, candidate_list.size());
|
| EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_HORIZONTAL,
|
| candidate_list.back().transform);
|
| @@ -826,7 +864,8 @@ TEST_F(SingleOverlayOnTopTest, AllowPositiveScaleTransform) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| EXPECT_EQ(1U, candidate_list.size());
|
| }
|
|
|
| @@ -844,7 +883,8 @@ TEST_F(SingleOverlayOnTopTest, Allow90DegreeRotation) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| ASSERT_EQ(1U, candidate_list.size());
|
| EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_90, candidate_list.back().transform);
|
| }
|
| @@ -863,7 +903,8 @@ TEST_F(SingleOverlayOnTopTest, Allow180DegreeRotation) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| ASSERT_EQ(1U, candidate_list.size());
|
| EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_180, candidate_list.back().transform);
|
| }
|
| @@ -882,7 +923,8 @@ TEST_F(SingleOverlayOnTopTest, Allow270DegreeRotation) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| ASSERT_EQ(1U, candidate_list.size());
|
| EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_270, candidate_list.back().transform);
|
| }
|
| @@ -902,7 +944,8 @@ TEST_F(SingleOverlayOnTopTest, AllowNotTopIfNotOccluded) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| EXPECT_EQ(1U, candidate_list.size());
|
| }
|
|
|
| @@ -922,7 +965,8 @@ TEST_F(SingleOverlayOnTopTest, AllowTransparentOnTop) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| EXPECT_EQ(1U, candidate_list.size());
|
| }
|
|
|
| @@ -940,7 +984,8 @@ TEST_F(SingleOverlayOnTopTest, AllowTransparentColorOnTop) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| EXPECT_EQ(1U, candidate_list.size());
|
| }
|
|
|
| @@ -960,7 +1005,8 @@ TEST_F(SingleOverlayOnTopTest, RejectOpaqueColorOnTop) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| EXPECT_EQ(0U, candidate_list.size());
|
| }
|
|
|
| @@ -978,7 +1024,8 @@ TEST_F(SingleOverlayOnTopTest, RejectTransparentColorOnTopWithoutBlending) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| EXPECT_EQ(0U, candidate_list.size());
|
| }
|
|
|
| @@ -993,7 +1040,8 @@ TEST_F(SingleOverlayOnTopTest, RejectVideoSwapTransform) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| EXPECT_EQ(0U, candidate_list.size());
|
| }
|
|
|
| @@ -1008,7 +1056,8 @@ TEST_F(SingleOverlayOnTopTest, AllowVideoXMirrorTransform) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| EXPECT_EQ(1U, candidate_list.size());
|
| }
|
|
|
| @@ -1023,7 +1072,8 @@ TEST_F(SingleOverlayOnTopTest, AllowVideoBothMirrorTransform) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| EXPECT_EQ(1U, candidate_list.size());
|
| }
|
|
|
| @@ -1038,7 +1088,8 @@ TEST_F(SingleOverlayOnTopTest, AllowVideoNormalTransform) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| EXPECT_EQ(1U, candidate_list.size());
|
| }
|
|
|
| @@ -1053,7 +1104,8 @@ TEST_F(SingleOverlayOnTopTest, AllowVideoYMirrorTransform) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| EXPECT_EQ(1U, candidate_list.size());
|
| }
|
|
|
| @@ -1070,7 +1122,8 @@ TEST_F(UnderlayTest, OverlayLayerUnderMainLayer) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| ASSERT_EQ(1U, candidate_list.size());
|
| EXPECT_EQ(-1, candidate_list[0].plane_z_order);
|
| EXPECT_EQ(2U, pass->quad_list.size());
|
| @@ -1092,7 +1145,8 @@ TEST_F(UnderlayTest, AllowOnTop) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| ASSERT_EQ(1U, candidate_list.size());
|
| EXPECT_EQ(-1, candidate_list[0].plane_z_order);
|
| // The overlay quad should have changed to a SOLID_COLOR quad.
|
| @@ -1113,7 +1167,8 @@ TEST_F(UnderlayTest, InitialUnderlayDamageNotSubtracted) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr, &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
|
|
| EXPECT_EQ(kOverlayRect, damage_rect_);
|
| }
|
| @@ -1138,8 +1193,8 @@ TEST_F(UnderlayTest, DamageSubtractedForConsecutiveIdenticalUnderlays) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr,
|
| - &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| }
|
|
|
| // The second time the same overlay rect is scheduled it will be subtracted
|
| @@ -1165,8 +1220,8 @@ TEST_F(UnderlayTest, DamageNotSubtractedForNonIdenticalConsecutiveUnderlays) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr,
|
| - &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
|
|
| EXPECT_EQ(overlay_rects[i], damage_rect_);
|
| }
|
| @@ -1189,8 +1244,8 @@ TEST_F(UnderlayTest, DamageNotSubtractedWhenQuadsAboveOverlap) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr,
|
| - &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| }
|
|
|
| EXPECT_EQ(kOverlayRect, damage_rect_);
|
| @@ -1214,13 +1269,120 @@ TEST_F(UnderlayTest, DamageSubtractedWhenQuadsAboveDontOverlap) {
|
| RenderPassFilterList render_pass_background_filters;
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| - render_pass_background_filters, &candidate_list, nullptr,
|
| - &damage_rect_);
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| }
|
|
|
| EXPECT_TRUE(damage_rect_.IsEmpty());
|
| }
|
|
|
| +TEST_F(UnderlayCastTest, NoOverlayContentBounds) {
|
| + std::unique_ptr<RenderPass> pass = CreateRenderPass();
|
| +
|
| + CreateOpaqueQuadAt(resource_provider_.get(),
|
| + pass->shared_quad_state_list.back(), pass.get(),
|
| + kOverlayTopLeftRect);
|
| +
|
| + OverlayCandidateList candidate_list;
|
| + RenderPassFilterList render_pass_filters;
|
| + RenderPassFilterList render_pass_background_filters;
|
| + overlay_processor_->ProcessForOverlays(
|
| + resource_provider_.get(), pass.get(), render_pass_filters,
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| + EXPECT_EQ(0U, content_bounds_.size());
|
| +}
|
| +
|
| +TEST_F(UnderlayCastTest, FullScreenOverlayContentBounds) {
|
| + std::unique_ptr<RenderPass> pass = CreateRenderPass();
|
| + CreateCandidateQuadAt(resource_provider_.get(),
|
| + pass->shared_quad_state_list.back(), pass.get(),
|
| + kOverlayRect);
|
| +
|
| + OverlayCandidateList candidate_list;
|
| + RenderPassFilterList render_pass_filters;
|
| + RenderPassFilterList render_pass_background_filters;
|
| + overlay_processor_->ProcessForOverlays(
|
| + resource_provider_.get(), pass.get(), render_pass_filters,
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| +
|
| + EXPECT_EQ(1U, content_bounds_.size());
|
| + EXPECT_TRUE(content_bounds_[0].IsEmpty());
|
| +}
|
| +
|
| +TEST_F(UnderlayCastTest, BlackOutsideOverlayContentBounds) {
|
| + const gfx::Rect kLeftSide(0, 0, 128, 256);
|
| + const gfx::Rect kTopRight(128, 0, 128, 128);
|
| +
|
| + std::unique_ptr<RenderPass> pass = CreateRenderPass();
|
| + CreateCandidateQuadAt(resource_provider_.get(),
|
| + pass->shared_quad_state_list.back(), pass.get(),
|
| + kOverlayBottomRightRect);
|
| + CreateOpaqueQuadAt(resource_provider_.get(),
|
| + pass->shared_quad_state_list.back(), pass.get(), kLeftSide,
|
| + SK_ColorBLACK);
|
| + CreateOpaqueQuadAt(resource_provider_.get(),
|
| + pass->shared_quad_state_list.back(), pass.get(), kTopRight,
|
| + SK_ColorBLACK);
|
| +
|
| + OverlayCandidateList candidate_list;
|
| + RenderPassFilterList render_pass_filters;
|
| + RenderPassFilterList render_pass_background_filters;
|
| + overlay_processor_->ProcessForOverlays(
|
| + resource_provider_.get(), pass.get(), render_pass_filters,
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| +
|
| + EXPECT_EQ(1U, content_bounds_.size());
|
| + EXPECT_TRUE(content_bounds_[0].IsEmpty());
|
| +}
|
| +
|
| +TEST_F(UnderlayCastTest, OverlayOccludedContentBounds) {
|
| + std::unique_ptr<RenderPass> pass = CreateRenderPass();
|
| + CreateOpaqueQuadAt(resource_provider_.get(),
|
| + pass->shared_quad_state_list.back(), pass.get(),
|
| + kOverlayTopLeftRect);
|
| + CreateCandidateQuadAt(resource_provider_.get(),
|
| + pass->shared_quad_state_list.back(), pass.get(),
|
| + kOverlayRect);
|
| +
|
| + OverlayCandidateList candidate_list;
|
| + RenderPassFilterList render_pass_filters;
|
| + RenderPassFilterList render_pass_background_filters;
|
| + overlay_processor_->ProcessForOverlays(
|
| + resource_provider_.get(), pass.get(), render_pass_filters,
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| +
|
| + EXPECT_EQ(1U, content_bounds_.size());
|
| + EXPECT_EQ(kOverlayTopLeftRect, content_bounds_[0]);
|
| +}
|
| +
|
| +TEST_F(UnderlayCastTest, OverlayOccludedUnionContentBounds) {
|
| + std::unique_ptr<RenderPass> pass = CreateRenderPass();
|
| + CreateOpaqueQuadAt(resource_provider_.get(),
|
| + pass->shared_quad_state_list.back(), pass.get(),
|
| + kOverlayTopLeftRect);
|
| + CreateOpaqueQuadAt(resource_provider_.get(),
|
| + pass->shared_quad_state_list.back(), pass.get(),
|
| + kOverlayBottomRightRect);
|
| + CreateCandidateQuadAt(resource_provider_.get(),
|
| + pass->shared_quad_state_list.back(), pass.get(),
|
| + kOverlayRect);
|
| +
|
| + OverlayCandidateList candidate_list;
|
| + RenderPassFilterList render_pass_filters;
|
| + RenderPassFilterList render_pass_background_filters;
|
| + overlay_processor_->ProcessForOverlays(
|
| + resource_provider_.get(), pass.get(), render_pass_filters,
|
| + render_pass_background_filters, &candidate_list, nullptr, &damage_rect_,
|
| + &content_bounds_);
|
| +
|
| + EXPECT_EQ(1U, content_bounds_.size());
|
| + EXPECT_EQ(kOverlayRect, content_bounds_[0]);
|
| +}
|
| +
|
| OverlayCandidateList BackbufferOverlayList(const RenderPass* root_render_pass) {
|
| OverlayCandidateList list;
|
| OverlayCandidate output_surface_plane;
|
| @@ -1249,7 +1411,7 @@ TEST_F(CALayerOverlayTest, AllowNonAxisAlignedTransform) {
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| render_pass_background_filters, &overlay_list, &ca_layer_list,
|
| - &damage_rect);
|
| + &damage_rect_, &content_bounds_);
|
| EXPECT_EQ(gfx::Rect(), damage_rect);
|
| EXPECT_EQ(0U, overlay_list.size());
|
| EXPECT_EQ(1U, ca_layer_list.size());
|
| @@ -1272,7 +1434,7 @@ TEST_F(CALayerOverlayTest, ThreeDTransform) {
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| render_pass_background_filters, &overlay_list, &ca_layer_list,
|
| - &damage_rect);
|
| + &damage_rect_, &content_bounds_);
|
| EXPECT_EQ(0U, overlay_list.size());
|
| EXPECT_EQ(1U, ca_layer_list.size());
|
| gfx::Transform expected_transform;
|
| @@ -1298,7 +1460,7 @@ TEST_F(CALayerOverlayTest, AllowContainingClip) {
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| render_pass_background_filters, &overlay_list, &ca_layer_list,
|
| - &damage_rect);
|
| + &damage_rect_, &content_bounds_);
|
| EXPECT_EQ(gfx::Rect(), damage_rect);
|
| EXPECT_EQ(0U, overlay_list.size());
|
| EXPECT_EQ(1U, ca_layer_list.size());
|
| @@ -1321,7 +1483,7 @@ TEST_F(CALayerOverlayTest, NontrivialClip) {
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| render_pass_background_filters, &overlay_list, &ca_layer_list,
|
| - &damage_rect);
|
| + &damage_rect_, &content_bounds_);
|
| EXPECT_EQ(gfx::Rect(), damage_rect);
|
| EXPECT_EQ(0U, overlay_list.size());
|
| EXPECT_EQ(1U, ca_layer_list.size());
|
| @@ -1346,7 +1508,7 @@ TEST_F(CALayerOverlayTest, SkipTransparent) {
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass.get(), render_pass_filters,
|
| render_pass_background_filters, &overlay_list, &ca_layer_list,
|
| - &damage_rect);
|
| + &damage_rect_, &content_bounds_);
|
| EXPECT_EQ(gfx::Rect(), damage_rect);
|
| EXPECT_EQ(0U, overlay_list.size());
|
| EXPECT_EQ(0U, ca_layer_list.size());
|
| @@ -1886,7 +2048,7 @@ class CALayerOverlayRPDQTest : public CALayerOverlayTest {
|
| overlay_processor_->ProcessForOverlays(
|
| resource_provider_.get(), pass_.get(), render_pass_filters_,
|
| render_pass_background_filters_, &overlay_list_, &ca_layer_list_,
|
| - &damage_rect);
|
| + &damage_rect_, &content_bounds_);
|
| }
|
| std::unique_ptr<RenderPass> pass_;
|
| RenderPassDrawQuad* quad_;
|
|
|