Commit cb1a0251 authored by Daniele Castagna's avatar Daniele Castagna Committed by Commit Bot

Add enable_blend HardwareDisplayManager test

This CL adds a unit test to make sure that we use the opaque fb
when we schedule an overlay plane with alpha blending disabled.

Bug: 789288, b/74997524
Change-Id: Ib8906e23e439ba936c280e0bf7b1f52d733fb38c
Reviewed-on: https://chromium-review.googlesource.com/973890
Commit-Queue: Daniele Castagna <dcastagna@chromium.org>
Reviewed-by: default avatarDaniel Nicoara <dnicoara@chromium.org>
Cr-Commit-Position: refs/heads/master@{#544975}
parent 1d821a0c
...@@ -25,13 +25,13 @@ class HardwareDisplayPlaneAtomic : public HardwareDisplayPlane { ...@@ -25,13 +25,13 @@ class HardwareDisplayPlaneAtomic : public HardwareDisplayPlane {
HardwareDisplayPlaneAtomic(uint32_t plane_id, uint32_t possible_crtcs); HardwareDisplayPlaneAtomic(uint32_t plane_id, uint32_t possible_crtcs);
~HardwareDisplayPlaneAtomic() override; ~HardwareDisplayPlaneAtomic() override;
bool SetPlaneData(drmModeAtomicReq* property_set, virtual bool SetPlaneData(drmModeAtomicReq* property_set,
uint32_t crtc_id, uint32_t crtc_id,
uint32_t framebuffer, uint32_t framebuffer,
const gfx::Rect& crtc_rect, const gfx::Rect& crtc_rect,
const gfx::Rect& src_rect, const gfx::Rect& src_rect,
const gfx::OverlayTransform transform, const gfx::OverlayTransform transform,
int in_fence_fd); int in_fence_fd);
void set_crtc(CrtcController* crtc) { crtc_ = crtc; } void set_crtc(CrtcController* crtc) { crtc_ = crtc; }
CrtcController* crtc() const { return crtc_; } CrtcController* crtc() const { return crtc_; }
......
...@@ -27,8 +27,6 @@ class HardwareDisplayPlaneManagerAtomic : public HardwareDisplayPlaneManager { ...@@ -27,8 +27,6 @@ class HardwareDisplayPlaneManagerAtomic : public HardwareDisplayPlaneManager {
void RequestPlanesReadyCallback(const OverlayPlaneList& planes, void RequestPlanesReadyCallback(const OverlayPlaneList& planes,
base::OnceClosure callback) override; base::OnceClosure callback) override;
private:
bool SetPlaneData(HardwareDisplayPlaneList* plane_list, bool SetPlaneData(HardwareDisplayPlaneList* plane_list,
HardwareDisplayPlane* hw_plane, HardwareDisplayPlane* hw_plane,
const OverlayPlane& overlay, const OverlayPlane& overlay,
...@@ -36,6 +34,7 @@ class HardwareDisplayPlaneManagerAtomic : public HardwareDisplayPlaneManager { ...@@ -36,6 +34,7 @@ class HardwareDisplayPlaneManagerAtomic : public HardwareDisplayPlaneManager {
const gfx::Rect& src_rect, const gfx::Rect& src_rect,
CrtcController* crtc) override; CrtcController* crtc) override;
private:
std::unique_ptr<HardwareDisplayPlane> CreatePlane( std::unique_ptr<HardwareDisplayPlane> CreatePlane(
uint32_t plane_id, uint32_t plane_id,
uint32_t possible_crtcs) override; uint32_t possible_crtcs) override;
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
#include "ui/ozone/platform/drm/gpu/crtc_controller.h" #include "ui/ozone/platform/drm/gpu/crtc_controller.h"
#include "ui/ozone/platform/drm/gpu/fake_plane_info.h" #include "ui/ozone/platform/drm/gpu/fake_plane_info.h"
#include "ui/ozone/platform/drm/gpu/hardware_display_plane_atomic.h"
#include "ui/ozone/platform/drm/gpu/hardware_display_plane_manager_atomic.h" #include "ui/ozone/platform/drm/gpu/hardware_display_plane_manager_atomic.h"
#include "ui/ozone/platform/drm/gpu/hardware_display_plane_manager_legacy.h" #include "ui/ozone/platform/drm/gpu/hardware_display_plane_manager_legacy.h"
#include "ui/ozone/platform/drm/gpu/mock_drm_device.h" #include "ui/ozone/platform/drm/gpu/mock_drm_device.h"
...@@ -362,4 +363,44 @@ TEST_F(HardwareDisplayPlaneManagerPlanesReadyTest, ...@@ -362,4 +363,44 @@ TEST_F(HardwareDisplayPlaneManagerPlanesReadyTest,
EXPECT_TRUE(callback_called); EXPECT_TRUE(callback_called);
} }
class HardwareDisplayPlaneAtomicMock : public ui::HardwareDisplayPlaneAtomic {
public:
HardwareDisplayPlaneAtomicMock() : ui::HardwareDisplayPlaneAtomic(0, ~0) {}
~HardwareDisplayPlaneAtomicMock() override {}
bool SetPlaneData(drmModeAtomicReq* property_set,
uint32_t crtc_id,
uint32_t framebuffer,
const gfx::Rect& crtc_rect,
const gfx::Rect& src_rect,
const gfx::OverlayTransform transform,
int in_fence_fd) override {
framebuffer_ = framebuffer;
return true;
}
uint32_t framebuffer() const { return framebuffer_; }
private:
uint32_t framebuffer_ = 0;
};
TEST(HardwareDisplayPlaneManagerAtomic, EnableBlend) {
auto plane_manager =
std::make_unique<ui::HardwareDisplayPlaneManagerAtomic>();
ui::HardwareDisplayPlaneList plane_list;
HardwareDisplayPlaneAtomicMock hw_plane;
scoped_refptr<ui::ScanoutBuffer> buffer =
new ui::MockScanoutBuffer(kDefaultBufferSize);
ui::OverlayPlane overlay(buffer, base::kInvalidPlatformFile);
overlay.enable_blend = true;
plane_manager->SetPlaneData(&plane_list, &hw_plane, overlay, 1, gfx::Rect(),
nullptr);
EXPECT_EQ(hw_plane.framebuffer(), buffer->GetFramebufferId());
overlay.enable_blend = false;
plane_manager->SetPlaneData(&plane_list, &hw_plane, overlay, 1, gfx::Rect(),
nullptr);
EXPECT_EQ(hw_plane.framebuffer(), buffer->GetOpaqueFramebufferId());
}
} // namespace } // namespace
...@@ -21,6 +21,7 @@ MockScanoutBuffer::MockScanoutBuffer(const gfx::Size& size, ...@@ -21,6 +21,7 @@ MockScanoutBuffer::MockScanoutBuffer(const gfx::Size& size,
format_(format), format_(format),
modifier_(modifier), modifier_(modifier),
id_(g_current_framebuffer_id++), id_(g_current_framebuffer_id++),
opaque_id_(g_current_framebuffer_id++),
drm_(drm) {} drm_(drm) {}
MockScanoutBuffer::~MockScanoutBuffer() {} MockScanoutBuffer::~MockScanoutBuffer() {}
...@@ -30,7 +31,7 @@ uint32_t MockScanoutBuffer::GetFramebufferId() const { ...@@ -30,7 +31,7 @@ uint32_t MockScanoutBuffer::GetFramebufferId() const {
} }
uint32_t MockScanoutBuffer::GetOpaqueFramebufferId() const { uint32_t MockScanoutBuffer::GetOpaqueFramebufferId() const {
return 2; return opaque_id_;
} }
uint32_t MockScanoutBuffer::GetHandle() const { uint32_t MockScanoutBuffer::GetHandle() const {
......
...@@ -38,6 +38,7 @@ class MockScanoutBuffer : public ScanoutBuffer { ...@@ -38,6 +38,7 @@ class MockScanoutBuffer : public ScanoutBuffer {
uint32_t format_; uint32_t format_;
uint64_t modifier_; uint64_t modifier_;
uint32_t id_; uint32_t id_;
uint32_t opaque_id_;
scoped_refptr<DrmDevice> drm_; scoped_refptr<DrmDevice> drm_;
DISALLOW_COPY_AND_ASSIGN(MockScanoutBuffer); DISALLOW_COPY_AND_ASSIGN(MockScanoutBuffer);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment