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

Unified Diff: cc/output/overlay_unittest.cc

Issue 2693023002: Use SwapBuffersWithBounds on Chromecast (Closed)
Patch Set: Address danakj comments on PS1 Created 3 years, 10 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 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_;

Powered by Google App Engine
This is Rietveld 408576698