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

Unified Diff: cc/output/overlay_unittest.cc

Issue 1135813005: Add detection for rotation and flip overlay transforms (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Move Get*Axis to MathUtil, rename flipped->y_flipped Created 5 years, 7 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
Index: cc/output/overlay_unittest.cc
diff --git a/cc/output/overlay_unittest.cc b/cc/output/overlay_unittest.cc
index 545b5f54eb368d6bd809ed5480ba1252880df188..7d91e998119a0676ce4dce7d8f1e7eb390e13327 100644
--- a/cc/output/overlay_unittest.cc
+++ b/cc/output/overlay_unittest.cc
@@ -31,6 +31,7 @@ namespace cc {
namespace {
const gfx::Rect kOverlayRect(0, 0, 128, 128);
+const gfx::RectF kExpectedDisplayRect(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);
@@ -61,10 +62,14 @@ void SingleOverlayValidator::CheckOverlaySupport(
ASSERT_EQ(2U, surfaces->size());
OverlayCandidate& candidate = surfaces->back();
- if (candidate.display_rect.width() == 64)
+ if (candidate.display_rect.width() == 64) {
EXPECT_EQ(kOverlayBottomRightRect, candidate.display_rect);
- else
- EXPECT_EQ(kOverlayRect, candidate.display_rect);
+ } else {
+ EXPECT_NEAR(kOverlayRect.x(), candidate.display_rect.x(), 0.01f);
+ EXPECT_NEAR(kOverlayRect.y(), candidate.display_rect.y(), 0.01f);
+ EXPECT_NEAR(kOverlayRect.width(), candidate.display_rect.width(), 0.01f);
+ EXPECT_NEAR(kOverlayRect.height(), candidate.display_rect.height(), 0.01f);
+ }
EXPECT_EQ(BoundingRect(kUVTopLeft, kUVBottomRight).ToString(),
candidate.uv_rect.ToString());
candidate.overlay_handled = true;
@@ -540,7 +545,7 @@ TEST_F(SingleOverlayOnTopTest, RejectOpacity) {
EXPECT_EQ(0U, candidate_list.size());
}
-TEST_F(SingleOverlayOnTopTest, RejectNonScaleTransform) {
+TEST_F(SingleOverlayOnTopTest, RejectNonAxisAlignedTransform) {
scoped_ptr<RenderPass> pass = CreateRenderPass();
CreateFullscreenCandidateQuad(resource_provider_.get(),
pass->shared_quad_state_list.back(),
@@ -556,11 +561,13 @@ TEST_F(SingleOverlayOnTopTest, RejectNonScaleTransform) {
EXPECT_EQ(0U, candidate_list.size());
}
-TEST_F(SingleOverlayOnTopTest, RejectNegativeScaleTransform) {
+TEST_F(SingleOverlayOnTopTest, AllowVerticalFlip) {
+ gfx::Rect rect = kOverlayRect;
+ rect.set_width(rect.width() / 2);
danakj 2015/05/12 23:32:15 why the width/2 ?
halliwell 2015/05/13 00:49:50 Following the same pattern as existing tests (you
danakj 2015/05/13 16:29:25 Ah, missed the scale2 down there.
+ rect.Offset(0, -rect.height());
scoped_ptr<RenderPass> pass = CreateRenderPass();
- CreateFullscreenCandidateQuad(resource_provider_.get(),
- pass->shared_quad_state_list.back(),
- pass.get());
+ 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);
@@ -569,7 +576,29 @@ TEST_F(SingleOverlayOnTopTest, RejectNegativeScaleTransform) {
OverlayCandidateList candidate_list;
overlay_processor_->ProcessForOverlays(&pass_list, &candidate_list);
ASSERT_EQ(1U, pass_list.size());
- EXPECT_EQ(0U, candidate_list.size());
+ ASSERT_EQ(2U, candidate_list.size());
+ EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_VERTICAL,
+ candidate_list.back().transform);
+}
+
+TEST_F(SingleOverlayOnTopTest, AllowHorizontalFlip) {
+ gfx::Rect rect = kOverlayRect;
+ rect.set_height(rect.height() / 2);
danakj 2015/05/12 23:32:15 why height/2 ?
halliwell 2015/05/13 00:49:50 Same reason as previous test. In this case, y sca
+ rect.Offset(-rect.width(), 0);
+ 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(-1.0f,
+ 2.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());
+ ASSERT_EQ(2U, candidate_list.size());
+ EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_HORIZONTAL,
+ candidate_list.back().transform);
}
TEST_F(SingleOverlayOnTopTest, AllowPositiveScaleTransform) {
@@ -589,6 +618,60 @@ TEST_F(SingleOverlayOnTopTest, AllowPositiveScaleTransform) {
EXPECT_EQ(2U, candidate_list.size());
}
+TEST_F(SingleOverlayOnTopTest, Allow90DegreeRotation) {
+ gfx::Rect rect = kOverlayRect;
+ rect.Offset(0, -rect.height());
+ 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.RotateAboutZAxis(90.f);
+
+ 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());
+ ASSERT_EQ(2U, candidate_list.size());
+ EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_90, candidate_list.back().transform);
+}
+
+TEST_F(SingleOverlayOnTopTest, Allow180DegreeRotation) {
+ gfx::Rect rect = kOverlayRect;
+ rect.Offset(-rect.width(), -rect.height());
+ 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.RotateAboutZAxis(180.f);
+
+ 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());
+ ASSERT_EQ(2U, candidate_list.size());
+ EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_180, candidate_list.back().transform);
+}
+
+TEST_F(SingleOverlayOnTopTest, Allow270DegreeRotation) {
+ gfx::Rect rect = kOverlayRect;
+ rect.Offset(-rect.width(), 0);
+ 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.RotateAboutZAxis(270.f);
+
+ 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());
+ ASSERT_EQ(2U, candidate_list.size());
+ EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_270, candidate_list.back().transform);
+}
+
TEST_F(SingleOverlayOnTopTest, AllowNotTopIfNotOccluded) {
scoped_ptr<RenderPass> pass = CreateRenderPass();
CreateCheckeredQuadAt(resource_provider_.get(),

Powered by Google App Engine
This is Rietveld 408576698