autotests/drm: add test for vrr capability changing without a hotunplug
This commit is contained in:
parent
4453ce7eef
commit
92ceb00b37
3 changed files with 38 additions and 0 deletions
|
@ -7,6 +7,7 @@
|
|||
SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
||||
|
||||
#include <QSignalSpy>
|
||||
#include <QSize>
|
||||
#include <QTest>
|
||||
|
||||
|
@ -70,6 +71,7 @@ private Q_SLOTS:
|
|||
void testConnectorLifetime();
|
||||
void testModeset_data();
|
||||
void testModeset();
|
||||
void testVrrChange();
|
||||
};
|
||||
|
||||
static void verifyCleanup(MockGpu *mockGpu)
|
||||
|
@ -394,5 +396,32 @@ void DrmTest::testModeset()
|
|||
verifyCleanup(mockGpu.get());
|
||||
}
|
||||
|
||||
void DrmTest::testVrrChange()
|
||||
{
|
||||
const auto mockGpu = findPrimaryDevice(5);
|
||||
mockGpu->deviceCaps[MOCKDRM_DEVICE_CAP_ATOMIC] = 1;
|
||||
|
||||
const auto conn = std::make_shared<MockConnector>(mockGpu.get());
|
||||
conn->setVrrCapable(false);
|
||||
mockGpu->connectors.push_back(conn);
|
||||
|
||||
const auto session = Session::create(Session::Type::Noop);
|
||||
const auto backend = std::make_unique<DrmBackend>(session.get());
|
||||
const auto renderBackend = backend->createQPainterBackend();
|
||||
auto gpu = std::make_unique<DrmGpu>(backend.get(), mockGpu->fd, DrmDevice::open(mockGpu->devNode));
|
||||
|
||||
QVERIFY(gpu->updateOutputs());
|
||||
const auto output = gpu->drmOutputs().front();
|
||||
QVERIFY(!(output->capabilities() & Output::Capability::Vrr));
|
||||
|
||||
QSignalSpy capsChanged(output, &Output::capabilitiesChanged);
|
||||
|
||||
conn->setVrrCapable(true);
|
||||
QVERIFY(gpu->updateOutputs());
|
||||
QCOMPARE(gpu->drmOutputs().front(), output);
|
||||
QCOMPARE(capsChanged.count(), 1);
|
||||
QVERIFY(output->capabilities() & Output::Capability::Vrr);
|
||||
}
|
||||
|
||||
QTEST_GUILESS_MAIN(DrmTest)
|
||||
#include "drmTest.moc"
|
||||
|
|
|
@ -212,6 +212,14 @@ void MockConnector::addMode(uint32_t width, uint32_t height, float refreshRate,
|
|||
free(modeInfo);
|
||||
}
|
||||
|
||||
void MockConnector::setVrrCapable(bool cap)
|
||||
{
|
||||
auto &prop = *std::ranges::find_if(props, [](const auto &prop) {
|
||||
return prop.name == "vrr_capable";
|
||||
});
|
||||
prop.value = cap ? 1 : 0;
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
MockCrtc::MockCrtc(MockGpu *gpu, const std::shared_ptr<MockPlane> &legacyPlane, int pipeIndex, int gamma_size)
|
||||
|
|
|
@ -71,6 +71,7 @@ public:
|
|||
~MockConnector() = default;
|
||||
|
||||
void addMode(uint32_t width, uint32_t height, float refreshRate, bool preferred = false);
|
||||
void setVrrCapable(bool cap);
|
||||
|
||||
drmModeConnection connection;
|
||||
uint32_t type;
|
||||
|
|
Loading…
Reference in a new issue