Index: cc/output/overlay_unittest.cc |
diff --git a/cc/output/overlay_unittest.cc b/cc/output/overlay_unittest.cc |
index 8fa35cb3cb31fba226944bade89ef99aad0efd80..3670bd0140bfaaf4c6d691f89a0e1eb675b0f4d5 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, 0.1f, 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, |
@@ -489,8 +525,8 @@ TEST_F(SingleOverlayOnTopTest, RejectTransform) { |
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, |
danakj
2015/01/21 23:30:33
Seems like there's some new corner cases here, sho
achaulk
2015/01/23 20:10:55
Done.
|
- 2.f); |
+ pass->shared_quad_state_list.back() |
+ ->content_to_target_transform.RotateAboutXAxis(45.f); |
RenderPassList pass_list; |
pass_list.push_back(pass.Pass()); |
@@ -523,6 +559,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, RejectVideoXMirrorTransform) { |
+ 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(0U, candidate_list.size()); |
+} |
+ |
+TEST_F(SingleOverlayOnTopTest, AllowBothMirrorTransform) { |
+ 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, |