blob: 865ad3b44686fa7d573c7a9d66341c0ca35a34bc [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/viz/service/display_embedder/overlay_candidate_validator_surface_control.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gfx/test/gfx_util.h"
namespace viz {
TEST(OverlayCandidateValidatorSurfaceControlTest, NoClipOrNegativeOffset) {
OverlayCandidate candidate;
candidate.display_rect = gfx::RectF(10.f, 10.f);
candidate.uv_rect = gfx::RectF(1.f, 1.f);
candidate.is_clipped = false;
candidate.clip_rect = gfx::Rect(5, 5);
candidate.overlay_handled = false;
OverlayCandidateList candidates;
candidates.push_back(candidate);
OverlayCandidateValidatorSurfaceControl validator;
validator.CheckOverlaySupport(&candidates);
EXPECT_TRUE(candidates.at(0).overlay_handled);
EXPECT_RECTF_EQ(candidates.at(0).display_rect, gfx::RectF(10.f, 10.f));
}
TEST(OverlayCandidateValidatorSurfaceControlTest, Clipped) {
OverlayCandidate candidate;
candidate.display_rect = gfx::RectF(10.f, 10.f);
candidate.uv_rect = gfx::RectF(1.f, 1.f);
candidate.is_clipped = true;
candidate.clip_rect = gfx::Rect(2, 2, 5, 5);
candidate.overlay_handled = false;
OverlayCandidateList candidates;
candidates.push_back(candidate);
OverlayCandidateValidatorSurfaceControl validator;
validator.CheckOverlaySupport(&candidates);
EXPECT_TRUE(candidates.at(0).overlay_handled);
EXPECT_RECTF_EQ(candidates.at(0).display_rect,
gfx::RectF(2.f, 2.f, 5.f, 5.f));
EXPECT_RECTF_EQ(candidates.at(0).uv_rect, gfx::RectF(0.2f, 0.2f, 0.5f, 0.5f));
}
TEST(OverlayCandidateValidatorSurfaceControlTest, NegativeOffset) {
OverlayCandidate candidate;
candidate.display_rect = gfx::RectF(-2.f, -4.f, 10.f, 10.f);
candidate.uv_rect = gfx::RectF(0.5f, 0.5f);
candidate.is_clipped = false;
candidate.clip_rect = gfx::Rect(5, 5);
candidate.overlay_handled = false;
OverlayCandidateList candidates;
candidates.push_back(candidate);
OverlayCandidateValidatorSurfaceControl validator;
validator.CheckOverlaySupport(&candidates);
EXPECT_TRUE(candidates.at(0).overlay_handled);
EXPECT_RECTF_EQ(candidates.at(0).display_rect,
gfx::RectF(0.f, 0.f, 8.f, 6.f));
EXPECT_RECTF_EQ(candidates.at(0).uv_rect, gfx::RectF(0.1f, 0.2f, 0.4f, 0.3f));
}
TEST(OverlayCandidateValidatorSurfaceControlTest, ClipAndNegativeOffset) {
OverlayCandidate candidate;
candidate.display_rect = gfx::RectF(-5.0f, -5.0f, 10.0f, 10.0f);
candidate.uv_rect = gfx::RectF(0.5f, 0.5f, 0.5f, 0.5f);
candidate.is_clipped = true;
candidate.clip_rect = gfx::Rect(5, 5);
candidate.overlay_handled = false;
OverlayCandidateList candidates;
candidates.push_back(candidate);
OverlayCandidateValidatorSurfaceControl validator;
validator.CheckOverlaySupport(&candidates);
EXPECT_TRUE(candidates.at(0).overlay_handled);
EXPECT_RECTF_EQ(candidates.at(0).display_rect,
gfx::RectF(0.f, 0.f, 5.f, 5.f));
EXPECT_RECTF_EQ(candidates.at(0).uv_rect,
gfx::RectF(0.75f, 0.75f, 0.25f, 0.25f));
}
TEST(OverlayCandidateValidatorSurfaceControlTest, DisplayTransformOverlay) {
OverlayCandidate candidate;
candidate.display_rect = gfx::RectF(10, 10, 50, 100);
candidate.use_output_surface_for_resource = false;
candidate.overlay_handled = false;
OverlayCandidateList candidates;
candidates.push_back(candidate);
OverlayCandidateValidatorSurfaceControl validator;
validator.SetViewportSize(gfx::Size(100, 200));
validator.SetDisplayTransform(gfx::OVERLAY_TRANSFORM_ROTATE_90);
// First use a different transform than the display transform, the overlay is
// rejected.
candidates.back().transform = gfx::OVERLAY_TRANSFORM_NONE;
validator.CheckOverlaySupport(&candidates);
EXPECT_FALSE(candidates.back().overlay_handled);
candidates.back().transform = gfx::OVERLAY_TRANSFORM_ROTATE_90;
validator.CheckOverlaySupport(&candidates);
EXPECT_TRUE(candidates.back().overlay_handled);
EXPECT_EQ(candidates.back().transform, gfx::OVERLAY_TRANSFORM_NONE);
EXPECT_RECTF_EQ(candidates.back().display_rect, gfx::RectF(10, 40, 100, 50));
}
TEST(OverlayCandidateValidatorSurfaceControlTest,
DisplayTransformOutputSurfaceOverlay) {
OverlayCandidate candidate;
candidate.display_rect = gfx::RectF(100, 200);
candidate.use_output_surface_for_resource = true;
candidate.overlay_handled = false;
candidate.transform = gfx::OVERLAY_TRANSFORM_NONE;
OverlayCandidateValidatorSurfaceControl validator;
validator.SetViewportSize(gfx::Size(100, 200));
validator.SetDisplayTransform(gfx::OVERLAY_TRANSFORM_ROTATE_90);
validator.AdjustOutputSurfaceOverlay(&candidate);
EXPECT_TRUE(candidate.overlay_handled);
EXPECT_RECTF_EQ(candidate.display_rect, gfx::RectF(200, 100));
EXPECT_EQ(candidate.transform, gfx::OVERLAY_TRANSFORM_ROTATE_90);
}
} // namespace viz