Chromium Code Reviews| Index: cc/output/overlay_unittest.cc |
| diff --git a/cc/output/overlay_unittest.cc b/cc/output/overlay_unittest.cc |
| index 8dcd8dd4b0baa0b6f273d9cd2aaff47e8b8517ce..fb82fe69f5a59270f5964fa2c32f6f8a5adb8da7 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) { |
| @@ -370,6 +388,7 @@ class OverlayTest : public testing::Test { |
| typedef OverlayTest<FullscreenOverlayValidator> FullscreenOverlayTest; |
| typedef OverlayTest<SingleOnTopOverlayValidator> SingleOverlayOnTopTest; |
| typedef OverlayTest<UnderlayOverlayValidator> UnderlayTest; |
| +typedef OverlayTest<UnderlayCastOverlayValidator> UnderlayCastTest; |
|
danakj
2017/02/14 17:28:58
using instead of typedef
halliwell
2017/02/15 22:29:04
Done.
|
| typedef OverlayTest<CALayerValidator> CALayerOverlayTest; |
| TEST(OverlayTest, NoOverlaysByDefault) { |
| @@ -1221,6 +1240,119 @@ TEST_F(UnderlayTest, DamageSubtractedWhenQuadsAboveDontOverlap) { |
| EXPECT_TRUE(damage_rect_.IsEmpty()); |
| } |
| +TEST_F(UnderlayCastTest, NoOverlayDamageRect) { |
|
danakj
2017/02/14 17:28:58
These tests are named for damage rects but that se
danakj
2017/02/14 17:32:35
.. but then should they be testing the damage rect
halliwell
2017/02/15 22:29:04
They are mis-named (I copied them over from previo
|
| + 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_); |
| + |
| + std::vector<gfx::Rect> content_bounds; |
| + overlay_processor_->GetContentBounds(&content_bounds); |
| + EXPECT_EQ(0U, content_bounds.size()); |
| +} |
| + |
| +TEST_F(UnderlayCastTest, FullScreenOverlayDamageRect) { |
| + 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_); |
| + |
| + std::vector<gfx::Rect> content_bounds; |
| + overlay_processor_->GetContentBounds(&content_bounds); |
| + EXPECT_EQ(1U, content_bounds.size()); |
| + EXPECT_TRUE(content_bounds[0].IsEmpty()); |
|
danakj
2017/02/14 17:32:35
What is the difference between swapping an empty r
halliwell
2017/02/15 22:29:04
I clarified in the comment on OutputFrame. Empty
|
| +} |
| + |
| +TEST_F(UnderlayCastTest, BlackOutsideOverlayDamageRect) { |
| + 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_); |
| + |
| + std::vector<gfx::Rect> content_bounds; |
| + overlay_processor_->GetContentBounds(&content_bounds); |
| + EXPECT_EQ(1U, content_bounds.size()); |
| + EXPECT_TRUE(content_bounds[0].IsEmpty()); |
| +} |
| + |
| +TEST_F(UnderlayCastTest, OverlayOccludedDamageRect) { |
| + 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_); |
| + |
| + std::vector<gfx::Rect> content_bounds; |
| + overlay_processor_->GetContentBounds(&content_bounds); |
| + EXPECT_EQ(1U, content_bounds.size()); |
| + EXPECT_EQ(kOverlayTopLeftRect, content_bounds[0]); |
| +} |
| + |
| +TEST_F(UnderlayCastTest, OverlayOccludedUnionDamageRect) { |
| + 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_); |
| + |
| + std::vector<gfx::Rect> content_bounds; |
| + overlay_processor_->GetContentBounds(&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; |