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_; |