Index: cc/output/overlay_unittest.cc |
diff --git a/cc/output/overlay_unittest.cc b/cc/output/overlay_unittest.cc |
index 8fa35cb3cb31fba226944bade89ef99aad0efd80..46826799c95d6354abfbc93b079029da1f0c5b35 100644 |
--- a/cc/output/overlay_unittest.cc |
+++ b/cc/output/overlay_unittest.cc |
@@ -11,6 +11,7 @@ |
#include "cc/output/overlay_strategy_single_on_top.h" |
#include "cc/quads/checkerboard_draw_quad.h" |
#include "cc/quads/render_pass.h" |
+#include "cc/quads/stream_video_draw_quad.h" |
#include "cc/quads/texture_draw_quad.h" |
#include "cc/resources/resource_provider.h" |
#include "cc/resources/texture_mailbox.h" |
@@ -32,6 +33,16 @@ 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); |
+const gfx::Transform kNormalTransform = |
+ gfx::Transform(0.9f, 0, 0, 0.8f, 0.1f, 0.2f); // x,y -> x,y. |
+const gfx::Transform kXMirrorTransform = |
+ gfx::Transform(-0.9f, 0, 0, 0.8f, 1.0f, 0.2f); // x,y -> 1-x,y. |
+const gfx::Transform kYMirrorTransform = |
+ gfx::Transform(0.9f, 0, 0, -0.8f, 0.1f, 1.0f); // x,y -> x,1-y. |
+const gfx::Transform kBothMirrorTransform = |
+ gfx::Transform(-0.9f, 0, 0, -0.8f, 1.0f, 1.0f); // x,y -> 1-x,1-y. |
+const gfx::Transform kSwapTransform = |
+ gfx::Transform(0, 1, 1, 0, 0, 0); // x,y -> y,x. |
void MailboxReleased(unsigned sync_point, |
bool lost_resource, |
@@ -173,6 +184,22 @@ TextureDrawQuad* CreateCandidateQuadAt(ResourceProvider* resource_provider, |
return overlay_quad; |
} |
+StreamVideoDrawQuad* CreateCandidateVideoQuadAt( |
+ ResourceProvider* resource_provider, |
+ const SharedQuadState* shared_quad_state, |
+ RenderPass* render_pass, |
+ const gfx::Rect& rect, |
+ const gfx::Transform& transform) { |
+ ResourceProvider::ResourceId resource_id = CreateResource(resource_provider); |
+ |
+ StreamVideoDrawQuad* overlay_quad = |
+ render_pass->CreateAndAppendDrawQuad<StreamVideoDrawQuad>(); |
+ overlay_quad->SetNew(shared_quad_state, rect, rect, rect, resource_id, |
+ transform); |
+ |
+ return overlay_quad; |
+} |
+ |
TextureDrawQuad* CreateFullscreenCandidateQuad( |
ResourceProvider* resource_provider, |
const SharedQuadState* shared_quad_state, |
@@ -181,6 +208,15 @@ TextureDrawQuad* CreateFullscreenCandidateQuad( |
resource_provider, shared_quad_state, render_pass, kOverlayRect); |
} |
+StreamVideoDrawQuad* CreateFullscreenCandidateVideoQuad( |
+ ResourceProvider* resource_provider, |
+ const SharedQuadState* shared_quad_state, |
+ RenderPass* render_pass, |
+ const gfx::Transform& transform) { |
+ return CreateCandidateVideoQuadAt(resource_provider, shared_quad_state, |
+ render_pass, kOverlayRect, transform); |
+} |
+ |
void CreateCheckeredQuadAt(ResourceProvider* resource_provider, |
const SharedQuadState* shared_quad_state, |
RenderPass* render_pass, |
@@ -484,13 +520,13 @@ TEST_F(SingleOverlayOnTopTest, RejectOpacity) { |
EXPECT_EQ(0U, candidate_list.size()); |
} |
-TEST_F(SingleOverlayOnTopTest, RejectTransform) { |
+TEST_F(SingleOverlayOnTopTest, RejectNonScaleTransform) { |
scoped_ptr<RenderPass> pass = CreateRenderPass(); |
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); |
+ pass->shared_quad_state_list.back() |
+ ->content_to_target_transform.RotateAboutXAxis(45.f); |
RenderPassList pass_list; |
pass_list.push_back(pass.Pass()); |
@@ -500,6 +536,39 @@ TEST_F(SingleOverlayOnTopTest, RejectTransform) { |
EXPECT_EQ(0U, candidate_list.size()); |
} |
+TEST_F(SingleOverlayOnTopTest, RejectNegativeScaleTransform) { |
+ scoped_ptr<RenderPass> pass = CreateRenderPass(); |
+ CreateFullscreenCandidateQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get()); |
+ pass->shared_quad_state_list.back()->content_to_target_transform.Scale(2.0f, |
+ -1.0f); |
+ |
+ RenderPassList pass_list; |
+ pass_list.push_back(pass.Pass()); |
+ OverlayCandidateList candidate_list; |
+ overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
+ ASSERT_EQ(1U, pass_list.size()); |
+ EXPECT_EQ(0U, candidate_list.size()); |
+} |
+ |
+TEST_F(SingleOverlayOnTopTest, AllowPositiveScaleTransform) { |
+ gfx::Rect rect = kOverlayRect; |
+ rect.set_width(rect.width() / 2); |
+ scoped_ptr<RenderPass> pass = CreateRenderPass(); |
+ CreateCandidateQuadAt(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), pass.get(), rect); |
+ pass->shared_quad_state_list.back()->content_to_target_transform.Scale(2.0f, |
+ 1.0f); |
+ |
+ RenderPassList pass_list; |
+ pass_list.push_back(pass.Pass()); |
+ OverlayCandidateList candidate_list; |
+ overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
+ ASSERT_EQ(1U, pass_list.size()); |
+ EXPECT_EQ(2U, candidate_list.size()); |
+} |
+ |
TEST_F(SingleOverlayOnTopTest, AllowNotTopIfNotOccluded) { |
scoped_ptr<RenderPass> pass = CreateRenderPass(); |
CreateCheckeredQuadAt(resource_provider_.get(), |
@@ -523,6 +592,76 @@ TEST_F(SingleOverlayOnTopTest, AllowNotTopIfNotOccluded) { |
EXPECT_EQ(2U, candidate_list.size()); |
} |
+TEST_F(SingleOverlayOnTopTest, RejectVideoSwapTransform) { |
+ scoped_ptr<RenderPass> pass = CreateRenderPass(); |
+ CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get(), kSwapTransform); |
+ |
+ RenderPassList pass_list; |
+ pass_list.push_back(pass.Pass()); |
+ OverlayCandidateList candidate_list; |
+ overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
+ ASSERT_EQ(1U, pass_list.size()); |
+ EXPECT_EQ(0U, candidate_list.size()); |
+} |
+ |
+TEST_F(SingleOverlayOnTopTest, AllowVideoXMirrorTransform) { |
+ scoped_ptr<RenderPass> pass = CreateRenderPass(); |
+ CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get(), kXMirrorTransform); |
+ |
+ RenderPassList pass_list; |
+ pass_list.push_back(pass.Pass()); |
+ OverlayCandidateList candidate_list; |
+ overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
+ ASSERT_EQ(1U, pass_list.size()); |
+ EXPECT_EQ(2U, candidate_list.size()); |
+} |
+ |
+TEST_F(SingleOverlayOnTopTest, AllowVideoBothMirrorTransform) { |
+ scoped_ptr<RenderPass> pass = CreateRenderPass(); |
+ CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get(), kBothMirrorTransform); |
+ |
+ RenderPassList pass_list; |
+ pass_list.push_back(pass.Pass()); |
+ OverlayCandidateList candidate_list; |
+ overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
+ ASSERT_EQ(1U, pass_list.size()); |
+ EXPECT_EQ(2U, candidate_list.size()); |
+} |
+ |
+TEST_F(SingleOverlayOnTopTest, AllowVideoNormalTransform) { |
+ scoped_ptr<RenderPass> pass = CreateRenderPass(); |
+ CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get(), kNormalTransform); |
+ |
+ RenderPassList pass_list; |
+ pass_list.push_back(pass.Pass()); |
+ OverlayCandidateList candidate_list; |
+ overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
+ ASSERT_EQ(1U, pass_list.size()); |
+ EXPECT_EQ(2U, candidate_list.size()); |
+} |
+ |
+TEST_F(SingleOverlayOnTopTest, AllowVideoYMirrorTransform) { |
+ scoped_ptr<RenderPass> pass = CreateRenderPass(); |
+ CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
+ pass->shared_quad_state_list.back(), |
+ pass.get(), kYMirrorTransform); |
+ |
+ RenderPassList pass_list; |
+ pass_list.push_back(pass.Pass()); |
+ OverlayCandidateList candidate_list; |
+ overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list); |
+ ASSERT_EQ(1U, pass_list.size()); |
+ EXPECT_EQ(2U, candidate_list.size()); |
+} |
+ |
class OverlayInfoRendererGL : public GLRenderer { |
public: |
OverlayInfoRendererGL(RendererClient* client, |