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

Unified Diff: ui/ozone/platform/drm/gpu/drm_overlay_validator_unittest.cc

Issue 1426993003: Ozone: Dont hardcode format to YUV when using Overlay Composition. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove obsolete code Created 4 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
Index: ui/ozone/platform/drm/gpu/drm_overlay_validator_unittest.cc
diff --git a/ui/ozone/platform/drm/gpu/drm_overlay_validator_unittest.cc b/ui/ozone/platform/drm/gpu/drm_overlay_validator_unittest.cc
index 59cd6a02bdb3d68cea76154074a9cb85558de305..6ea9885c84118259d6a81e99881d4eb110432347 100644
--- a/ui/ozone/platform/drm/gpu/drm_overlay_validator_unittest.cc
+++ b/ui/ozone/platform/drm/gpu/drm_overlay_validator_unittest.cc
@@ -51,6 +51,11 @@ class DrmOverlayValidatorTest : public testing::Test {
last_swap_buffers_result_ = result;
}
+ bool CopyBuffer(const scoped_refptr<ui::ScanoutBuffer>& source_buffer,
+ scoped_refptr<ui::ScanoutBuffer>& target_buffer) {
+ return true;
+ }
+
protected:
scoped_ptr<base::MessageLoop> message_loop_;
scoped_refptr<ui::MockDrmDevice> drm_;
@@ -62,6 +67,7 @@ class DrmOverlayValidatorTest : public testing::Test {
scoped_ptr<ui::DrmOverlayValidator> overlay_validator_;
std::vector<ui::OverlayCheck_Params> overlay_params_;
ui::OverlayPlaneList plane_list_;
+ ui::OverlayPlane::CopyBufferCallback copy_buffer_handler_;
int on_swap_buffers_count_;
gfx::SwapResult last_swap_buffers_result_;
@@ -75,6 +81,8 @@ class DrmOverlayValidatorTest : public testing::Test {
void DrmOverlayValidatorTest::SetUp() {
on_swap_buffers_count_ = 0;
last_swap_buffers_result_ = gfx::SwapResult::SWAP_FAILED;
+ copy_buffer_handler_ =
+ base::Bind(&DrmOverlayValidatorTest::CopyBuffer, base::Unretained(this));
message_loop_.reset(new base::MessageLoopForUI);
std::vector<uint32_t> crtcs;
@@ -115,9 +123,14 @@ void DrmOverlayValidatorTest::SetUp() {
overlay_candidate.plane_z_order = 1;
overlay_params_.push_back(overlay_candidate);
+ scoped_refptr<ui::DrmDevice> drm =
+ window_->GetController()->GetAllocationDrmDevice();
for (const auto& param : overlay_params_) {
- ui::OverlayPlane plane(nullptr, param.plane_z_order, param.transform,
- param.display_rect, param.crop_rect);
+ scoped_refptr<ui::ScanoutBuffer> scanout_buffer =
+ buffer_generator_->Create(drm, param.format, param.buffer_size);
+ ui::OverlayPlane plane(std::move(scanout_buffer), param.plane_z_order,
+ param.transform, param.display_rect, param.crop_rect,
+ copy_buffer_handler_);
plane_list_.push_back(plane);
}
}
@@ -183,16 +196,19 @@ TEST_F(DrmOverlayValidatorTest, ClearCacheOnReset) {
overlay_validator_->TestPageFlip(overlay_params_, ui::OverlayPlaneList(),
buffer_generator_.get());
- uint32_t optimal_format = overlay_validator_->GetOptimalBufferFormat(
- plane_list_.back(), plane_list_);
- EXPECT_EQ(DRM_FORMAT_UYVY, optimal_format);
+ ui::OverlayPlaneList plane_list =
+ overlay_validator_->ValidatePlanesForPageFlip(plane_list_,
+ buffer_generator_.get());
+ EXPECT_EQ(DRM_FORMAT_UYVY,
+ plane_list.back().buffer->GetFramebufferPixelFormat());
// Check if ClearCache actually clears the cache.
overlay_validator_->ClearCache();
- optimal_format = overlay_validator_->GetOptimalBufferFormat(
- plane_list_.back(), plane_list_);
+ plane_list = overlay_validator_->ValidatePlanesForPageFlip(
+ plane_list_, buffer_generator_.get());
// There should be no entry in cache for this configuration and should return
// default value of DRM_FORMAT_XRGB8888.
- EXPECT_EQ(DRM_FORMAT_XRGB8888, optimal_format);
+ EXPECT_EQ(DRM_FORMAT_XRGB8888,
+ plane_list.back().buffer->GetFramebufferPixelFormat());
}
TEST_F(DrmOverlayValidatorTest, OptimalFormatForOverlayInFullScreen_XRGB) {
@@ -215,9 +231,11 @@ TEST_F(DrmOverlayValidatorTest, OptimalFormatForOverlayInFullScreen_XRGB) {
overlay_validator_->TestPageFlip(overlay_params_, ui::OverlayPlaneList(),
buffer_generator_.get());
- uint32_t optimal_format = overlay_validator_->GetOptimalBufferFormat(
- plane_list_.back(), plane_list_);
- EXPECT_EQ(DRM_FORMAT_XRGB8888, optimal_format);
+ ui::OverlayPlaneList plane_list =
+ overlay_validator_->ValidatePlanesForPageFlip(plane_list_,
+ buffer_generator_.get());
+ EXPECT_EQ(DRM_FORMAT_XRGB8888,
+ plane_list.back().buffer->GetFramebufferPixelFormat());
}
TEST_F(DrmOverlayValidatorTest, OptimalFormatForOverlayInFullScreen_YUV) {
@@ -237,14 +255,17 @@ TEST_F(DrmOverlayValidatorTest, OptimalFormatForOverlayInFullScreen_YUV) {
overlay_validator_->TestPageFlip(overlay_params_, ui::OverlayPlaneList(),
buffer_generator_.get());
- uint32_t optimal_format = overlay_validator_->GetOptimalBufferFormat(
- plane_list_.back(), plane_list_);
+ ui::OverlayPlaneList plane_list =
+ overlay_validator_->ValidatePlanesForPageFlip(plane_list_,
+ buffer_generator_.get());
#if defined(USE_DRM_ATOMIC)
- EXPECT_EQ(DRM_FORMAT_UYVY, optimal_format);
+ EXPECT_EQ(DRM_FORMAT_UYVY,
+ plane_list.back().buffer->GetFramebufferPixelFormat());
#else
// If Atomic support is disabled, ensure we choose DRM_FORMAT_XRGB8888 as the
// optimal format even if other packed formats are supported by Primary.
- EXPECT_EQ(DRM_FORMAT_XRGB8888, optimal_format);
+ EXPECT_EQ(DRM_FORMAT_XRGB8888,
+ plane_list.back().buffer->GetFramebufferPixelFormat());
#endif
}
@@ -274,9 +295,11 @@ TEST_F(DrmOverlayValidatorTest, OverlayPreferredFormat_YUV) {
EXPECT_EQ(5, plane_manager_->plane_count());
- uint32_t optimal_format = overlay_validator_->GetOptimalBufferFormat(
- plane_list_.back(), plane_list_);
- EXPECT_EQ(DRM_FORMAT_UYVY, optimal_format);
+ ui::OverlayPlaneList plane_list =
+ overlay_validator_->ValidatePlanesForPageFlip(plane_list_,
+ buffer_generator_.get());
+ EXPECT_EQ(DRM_FORMAT_UYVY,
+ plane_list.back().buffer->GetFramebufferPixelFormat());
}
TEST_F(DrmOverlayValidatorTest, OverlayPreferredFormat_XRGB) {
@@ -299,10 +322,11 @@ TEST_F(DrmOverlayValidatorTest, OverlayPreferredFormat_XRGB) {
std::vector<ui::OverlayCheck_Params> validated_params =
overlay_validator_->TestPageFlip(overlay_params_, ui::OverlayPlaneList(),
buffer_generator_.get());
- uint32_t optimal_format = overlay_validator_->GetOptimalBufferFormat(
- plane_list_.back(), plane_list_);
-
- EXPECT_EQ(DRM_FORMAT_XRGB8888, optimal_format);
+ ui::OverlayPlaneList plane_list =
+ overlay_validator_->ValidatePlanesForPageFlip(plane_list_,
+ buffer_generator_.get());
+ EXPECT_EQ(DRM_FORMAT_XRGB8888,
+ plane_list.back().buffer->GetFramebufferPixelFormat());
EXPECT_EQ(3, plane_manager_->plane_count());
for (const auto& param : validated_params)
EXPECT_EQ(true, param.is_overlay_candidate);
@@ -375,9 +399,11 @@ TEST_F(DrmOverlayValidatorTest,
// Both controllers have Overlay which support DRM_FORMAT_UYVY, hence this
// should be picked as the optimal format.
- uint32_t optimal_format = overlay_validator_->GetOptimalBufferFormat(
- plane_list_.back(), plane_list_);
- EXPECT_EQ(DRM_FORMAT_UYVY, optimal_format);
+ ui::OverlayPlaneList plane_list =
+ overlay_validator_->ValidatePlanesForPageFlip(plane_list_,
+ buffer_generator_.get());
+ EXPECT_EQ(DRM_FORMAT_UYVY,
+ plane_list.back().buffer->GetFramebufferPixelFormat());
// This configuration should not be promoted to Overlay when either of the
// controllers dont support UYVY format.
@@ -443,9 +469,11 @@ TEST_F(DrmOverlayValidatorTest, OptimalFormatYUV_MirroredControllers) {
EXPECT_EQ(true, validated_params.back().is_overlay_candidate);
// Both controllers have Overlay which support DRM_FORMAT_UYVY, hence this
// should be picked as the optimal format.
- uint32_t optimal_format = overlay_validator_->GetOptimalBufferFormat(
- plane_list_.back(), plane_list_);
- EXPECT_EQ(DRM_FORMAT_UYVY, optimal_format);
+ ui::OverlayPlaneList plane_list =
+ overlay_validator_->ValidatePlanesForPageFlip(plane_list_,
+ buffer_generator_.get());
+ EXPECT_EQ(DRM_FORMAT_UYVY,
+ plane_list.back().buffer->GetFramebufferPixelFormat());
// DRM_FORMAT_XRGB8888 should be the preferred format when either of the
// controllers dont support UYVY format.
@@ -459,9 +487,10 @@ TEST_F(DrmOverlayValidatorTest, OptimalFormatYUV_MirroredControllers) {
overlay_params_, ui::OverlayPlaneList(), buffer_generator_.get());
EXPECT_EQ(true, validated_params.back().is_overlay_candidate);
- optimal_format = overlay_validator_->GetOptimalBufferFormat(
- plane_list_.back(), plane_list_);
- EXPECT_EQ(DRM_FORMAT_XRGB8888, optimal_format);
+ plane_list = overlay_validator_->ValidatePlanesForPageFlip(
+ plane_list_, buffer_generator_.get());
+ EXPECT_EQ(DRM_FORMAT_XRGB8888,
+ plane_list.back().buffer->GetFramebufferPixelFormat());
// Check case where we dont have support for packed formats in primary
// display.
@@ -474,8 +503,41 @@ TEST_F(DrmOverlayValidatorTest, OptimalFormatYUV_MirroredControllers) {
overlay_params_, ui::OverlayPlaneList(), buffer_generator_.get());
EXPECT_EQ(true, validated_params.back().is_overlay_candidate);
- optimal_format = overlay_validator_->GetOptimalBufferFormat(
- plane_list_.back(), plane_list_);
- EXPECT_EQ(DRM_FORMAT_XRGB8888, optimal_format);
+ plane_list = overlay_validator_->ValidatePlanesForPageFlip(
+ plane_list_, buffer_generator_.get());
+ EXPECT_EQ(DRM_FORMAT_XRGB8888,
+ plane_list.back().buffer->GetFramebufferPixelFormat());
controller->RemoveCrtc(drm_, kSecondaryCrtc);
}
+
+TEST_F(DrmOverlayValidatorTest, OptimizeOnlyIfProcessingCallbackPresent) {
+ // This test checks that we dont manipulate overlay buffers in case Processing
+ // callback is not present.
+ overlay_params_.back().buffer_size = overlay_rect_.size();
+ overlay_params_.back().display_rect = overlay_rect_;
+ plane_list_.back().display_bounds = overlay_rect_;
+ std::vector<uint32_t> xrgb_yuv_packed_formats = {DRM_FORMAT_XRGB8888,
+ DRM_FORMAT_UYVY};
+
+ ui::FakePlaneInfo primary_plane_info(
+ 100, 1 << 0, std::vector<uint32_t>(1, DRM_FORMAT_XRGB8888));
+ ui::FakePlaneInfo overlay_info(101, 1 << 0, xrgb_yuv_packed_formats);
+ std::vector<ui::FakePlaneInfo> planes_info{primary_plane_info, overlay_info};
+ plane_manager_->SetPlaneProperties(planes_info);
+ overlay_validator_->ClearCache();
+
+ overlay_validator_->TestPageFlip(overlay_params_, ui::OverlayPlaneList(),
+ buffer_generator_.get());
+
+ ui::OverlayPlaneList plane_list =
+ overlay_validator_->ValidatePlanesForPageFlip(plane_list_,
+ buffer_generator_.get());
+ EXPECT_EQ(DRM_FORMAT_UYVY,
+ plane_list.back().buffer->GetFramebufferPixelFormat());
+ plane_list_.back().processing_callback.Reset();
+ plane_list = overlay_validator_->ValidatePlanesForPageFlip(
+ plane_list_, buffer_generator_.get());
+ EXPECT_EQ(plane_list_.back().buffer->GetFramebufferPixelFormat(),
+ plane_list.back().buffer->GetFramebufferPixelFormat());
+ plane_list_.back().processing_callback = copy_buffer_handler_;
+}

Powered by Google App Engine
This is Rietveld 408576698