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

Unified Diff: cc/output/overlay_unittest.cc

Issue 2736643004: Add DCLayerOverlayProcessor and supporting DCLayer structures. (Closed)
Patch Set: split CALayerOverlay into DCLayerOverlay Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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_;
« no previous file with comments | « cc/output/overlay_processor.cc ('k') | components/display_compositor/compositor_overlay_candidate_validator_android.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698