Index: cc/output/overlay_unittest.cc |
diff --git a/cc/output/overlay_unittest.cc b/cc/output/overlay_unittest.cc |
index 01e7cc2f350de1ed518b86ff12eb616372b6b359..f042c27af4179e490d9bb83bfa872ad96c4d429e 100644 |
--- a/cc/output/overlay_unittest.cc |
+++ b/cc/output/overlay_unittest.cc |
@@ -28,6 +28,8 @@ namespace cc { |
namespace { |
const gfx::Rect kOverlayRect(0, 0, 128, 128); |
+const gfx::Rect kOverlayTopLeftRect(0, 0, 64, 64); |
+const gfx::Rect kOverlayBottomRightRect(64, 64, 64, 64); |
const gfx::PointF kUVTopLeft(0.1f, 0.2f); |
const gfx::PointF kUVBottomRight(1.0f, 1.0f); |
@@ -43,7 +45,10 @@ void SingleOverlayValidator::CheckOverlaySupport( |
ASSERT_EQ(2U, surfaces->size()); |
OverlayCandidate& candidate = surfaces->back(); |
- EXPECT_EQ(kOverlayRect.ToString(), candidate.display_rect.ToString()); |
+ if (candidate.display_rect.width() == 64) |
+ EXPECT_EQ(kOverlayBottomRightRect, candidate.display_rect); |
+ else |
+ EXPECT_EQ(kOverlayRect, candidate.display_rect); |
EXPECT_EQ(BoundingRect(kUVTopLeft, kUVBottomRight).ToString(), |
candidate.uv_rect.ToString()); |
candidate.overlay_handled = true; |
@@ -129,9 +134,10 @@ ResourceProvider::ResourceId CreateResource( |
mailbox, release_callback.Pass()); |
} |
-TextureDrawQuad* CreateCandidateQuad(ResourceProvider* resource_provider, |
- const SharedQuadState* shared_quad_state, |
- RenderPass* render_pass) { |
+TextureDrawQuad* CreateCandidateQuadAt(ResourceProvider* resource_provider, |
+ const SharedQuadState* shared_quad_state, |
+ RenderPass* render_pass, |
+ const gfx::Rect& rect) { |
ResourceProvider::ResourceId resource_id = CreateResource(resource_provider); |
bool premultiplied_alpha = false; |
bool flipped = false; |
@@ -140,9 +146,9 @@ TextureDrawQuad* CreateCandidateQuad(ResourceProvider* resource_provider, |
TextureDrawQuad* overlay_quad = |
render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); |
overlay_quad->SetNew(shared_quad_state, |
- kOverlayRect, |
- kOverlayRect, |
- kOverlayRect, |
+ rect, |
+ rect, |
+ rect, |
resource_id, |
premultiplied_alpha, |
kUVTopLeft, |
@@ -154,13 +160,28 @@ TextureDrawQuad* CreateCandidateQuad(ResourceProvider* resource_provider, |
return overlay_quad; |
} |
-void CreateCheckeredQuad(ResourceProvider* resource_provider, |
- const SharedQuadState* shared_quad_state, |
- RenderPass* render_pass) { |
+TextureDrawQuad* CreateFullscreenCandidateQuad( |
+ ResourceProvider* resource_provider, |
+ const SharedQuadState* shared_quad_state, |
+ RenderPass* render_pass) { |
+ return CreateCandidateQuadAt( |
+ resource_provider, shared_quad_state, render_pass, kOverlayRect); |
+} |
+ |
+void CreateCheckeredQuadAt(ResourceProvider* resource_provider, |
+ const SharedQuadState* shared_quad_state, |
+ RenderPass* render_pass, |
+ const gfx::Rect& rect) { |
CheckerboardDrawQuad* checkerboard_quad = |
render_pass->CreateAndAppendDrawQuad<CheckerboardDrawQuad>(); |
- checkerboard_quad->SetNew( |
- shared_quad_state, kOverlayRect, kOverlayRect, SkColor()); |
+ checkerboard_quad->SetNew(shared_quad_state, rect, rect, SkColor()); |
+} |
+ |
+void CreateFullscreenCheckeredQuad(ResourceProvider* resource_provider, |
+ const SharedQuadState* shared_quad_state, |
+ RenderPass* render_pass) { |
+ CreateCheckeredQuadAt( |
+ resource_provider, shared_quad_state, render_pass, kOverlayRect); |
} |
static void CompareRenderPassLists(const RenderPassList& expected_list, |
@@ -250,18 +271,18 @@ class SingleOverlayOnTopTest : public testing::Test { |
TEST_F(SingleOverlayOnTopTest, SuccessfullOverlay) { |
scoped_ptr<RenderPass> pass = CreateRenderPass(); |
TextureDrawQuad* original_quad = |
- CreateCandidateQuad(resource_provider_.get(), |
- pass->shared_quad_state_list.back(), |
- pass.get()); |
+ CreateFullscreenCandidateQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get()); |
unsigned original_resource_id = original_quad->resource_id; |
// Add something behind it. |
- CreateCheckeredQuad(resource_provider_.get(), |
- pass->shared_quad_state_list.back(), |
- pass.get()); |
- CreateCheckeredQuad(resource_provider_.get(), |
- pass->shared_quad_state_list.back(), |
- pass.get()); |
+ CreateFullscreenCheckeredQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get()); |
+ CreateFullscreenCheckeredQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get()); |
RenderPassList pass_list; |
pass_list.push_back(pass.Pass()); |
@@ -289,12 +310,12 @@ TEST_F(SingleOverlayOnTopTest, SuccessfullOverlay) { |
TEST_F(SingleOverlayOnTopTest, NoCandidates) { |
scoped_ptr<RenderPass> pass = CreateRenderPass(); |
- CreateCheckeredQuad(resource_provider_.get(), |
- pass->shared_quad_state_list.back(), |
- pass.get()); |
- CreateCheckeredQuad(resource_provider_.get(), |
- pass->shared_quad_state_list.back(), |
- pass.get()); |
+ CreateFullscreenCheckeredQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get()); |
+ CreateFullscreenCheckeredQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get()); |
RenderPassList pass_list; |
pass_list.push_back(pass.Pass()); |
@@ -311,16 +332,16 @@ TEST_F(SingleOverlayOnTopTest, NoCandidates) { |
TEST_F(SingleOverlayOnTopTest, OccludedCandidates) { |
scoped_ptr<RenderPass> pass = CreateRenderPass(); |
- CreateCheckeredQuad(resource_provider_.get(), |
- pass->shared_quad_state_list.back(), |
- pass.get()); |
- CreateCheckeredQuad(resource_provider_.get(), |
- pass->shared_quad_state_list.back(), |
- pass.get()); |
+ CreateFullscreenCheckeredQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get()); |
+ CreateFullscreenCheckeredQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get()); |
- CreateCandidateQuad(resource_provider_.get(), |
- pass->shared_quad_state_list.back(), |
- pass.get()); |
+ CreateFullscreenCandidateQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get()); |
RenderPassList pass_list; |
pass_list.push_back(pass.Pass()); |
@@ -341,17 +362,17 @@ TEST_F(SingleOverlayOnTopTest, MultipleRenderPasses) { |
pass_list.push_back(CreateRenderPass()); |
scoped_ptr<RenderPass> pass = CreateRenderPass(); |
- CreateCandidateQuad(resource_provider_.get(), |
- pass->shared_quad_state_list.back(), |
- pass.get()); |
+ CreateFullscreenCandidateQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get()); |
// Add something behind it. |
- CreateCheckeredQuad(resource_provider_.get(), |
- pass->shared_quad_state_list.back(), |
- pass.get()); |
- CreateCheckeredQuad(resource_provider_.get(), |
- pass->shared_quad_state_list.back(), |
- pass.get()); |
+ CreateFullscreenCheckeredQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get()); |
+ CreateFullscreenCheckeredQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get()); |
pass_list.push_back(pass.Pass()); |
@@ -370,9 +391,9 @@ TEST_F(SingleOverlayOnTopTest, MultipleRenderPasses) { |
TEST_F(SingleOverlayOnTopTest, RejectPremultipliedAlpha) { |
scoped_ptr<RenderPass> pass = CreateRenderPass(); |
TextureDrawQuad* quad = |
- CreateCandidateQuad(resource_provider_.get(), |
- pass->shared_quad_state_list.back(), |
- pass.get()); |
+ CreateFullscreenCandidateQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get()); |
quad->premultiplied_alpha = true; |
RenderPassList pass_list; |
@@ -386,9 +407,9 @@ TEST_F(SingleOverlayOnTopTest, RejectPremultipliedAlpha) { |
TEST_F(SingleOverlayOnTopTest, RejectBlending) { |
scoped_ptr<RenderPass> pass = CreateRenderPass(); |
TextureDrawQuad* quad = |
- CreateCandidateQuad(resource_provider_.get(), |
- pass->shared_quad_state_list.back(), |
- pass.get()); |
+ CreateFullscreenCandidateQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get()); |
quad->needs_blending = true; |
RenderPassList pass_list; |
@@ -402,9 +423,9 @@ TEST_F(SingleOverlayOnTopTest, RejectBlending) { |
TEST_F(SingleOverlayOnTopTest, RejectBackgroundColor) { |
scoped_ptr<RenderPass> pass = CreateRenderPass(); |
TextureDrawQuad* quad = |
- CreateCandidateQuad(resource_provider_.get(), |
- pass->shared_quad_state_list.back(), |
- pass.get()); |
+ CreateFullscreenCandidateQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get()); |
quad->background_color = SK_ColorBLACK; |
RenderPassList pass_list; |
@@ -417,9 +438,9 @@ TEST_F(SingleOverlayOnTopTest, RejectBackgroundColor) { |
TEST_F(SingleOverlayOnTopTest, RejectBlendMode) { |
scoped_ptr<RenderPass> pass = CreateRenderPass(); |
- CreateCandidateQuad(resource_provider_.get(), |
- pass->shared_quad_state_list.back(), |
- pass.get()); |
+ CreateFullscreenCandidateQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get()); |
pass->shared_quad_state_list.back()->blend_mode = SkXfermode::kScreen_Mode; |
RenderPassList pass_list; |
@@ -432,9 +453,9 @@ TEST_F(SingleOverlayOnTopTest, RejectBlendMode) { |
TEST_F(SingleOverlayOnTopTest, RejectOpacity) { |
scoped_ptr<RenderPass> pass = CreateRenderPass(); |
- CreateCandidateQuad(resource_provider_.get(), |
- pass->shared_quad_state_list.back(), |
- pass.get()); |
+ CreateFullscreenCandidateQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get()); |
pass->shared_quad_state_list.back()->opacity = 0.5f; |
RenderPassList pass_list; |
@@ -447,9 +468,9 @@ TEST_F(SingleOverlayOnTopTest, RejectOpacity) { |
TEST_F(SingleOverlayOnTopTest, RejectTransform) { |
scoped_ptr<RenderPass> pass = CreateRenderPass(); |
- CreateCandidateQuad(resource_provider_.get(), |
- pass->shared_quad_state_list.back(), |
- pass.get()); |
+ CreateFullscreenCandidateQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get()); |
pass->shared_quad_state_list.back()->content_to_target_transform.Scale(2.f, |
2.f); |
@@ -461,6 +482,29 @@ TEST_F(SingleOverlayOnTopTest, RejectTransform) { |
EXPECT_EQ(0U, candidate_list.size()); |
} |
+TEST_F(SingleOverlayOnTopTest, AllowNotTopIfNotOccluded) { |
+ scoped_ptr<RenderPass> pass = CreateRenderPass(); |
+ CreateCheckeredQuadAt(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get(), |
+ kOverlayTopLeftRect); |
+ CreateCandidateQuadAt(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get(), |
+ kOverlayBottomRightRect); |
+ |
+ RenderPassList pass_list; |
+ pass_list.push_back(pass.Pass()); |
+ |
+ RenderPassList original_pass_list; |
+ RenderPass::CopyAll(pass_list, &original_pass_list); |
+ |
+ OverlayCandidateList candidate_list; |
+ overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
+ EXPECT_EQ(1U, pass_list.size()); |
+ EXPECT_EQ(2U, candidate_list.size()); |
+} |
+ |
class OverlayInfoRendererGL : public GLRenderer { |
public: |
OverlayInfoRendererGL(RendererClient* client, |
@@ -559,16 +603,16 @@ TEST_F(GLRendererWithOverlaysTest, OverlayQuadNotDrawn) { |
scoped_ptr<RenderPass> pass = CreateRenderPass(); |
- CreateCandidateQuad(resource_provider_.get(), |
- pass->shared_quad_state_list.back(), |
- pass.get()); |
+ CreateFullscreenCandidateQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get()); |
- CreateCheckeredQuad(resource_provider_.get(), |
- pass->shared_quad_state_list.back(), |
- pass.get()); |
- CreateCheckeredQuad(resource_provider_.get(), |
- pass->shared_quad_state_list.back(), |
- pass.get()); |
+ CreateFullscreenCheckeredQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get()); |
+ CreateFullscreenCheckeredQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get()); |
RenderPassList pass_list; |
pass_list.push_back(pass.Pass()); |
@@ -598,16 +642,16 @@ TEST_F(GLRendererWithOverlaysTest, OccludedQuadDrawn) { |
scoped_ptr<RenderPass> pass = CreateRenderPass(); |
- CreateCheckeredQuad(resource_provider_.get(), |
- pass->shared_quad_state_list.back(), |
- pass.get()); |
- CreateCheckeredQuad(resource_provider_.get(), |
- pass->shared_quad_state_list.back(), |
- pass.get()); |
+ CreateFullscreenCheckeredQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get()); |
+ CreateFullscreenCheckeredQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get()); |
- CreateCandidateQuad(resource_provider_.get(), |
- pass->shared_quad_state_list.back(), |
- pass.get()); |
+ CreateFullscreenCandidateQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get()); |
RenderPassList pass_list; |
pass_list.push_back(pass.Pass()); |
@@ -631,16 +675,16 @@ TEST_F(GLRendererWithOverlaysTest, NoValidatorNoOverlay) { |
scoped_ptr<RenderPass> pass = CreateRenderPass(); |
- CreateCandidateQuad(resource_provider_.get(), |
- pass->shared_quad_state_list.back(), |
- pass.get()); |
+ CreateFullscreenCandidateQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get()); |
- CreateCheckeredQuad(resource_provider_.get(), |
- pass->shared_quad_state_list.back(), |
- pass.get()); |
- CreateCheckeredQuad(resource_provider_.get(), |
- pass->shared_quad_state_list.back(), |
- pass.get()); |
+ CreateFullscreenCheckeredQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get()); |
+ CreateFullscreenCheckeredQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get()); |
RenderPassList pass_list; |
pass_list.push_back(pass.Pass()); |