Index: cc/output/overlay_unittest.cc |
diff --git a/cc/output/overlay_unittest.cc b/cc/output/overlay_unittest.cc |
index d36d1db3ab95e42094fe61cdde3ab68f1e7b7e0e..52a7d030eca61b133155a070fc5de17233193ade 100644 |
--- a/cc/output/overlay_unittest.cc |
+++ b/cc/output/overlay_unittest.cc |
@@ -73,6 +73,7 @@ class FullscreenOverlayValidator : public OverlayCandidateValidator { |
strategies->push_back(base::MakeUnique<OverlayStrategyFullscreen>(this)); |
} |
bool AllowCALayerOverlays() override { return false; } |
+ bool AllowDCLayerOverlays() override { return false; } |
void CheckOverlaySupport(OverlayCandidateList* surfaces) override {} |
}; |
@@ -85,6 +86,7 @@ class SingleOverlayValidator : public OverlayCandidateValidator { |
strategies->push_back(base::MakeUnique<OverlayStrategyUnderlay>(this)); |
} |
bool AllowCALayerOverlays() override { return false; } |
+ bool AllowDCLayerOverlays() override { return false; } |
void CheckOverlaySupport(OverlayCandidateList* surfaces) override { |
// We may have 1 or 2 surfaces depending on whether this ran through the |
// full renderer and picked up the output surface, or not. |
@@ -118,6 +120,15 @@ class CALayerValidator : public OverlayCandidateValidator { |
public: |
void GetStrategies(OverlayProcessor::StrategyList* strategies) override {} |
bool AllowCALayerOverlays() override { return true; } |
+ bool AllowDCLayerOverlays() override { return false; } |
+ void CheckOverlaySupport(OverlayCandidateList* surfaces) override {} |
+}; |
+ |
+class DCLayerValidator : public OverlayCandidateValidator { |
+ public: |
+ void GetStrategies(OverlayProcessor::StrategyList* strategies) override {} |
+ bool AllowCALayerOverlays() override { return false; } |
+ bool AllowDCLayerOverlays() override { return true; } |
void CheckOverlaySupport(OverlayCandidateList* surfaces) override {} |
}; |
@@ -321,6 +332,28 @@ StreamVideoDrawQuad* CreateFullscreenCandidateVideoQuad( |
transform); |
} |
+YUVVideoDrawQuad* CreateFullscreenCandidateYUVVideoQuad( |
+ ResourceProvider* resource_provider, |
+ const SharedQuadState* shared_quad_state, |
+ RenderPass* render_pass) { |
+ gfx::RectF tex_coord_rect(0, 0, 1, 1); |
+ gfx::Rect rect = render_pass->output_rect; |
+ gfx::Size resource_size_in_pixels = rect.size(); |
+ bool is_overlay_candidate = true; |
+ ResourceId resource_id = CreateResource( |
+ resource_provider, resource_size_in_pixels, is_overlay_candidate); |
+ |
+ YUVVideoDrawQuad* overlay_quad = |
+ render_pass->CreateAndAppendDrawQuad<YUVVideoDrawQuad>(); |
+ overlay_quad->SetNew(shared_quad_state, rect, rect, rect, tex_coord_rect, |
+ tex_coord_rect, resource_size_in_pixels, |
+ resource_size_in_pixels, resource_id, resource_id, |
+ resource_id, resource_id, YUVVideoDrawQuad::REC_601, |
+ gfx::ColorSpace(), 0, 1.0, 8); |
+ |
+ return overlay_quad; |
+} |
+ |
void CreateOpaqueQuadAt(ResourceProvider* resource_provider, |
const SharedQuadState* shared_quad_state, |
RenderPass* render_pass, |
@@ -414,6 +447,7 @@ using SingleOverlayOnTopTest = OverlayTest<SingleOnTopOverlayValidator>; |
using UnderlayTest = OverlayTest<UnderlayOverlayValidator>; |
using UnderlayCastTest = OverlayTest<UnderlayCastOverlayValidator>; |
using CALayerOverlayTest = OverlayTest<CALayerValidator>; |
+using DCLayerOverlayTest = OverlayTest<DCLayerValidator>; |
TEST(OverlayTest, NoOverlaysByDefault) { |
scoped_refptr<TestContextProvider> provider = TestContextProvider::Create(); |
@@ -460,8 +494,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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
ASSERT_EQ(1U, candidate_list.size()); |
RenderPass* main_pass = pass.get(); |
@@ -486,8 +520,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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
ASSERT_EQ(0U, candidate_list.size()); |
RenderPass* main_pass = pass.get(); |
@@ -513,8 +547,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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
ASSERT_EQ(0U, candidate_list.size()); |
RenderPass* main_pass = pass.get(); |
@@ -536,8 +570,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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
ASSERT_EQ(0U, candidate_list.size()); |
RenderPass* main_pass = pass.get(); |
@@ -566,8 +600,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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
ASSERT_EQ(1U, candidate_list.size()); |
// Check that the fullscreen quad is gone. |
@@ -596,8 +630,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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
ASSERT_EQ(1U, candidate_list.size()); |
RenderPass* main_pass = pass.get(); |
@@ -642,8 +676,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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
DCHECK(damage_rect_.IsEmpty()); |
} |
@@ -665,8 +699,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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
EXPECT_EQ(0U, candidate_list.size()); |
// There should be nothing new here. |
CompareRenderPassLists(pass_list, original_pass_list); |
@@ -694,8 +728,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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
EXPECT_EQ(0U, candidate_list.size()); |
// There should be nothing new here. |
CompareRenderPassLists(pass_list, original_pass_list); |
@@ -720,8 +754,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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
EXPECT_EQ(1U, candidate_list.size()); |
} |
@@ -738,8 +772,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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
EXPECT_EQ(0U, candidate_list.size()); |
} |
@@ -756,8 +790,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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
EXPECT_EQ(0U, candidate_list.size()); |
} |
@@ -773,8 +807,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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
EXPECT_EQ(0U, candidate_list.size()); |
} |
@@ -790,8 +824,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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
EXPECT_EQ(0U, candidate_list.size()); |
} |
@@ -808,8 +842,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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
EXPECT_EQ(0U, candidate_list.size()); |
} |
@@ -826,8 +860,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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
EXPECT_EQ(1U, candidate_list.size()); |
} |
@@ -845,8 +879,8 @@ TEST_F(UnderlayTest, 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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
ASSERT_EQ(1U, candidate_list.size()); |
EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_VERTICAL, |
candidate_list.back().transform); |
@@ -867,8 +901,8 @@ TEST_F(UnderlayTest, 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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
ASSERT_EQ(1U, candidate_list.size()); |
EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_HORIZONTAL, |
candidate_list.back().transform); |
@@ -887,8 +921,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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
EXPECT_EQ(1U, candidate_list.size()); |
} |
@@ -906,8 +940,8 @@ TEST_F(SingleOverlayOnTopTest, RejectTransform) { |
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_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
ASSERT_EQ(0U, candidate_list.size()); |
} |
@@ -925,8 +959,8 @@ TEST_F(UnderlayTest, 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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
ASSERT_EQ(1U, candidate_list.size()); |
EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_90, candidate_list.back().transform); |
} |
@@ -945,8 +979,8 @@ TEST_F(UnderlayTest, 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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
ASSERT_EQ(1U, candidate_list.size()); |
EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_180, candidate_list.back().transform); |
} |
@@ -965,8 +999,8 @@ TEST_F(UnderlayTest, 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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
ASSERT_EQ(1U, candidate_list.size()); |
EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_270, candidate_list.back().transform); |
} |
@@ -989,8 +1023,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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
EXPECT_EQ(1U, candidate_list.size()); |
} |
@@ -1013,8 +1047,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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
EXPECT_EQ(1U, candidate_list.size()); |
} |
@@ -1035,8 +1069,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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
EXPECT_EQ(1U, candidate_list.size()); |
} |
@@ -1056,8 +1090,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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
EXPECT_EQ(0U, candidate_list.size()); |
} |
@@ -1075,8 +1109,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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
EXPECT_EQ(0U, candidate_list.size()); |
} |
@@ -1091,8 +1125,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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
EXPECT_EQ(0U, candidate_list.size()); |
} |
@@ -1107,8 +1141,8 @@ TEST_F(UnderlayTest, 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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
EXPECT_EQ(1U, candidate_list.size()); |
} |
@@ -1123,8 +1157,8 @@ TEST_F(UnderlayTest, 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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
EXPECT_EQ(1U, candidate_list.size()); |
} |
@@ -1139,8 +1173,8 @@ TEST_F(UnderlayTest, 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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
EXPECT_EQ(1U, candidate_list.size()); |
} |
@@ -1155,8 +1189,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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
EXPECT_EQ(1U, candidate_list.size()); |
} |
@@ -1176,8 +1210,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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, 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()); |
@@ -1199,8 +1233,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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, 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. |
@@ -1221,8 +1255,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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
EXPECT_EQ(kOverlayRect, damage_rect_); |
} |
@@ -1247,8 +1281,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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
} |
// The second time the same overlay rect is scheduled it will be subtracted |
@@ -1277,8 +1311,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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
EXPECT_EQ(overlay_rects[i], damage_rect_); |
} |
@@ -1301,8 +1335,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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
} |
EXPECT_EQ(kOverlayRect, damage_rect_); |
@@ -1329,8 +1363,8 @@ 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_, |
- &content_bounds_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
} |
EXPECT_TRUE(damage_rect_.IsEmpty()); |
@@ -1348,8 +1382,8 @@ TEST_F(UnderlayCastTest, NoOverlayContentBounds) { |
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_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
EXPECT_EQ(0U, content_bounds_.size()); |
} |
@@ -1364,8 +1398,8 @@ TEST_F(UnderlayCastTest, FullScreenOverlayContentBounds) { |
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_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
EXPECT_EQ(1U, content_bounds_.size()); |
EXPECT_TRUE(content_bounds_[0].IsEmpty()); |
@@ -1394,8 +1428,8 @@ TEST_F(UnderlayCastTest, BlackOutsideOverlayContentBounds) { |
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_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
EXPECT_EQ(1U, content_bounds_.size()); |
EXPECT_TRUE(content_bounds_[0].IsEmpty()); |
@@ -1415,8 +1449,8 @@ TEST_F(UnderlayCastTest, OverlayOccludedContentBounds) { |
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_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
EXPECT_EQ(1U, content_bounds_.size()); |
EXPECT_EQ(kOverlayTopLeftRect, content_bounds_[0]); |
@@ -1439,8 +1473,8 @@ TEST_F(UnderlayCastTest, OverlayOccludedUnionContentBounds) { |
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_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
EXPECT_EQ(1U, content_bounds_.size()); |
EXPECT_EQ(kOverlayRect, content_bounds_[0]); |
@@ -1469,8 +1503,8 @@ TEST_F(UnderlayCastTest, RoundOverlayContentBounds) { |
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_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
EXPECT_EQ(1U, content_bounds_.size()); |
EXPECT_EQ(gfx::Rect(0, 0, 11, 11), content_bounds_[0]); |
@@ -1500,8 +1534,8 @@ TEST_F(UnderlayCastTest, RoundContentBounds) { |
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_); |
+ render_pass_background_filters, &candidate_list, nullptr, nullptr, |
+ &damage_rect_, &content_bounds_); |
EXPECT_EQ(1U, content_bounds_.size()); |
EXPECT_EQ(kOverlayRect, content_bounds_[0]); |
@@ -1534,7 +1568,7 @@ TEST_F(CALayerOverlayTest, AllowNonAxisAlignedTransform) { |
RenderPassFilterList render_pass_background_filters; |
overlay_processor_->ProcessForOverlays( |
resource_provider_.get(), pass.get(), render_pass_filters, |
- render_pass_background_filters, &overlay_list, &ca_layer_list, |
+ render_pass_background_filters, &overlay_list, &ca_layer_list, nullptr, |
&damage_rect_, &content_bounds_); |
EXPECT_EQ(gfx::Rect(), damage_rect); |
EXPECT_EQ(0U, overlay_list.size()); |
@@ -1557,7 +1591,7 @@ TEST_F(CALayerOverlayTest, ThreeDTransform) { |
RenderPassFilterList render_pass_background_filters; |
overlay_processor_->ProcessForOverlays( |
resource_provider_.get(), pass.get(), render_pass_filters, |
- render_pass_background_filters, &overlay_list, &ca_layer_list, |
+ render_pass_background_filters, &overlay_list, &ca_layer_list, nullptr, |
&damage_rect_, &content_bounds_); |
EXPECT_EQ(0U, overlay_list.size()); |
EXPECT_EQ(1U, ca_layer_list.size()); |
@@ -1583,7 +1617,7 @@ TEST_F(CALayerOverlayTest, AllowContainingClip) { |
RenderPassFilterList render_pass_background_filters; |
overlay_processor_->ProcessForOverlays( |
resource_provider_.get(), pass.get(), render_pass_filters, |
- render_pass_background_filters, &overlay_list, &ca_layer_list, |
+ render_pass_background_filters, &overlay_list, &ca_layer_list, nullptr, |
&damage_rect_, &content_bounds_); |
EXPECT_EQ(gfx::Rect(), damage_rect); |
EXPECT_EQ(0U, overlay_list.size()); |
@@ -1606,7 +1640,7 @@ TEST_F(CALayerOverlayTest, NontrivialClip) { |
RenderPassFilterList render_pass_background_filters; |
overlay_processor_->ProcessForOverlays( |
resource_provider_.get(), pass.get(), render_pass_filters, |
- render_pass_background_filters, &overlay_list, &ca_layer_list, |
+ render_pass_background_filters, &overlay_list, &ca_layer_list, nullptr, |
&damage_rect_, &content_bounds_); |
EXPECT_EQ(gfx::Rect(), damage_rect); |
EXPECT_EQ(0U, overlay_list.size()); |
@@ -1631,7 +1665,7 @@ TEST_F(CALayerOverlayTest, SkipTransparent) { |
RenderPassFilterList render_pass_background_filters; |
overlay_processor_->ProcessForOverlays( |
resource_provider_.get(), pass.get(), render_pass_filters, |
- render_pass_background_filters, &overlay_list, &ca_layer_list, |
+ render_pass_background_filters, &overlay_list, &ca_layer_list, nullptr, |
&damage_rect_, &content_bounds_); |
EXPECT_EQ(gfx::Rect(), damage_rect); |
EXPECT_EQ(0U, overlay_list.size()); |
@@ -1639,6 +1673,114 @@ TEST_F(CALayerOverlayTest, SkipTransparent) { |
EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); |
} |
+TEST_F(DCLayerOverlayTest, AllowNonAxisAlignedTransform) { |
+ std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
+ CreateFullscreenCandidateYUVVideoQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get()); |
+ pass->shared_quad_state_list.back() |
+ ->quad_to_target_transform.RotateAboutZAxis(45.f); |
+ |
+ gfx::Rect damage_rect; |
+ DCLayerOverlayList dc_layer_list; |
+ OverlayCandidateList overlay_list; |
+ RenderPassFilterList render_pass_filters; |
+ RenderPassFilterList render_pass_background_filters; |
+ damage_rect_ = gfx::Rect(1, 1, 10, 10); |
+ overlay_processor_->ProcessForOverlays( |
+ resource_provider_.get(), pass.get(), render_pass_filters, |
+ render_pass_background_filters, &overlay_list, nullptr, &dc_layer_list, |
+ &damage_rect_, &content_bounds_); |
+ EXPECT_EQ(gfx::Rect(), damage_rect); |
+ EXPECT_EQ(0U, overlay_list.size()); |
+ EXPECT_EQ(1U, dc_layer_list.size()); |
+ EXPECT_EQ(1, dc_layer_list.back().shared_state->z_order); |
+ EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); |
+ EXPECT_EQ(gfx::Rect(1, 1, 10, 10), damage_rect_); |
+} |
+ |
+TEST_F(DCLayerOverlayTest, Occluded) { |
+ { |
+ std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
+ CreateOpaqueQuadAt(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), pass.get(), |
+ gfx::Rect(0, 2, 100, 100), SK_ColorWHITE); |
+ CreateFullscreenCandidateYUVVideoQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get()); |
+ |
+ gfx::Rect damage_rect; |
+ DCLayerOverlayList dc_layer_list; |
+ OverlayCandidateList overlay_list; |
+ RenderPassFilterList render_pass_filters; |
+ RenderPassFilterList render_pass_background_filters; |
+ damage_rect_ = gfx::Rect(1, 1, 10, 10); |
+ overlay_processor_->ProcessForOverlays( |
+ resource_provider_.get(), pass.get(), render_pass_filters, |
+ render_pass_background_filters, &overlay_list, nullptr, &dc_layer_list, |
+ &damage_rect_, &content_bounds_); |
+ EXPECT_EQ(gfx::Rect(), damage_rect); |
+ EXPECT_EQ(0U, overlay_list.size()); |
+ EXPECT_EQ(1U, dc_layer_list.size()); |
+ EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); |
+ EXPECT_EQ(-1, dc_layer_list.back().shared_state->z_order); |
+ // Entire underlay rect must be redrawn. |
+ EXPECT_EQ(gfx::Rect(0, 0, 256, 256), damage_rect_); |
+ } |
+ { |
+ std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
+ CreateOpaqueQuadAt(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), pass.get(), |
+ gfx::Rect(2, 2, 100, 100), SK_ColorWHITE); |
+ CreateFullscreenCandidateYUVVideoQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get()); |
+ |
+ gfx::Rect damage_rect; |
+ DCLayerOverlayList dc_layer_list; |
+ OverlayCandidateList overlay_list; |
+ RenderPassFilterList render_pass_filters; |
+ RenderPassFilterList render_pass_background_filters; |
+ damage_rect_ = gfx::Rect(1, 1, 10, 10); |
+ overlay_processor_->ProcessForOverlays( |
+ resource_provider_.get(), pass.get(), render_pass_filters, |
+ render_pass_background_filters, &overlay_list, nullptr, &dc_layer_list, |
+ &damage_rect_, &content_bounds_); |
+ EXPECT_EQ(gfx::Rect(), damage_rect); |
+ EXPECT_EQ(0U, overlay_list.size()); |
+ EXPECT_EQ(1U, dc_layer_list.size()); |
+ EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); |
+ EXPECT_EQ(-1, dc_layer_list.back().shared_state->z_order); |
+ // The underlay rectangle is the same, so the damage is contained within |
+ // the combined occluding rects for this and the last frame. |
+ EXPECT_EQ(gfx::Rect(1, 2, 10, 9), damage_rect_); |
+ } |
+} |
+ |
+TEST_F(DCLayerOverlayTest, DamageRect) { |
+ std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
+ CreateFullscreenCandidateYUVVideoQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get()); |
+ |
+ gfx::Rect damage_rect; |
+ DCLayerOverlayList dc_layer_list; |
+ OverlayCandidateList overlay_list; |
+ RenderPassFilterList render_pass_filters; |
+ RenderPassFilterList render_pass_background_filters; |
+ damage_rect_ = gfx::Rect(1, 1, 10, 10); |
+ overlay_processor_->ProcessForOverlays( |
+ resource_provider_.get(), pass.get(), render_pass_filters, |
+ render_pass_background_filters, &overlay_list, nullptr, &dc_layer_list, |
+ &damage_rect_, &content_bounds_); |
+ EXPECT_EQ(gfx::Rect(), damage_rect); |
+ EXPECT_EQ(0U, overlay_list.size()); |
+ EXPECT_EQ(1U, dc_layer_list.size()); |
+ EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); |
+ EXPECT_EQ(1, dc_layer_list.back().shared_state->z_order); |
+ EXPECT_TRUE(damage_rect_.IsEmpty()); |
+} |
+ |
class OverlayInfoRendererGL : public GLRenderer { |
public: |
OverlayInfoRendererGL(const RendererSettings* settings, |
@@ -2177,7 +2319,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_, &content_bounds_); |
+ nullptr, &damage_rect_, &content_bounds_); |
} |
std::unique_ptr<RenderPass> pass_; |
RenderPassDrawQuad* quad_; |