15#include "KWayland/Client/compositor.h"
16#include "KWayland/Client/connection_thread.h"
17#include "KWayland/Client/registry.h"
18#include "KWayland/Client/shm_pool.h"
19#include "KWayland/Client/surface.h"
30 void testCreateBufferNullImage();
31 void testCreateBufferNullSize();
32 void testCreateBufferInvalidSize();
33 void testCreateBufferFromImage();
34 void testCreateBufferFromImageWithAlpha();
35 void testCreateBufferFromData();
36 void testReuseBuffer();
40 KWayland::Client::ConnectionThread *m_connection;
41 KWayland::Client::Compositor *m_compositor;
42 KWayland::Client::ShmPool *m_shmPool;
46static const QString s_socketName = QStringLiteral(
"kwin-test-wayland-surface-0");
51 , m_connection(nullptr)
52 , m_compositor(nullptr)
58void TestShmPool::init()
68 m_connection =
new KWayland::Client::ConnectionThread;
69 QSignalSpy connectedSpy(m_connection, &KWayland::Client::ConnectionThread::connected);
70 m_connection->setSocketName(s_socketName);
72 m_thread =
new QThread(
this);
73 m_connection->moveToThread(m_thread);
76 m_connection->initConnection();
77 QVERIFY(connectedSpy.wait());
79 KWayland::Client::Registry registry;
80 QSignalSpy shmSpy(®istry, &KWayland::Client::Registry::shmAnnounced);
81 registry.create(m_connection->display());
82 QVERIFY(registry.isValid());
88 QVERIFY(shmSpy.wait());
89 m_shmPool = registry.createShmPool(shmSpy.first().first().value<quint32>(), shmSpy.first().last().value<quint32>(),
this);
92void TestShmPool::cleanup()
96 m_compositor =
nullptr;
109 m_connection =
nullptr;
115void TestShmPool::testCreateBufferNullImage()
117 QVERIFY(m_shmPool->isValid());
119 QVERIFY(img.isNull());
120 QVERIFY(!m_shmPool->createBuffer(img));
123void TestShmPool::testCreateBufferNullSize()
125 QVERIFY(m_shmPool->isValid());
127 QVERIFY(size.isNull());
128 QVERIFY(!m_shmPool->createBuffer(size, 0,
nullptr));
131void TestShmPool::testCreateBufferInvalidSize()
133 QVERIFY(m_shmPool->isValid());
135 QVERIFY(!size.isValid());
136 QVERIFY(!m_shmPool->createBuffer(size, 0,
nullptr));
139void TestShmPool::testCreateBufferFromImage()
141 QVERIFY(m_shmPool->isValid());
142 QImage img(24, 24, QImage::Format_RGB32);
144 QVERIFY(!img.isNull());
145 auto buffer = m_shmPool->createBuffer(img).toStrongRef();
147 QCOMPARE(buffer->size(), img.size());
148 QImage img2(buffer->address(), img.width(), img.height(), QImage::Format_RGB32);
152void TestShmPool::testCreateBufferFromImageWithAlpha()
154 QVERIFY(m_shmPool->isValid());
155 QImage img(24, 24, QImage::Format_ARGB32_Premultiplied);
156 img.fill(QColor(255, 0, 0, 100));
157 QVERIFY(!img.isNull());
158 auto buffer = m_shmPool->createBuffer(img).toStrongRef();
160 QCOMPARE(buffer->size(), img.size());
161 QImage img2(buffer->address(), img.width(), img.height(), QImage::Format_ARGB32_Premultiplied);
165void TestShmPool::testCreateBufferFromData()
167 QVERIFY(m_shmPool->isValid());
168 QImage img(24, 24, QImage::Format_ARGB32_Premultiplied);
170 QVERIFY(!img.isNull());
171 auto buffer = m_shmPool->createBuffer(img.size(), img.bytesPerLine(), img.constBits()).toStrongRef();
173 QCOMPARE(buffer->size(), img.size());
174 QImage img2(buffer->address(), img.width(), img.height(), QImage::Format_ARGB32_Premultiplied);
178void TestShmPool::testReuseBuffer()
180 QVERIFY(m_shmPool->isValid());
181 QImage img(24, 24, QImage::Format_ARGB32_Premultiplied);
183 QVERIFY(!img.isNull());
184 auto buffer = m_shmPool->createBuffer(img).toStrongRef();
186 buffer->setReleased(
true);
187 buffer->setUsed(
false);
190 auto buffer2 = m_shmPool->createBuffer(img).toStrongRef();
191 QCOMPARE(buffer, buffer2);
192 buffer2->setReleased(
true);
193 buffer2->setUsed(
false);
196 auto buffer3 = m_shmPool->getBuffer(QSize(10, 10), 8);
197 QVERIFY(buffer3 != buffer2);
200 QImage img2(24, 24, QImage::Format_RGB32);
201 img2.fill(Qt::black);
202 QVERIFY(!img2.isNull());
203 auto buffer4 = m_shmPool->createBuffer(img2).toStrongRef();
205 QVERIFY(buffer4 != buffer2);
206 QVERIFY(buffer4 != buffer3);
210#include "test_shm_pool.moc"
Class holding the Wayland server display loop.
bool addSocketName(const QString &name=QString())
TestShmPool(QObject *parent=nullptr)