Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4298)

Unified Diff: cc/output/overlay_unittest.cc

Issue 855403002: cc: Change the restrictions on overlays for video (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/output/overlay_strategy_single_on_top.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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,
« no previous file with comments | « cc/output/overlay_strategy_single_on_top.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698