Index: cc/output/overlay_unittest.cc |
diff --git a/cc/output/overlay_unittest.cc b/cc/output/overlay_unittest.cc |
index 9090621ea16d491590072bd4655383e009c5025d..18ca5585faf1e76cedae381e21d50aac32fba860 100644 |
--- a/cc/output/overlay_unittest.cc |
+++ b/cc/output/overlay_unittest.cc |
@@ -9,6 +9,7 @@ |
#include "cc/output/overlay_candidate_validator.h" |
#include "cc/output/overlay_processor.h" |
#include "cc/output/overlay_strategy_single_on_top.h" |
+#include "cc/output/overlay_strategy_underlay.h" |
#include "cc/quads/checkerboard_draw_quad.h" |
#include "cc/quads/render_pass.h" |
#include "cc/quads/stream_video_draw_quad.h" |
@@ -68,30 +69,26 @@ void SingleOverlayValidator::CheckOverlaySupport( |
candidate.overlay_handled = true; |
} |
+template <typename OverlayStrategyType> |
class SingleOverlayProcessor : public OverlayProcessor { |
public: |
SingleOverlayProcessor(OutputSurface* surface, |
- ResourceProvider* resource_provider); |
+ ResourceProvider* resource_provider) |
+ : OverlayProcessor(surface, resource_provider) { |
+ EXPECT_EQ(surface, surface_); |
+ EXPECT_EQ(resource_provider, resource_provider_); |
+ } |
+ |
// Virtual to allow testing different strategies. |
- void Initialize() override; |
+ void Initialize() override { |
+ OverlayCandidateValidator* candidates = |
+ surface_->overlay_candidate_validator(); |
+ ASSERT_TRUE(candidates != NULL); |
+ strategies_.push_back(scoped_ptr<Strategy>( |
+ new OverlayStrategyType(candidates, resource_provider_))); |
+ } |
}; |
-SingleOverlayProcessor::SingleOverlayProcessor( |
- OutputSurface* surface, |
- ResourceProvider* resource_provider) |
- : OverlayProcessor(surface, resource_provider) { |
- EXPECT_EQ(surface, surface_); |
- EXPECT_EQ(resource_provider, resource_provider_); |
-} |
- |
-void SingleOverlayProcessor::Initialize() { |
- OverlayCandidateValidator* candidates = |
- surface_->overlay_candidate_validator(); |
- ASSERT_TRUE(candidates != NULL); |
- strategies_.push_back(scoped_ptr<Strategy>( |
- new OverlayStrategySingleOnTop(candidates, resource_provider_))); |
-} |
- |
class DefaultOverlayProcessor : public OverlayProcessor { |
public: |
DefaultOverlayProcessor(OutputSurface* surface, |
@@ -302,7 +299,8 @@ TEST(OverlayTest, OverlaysProcessorHasStrategy) { |
EXPECT_GE(1U, overlay_processor->GetStrategyCount()); |
} |
-class SingleOverlayOnTopTest : public testing::Test { |
+template <typename OverlayStrategyType> |
+class OverlayTest : public testing::Test { |
protected: |
void SetUp() override { |
provider_ = TestContextProvider::Create(); |
@@ -320,7 +318,7 @@ class SingleOverlayOnTopTest : public testing::Test { |
false, |
1); |
- overlay_processor_.reset(new SingleOverlayProcessor( |
+ overlay_processor_.reset(new SingleOverlayProcessor<OverlayStrategyType>( |
output_surface_.get(), resource_provider_.get())); |
overlay_processor_->Initialize(); |
} |
@@ -330,9 +328,12 @@ class SingleOverlayOnTopTest : public testing::Test { |
FakeOutputSurfaceClient client_; |
scoped_ptr<SharedBitmapManager> shared_bitmap_manager_; |
scoped_ptr<ResourceProvider> resource_provider_; |
- scoped_ptr<SingleOverlayProcessor> overlay_processor_; |
+ scoped_ptr<SingleOverlayProcessor<OverlayStrategyType>> overlay_processor_; |
}; |
+typedef OverlayTest<OverlayStrategySingleOnTop> SingleOverlayOnTopTest; |
+typedef OverlayTest<OverlayStrategyUnderlay> UnderlayTest; |
+ |
TEST_F(SingleOverlayOnTopTest, SuccessfullOverlay) { |
scoped_ptr<RenderPass> pass = CreateRenderPass(); |
TextureDrawQuad* original_quad = |
@@ -761,6 +762,52 @@ TEST_F(SingleOverlayOnTopTest, AllowVideoYMirrorTransform) { |
EXPECT_EQ(2U, candidate_list.size()); |
} |
+TEST_F(UnderlayTest, OverlayLayerUnderMainLayer) { |
+ scoped_ptr<RenderPass> pass = CreateRenderPass(); |
+ SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); |
+ shared_state->opacity = 0.5f; |
+ CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), |
+ kOverlayBottomRightRect); |
+ shared_state = pass->CreateAndAppendSharedQuadState(); |
+ shared_state->opacity = 1.f; |
+ CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), |
+ kOverlayBottomRightRect); |
+ |
+ RenderPassList pass_list; |
+ pass_list.push_back(pass.Pass()); |
+ |
+ OverlayCandidateList candidate_list; |
+ overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
+ EXPECT_EQ(1U, pass_list.size()); |
+ ASSERT_EQ(2U, candidate_list.size()); |
+ EXPECT_EQ(0, candidate_list[0].plane_z_order); |
+ EXPECT_EQ(-1, candidate_list[1].plane_z_order); |
+ // The overlay quad should have changed to a SOLID_COLOR quad. |
+ EXPECT_EQ(pass_list[0]->quad_list.back()->material, DrawQuad::SOLID_COLOR); |
danakj
2015/03/18 21:30:14
What if you just removed that quad, you'd still pa
achaulk
2015/03/23 19:16:03
Oh right, didn't notice the other quad was also so
|
+} |
+ |
+TEST_F(UnderlayTest, AllowOnTop) { |
+ scoped_ptr<RenderPass> pass = CreateRenderPass(); |
+ CreateFullscreenCandidateQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get()); |
+ CreateFullscreenCheckeredQuad(resource_provider_.get(), |
danakj
2015/03/18 21:30:14
Can you use a non-opaque quad on top?
achaulk
2015/03/23 19:16:03
Done.
|
+ pass->shared_quad_state_list.back(), |
+ pass.get()); |
+ |
+ RenderPassList pass_list; |
+ pass_list.push_back(pass.Pass()); |
+ |
+ OverlayCandidateList candidate_list; |
+ overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
+ EXPECT_EQ(1U, pass_list.size()); |
+ ASSERT_EQ(2U, candidate_list.size()); |
+ EXPECT_EQ(0, candidate_list[0].plane_z_order); |
+ EXPECT_EQ(-1, candidate_list[1].plane_z_order); |
+ // The overlay quad should have changed to a SOLID_COLOR quad. |
+ EXPECT_EQ(pass_list[0]->quad_list.front()->material, DrawQuad::SOLID_COLOR); |
+} |
+ |
class OverlayInfoRendererGL : public GLRenderer { |
public: |
OverlayInfoRendererGL(RendererClient* client, |