GCC Code Coverage Report


Directory: ./
File: autotests/client/surface.cpp
Date: 2024-01-22 17:25:27
Exec Total Coverage
Lines: 791 791 100.0%
Branches: 1637 3366 48.6%

Line Branch Exec Source
1 /********************************************************************
2 Copyright 2014 Martin Gräßlin <mgraesslin@kde.org>
3
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) version 3, or any
8 later version accepted by the membership of KDE e.V. (or its
9 successor approved by the membership of KDE e.V.), which shall
10 act as a proxy defined in Section 6 of version 3 of the license.
11
12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Lesser General Public License for more details.
16
17 You should have received a copy of the GNU Lesser General Public
18 License along with this library. If not, see <http://www.gnu.org/licenses/>.
19 *********************************************************************/
20 #include <QImage>
21 #include <QPainter>
22 #include <QtTest>
23
24 #include "../../src/client/compositor.h"
25 #include "../../src/client/connection_thread.h"
26 #include "../../src/client/event_queue.h"
27 #include "../../src/client/idleinhibit.h"
28 #include "../../src/client/output.h"
29 #include "../../src/client/region.h"
30 #include "../../src/client/registry.h"
31 #include "../../src/client/shm_pool.h"
32 #include "../../src/client/surface.h"
33
34 #include "../../server/buffer.h"
35 #include "../../server/client.h"
36 #include "../../server/compositor.h"
37 #include "../../server/display.h"
38 #include "../../server/idle_inhibit_v1.h"
39 #include "../../server/surface.h"
40
41 #include "../../tests/globals.h"
42 #include "../../tests/helpers.h"
43
44 #include <wayland-client-protocol.h>
45
46 class TestSurface : public QObject
47 {
48 Q_OBJECT
49 public:
50 explicit TestSurface(QObject* parent = nullptr);
51 private Q_SLOTS:
52 void init();
53 void cleanup();
54
55 void testStaticAccessor();
56 void testDamage();
57 void testFrameCallback();
58 void testAttachBuffer();
59 void testMultipleSurfaces();
60 void testOpaque();
61 void testInput();
62 void testScale();
63 void testDestroy();
64 void testUnmapOfNotMappedSurface();
65 void testDamageTracking();
66 void testSurfaceAt();
67 void testDestroyAttachedBuffer();
68 void testDestroyWithPendingCallback();
69 void testDisconnect();
70 void testOutput();
71 void testInhibit();
72
73 private:
74 1 struct {
75 std::unique_ptr<Wrapland::Server::Display> display;
76 Wrapland::Server::globals globals;
77 } server;
78
79 Wrapland::Client::ConnectionThread* m_connection;
80 Wrapland::Client::Compositor* m_compositor;
81 Wrapland::Client::ShmPool* m_shm;
82 Wrapland::Client::EventQueue* m_queue;
83 Wrapland::Client::IdleInhibitManager* m_idleInhibitManager;
84 QThread* m_thread;
85 };
86
87 constexpr auto socket_name{"wrapland-test-wayland-surface-0"};
88
89
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 TestSurface::TestSurface(QObject* parent)
90 1 : QObject(parent)
91 1 , m_connection(nullptr)
92 1 , m_compositor(nullptr)
93 1 , m_thread(nullptr)
94 1 {
95 1 }
96
97 17 void TestSurface::init()
98 {
99 17 qRegisterMetaType<Wrapland::Server::Surface*>();
100
101 17 server.display = std::make_unique<Wrapland::Server::Display>();
102
2/4
✓ Branch 0 taken 17 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 17 times.
✗ Branch 3 not taken.
17 server.display->set_socket_name(socket_name);
103 17 server.display->start();
104
1/2
✓ Branch 0 taken 17 times.
✗ Branch 1 not taken.
17 QVERIFY(server.display->running());
105
106 34 server.globals.output_manager
107 34 = std::make_unique<Wrapland::Server::output_manager>(*server.display);
108 17 server.display->createShm();
109 34 server.globals.compositor
110 34 = std::make_unique<Wrapland::Server::Compositor>(server.display.get());
111 34 server.globals.idle_inhibit_manager_v1
112 34 = std::make_unique<Wrapland::Server::IdleInhibitManagerV1>(server.display.get());
113
114 // setup connection
115
1/2
✓ Branch 0 taken 17 times.
✗ Branch 1 not taken.
17 m_connection = new Wrapland::Client::ConnectionThread;
116 17 QSignalSpy connectedSpy(m_connection, &Wrapland::Client::ConnectionThread::establishedChanged);
117
2/4
✓ Branch 0 taken 17 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 17 times.
✗ Branch 3 not taken.
17 m_connection->setSocketName(socket_name);
118
119
2/4
✓ Branch 0 taken 17 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 17 times.
✗ Branch 3 not taken.
17 m_thread = new QThread(this);
120
1/2
✓ Branch 0 taken 17 times.
✗ Branch 1 not taken.
17 m_connection->moveToThread(m_thread);
121
1/2
✓ Branch 0 taken 17 times.
✗ Branch 1 not taken.
17 m_thread->start();
122
123 /*connect(QCoreApplication::eventDispatcher(), &QAbstractEventDispatcher::aboutToBlock,
124 m_connection, [this]() { if (m_connection->display()) {
125 wl_display_flush(m_connection->display());
126 }
127 }
128 );*/
129
130
1/2
✓ Branch 0 taken 17 times.
✗ Branch 1 not taken.
17 m_connection->establishConnection();
131
6/12
✓ Branch 0 taken 17 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 17 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 17 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 17 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 17 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 17 times.
17 QVERIFY(connectedSpy.count() || connectedSpy.wait());
132
2/4
✓ Branch 0 taken 17 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 17 times.
17 QCOMPARE(connectedSpy.count(), 1);
133
134
2/4
✓ Branch 0 taken 17 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 17 times.
✗ Branch 3 not taken.
17 m_queue = new Wrapland::Client::EventQueue(this);
135
3/6
✓ Branch 0 taken 17 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 17 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 17 times.
✗ Branch 5 not taken.
17 QVERIFY(!m_queue->isValid());
136
1/2
✓ Branch 0 taken 17 times.
✗ Branch 1 not taken.
17 m_queue->setup(m_connection);
137
3/6
✓ Branch 0 taken 17 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 17 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 17 times.
✗ Branch 5 not taken.
17 QVERIFY(m_queue->isValid());
138
139
1/2
✓ Branch 0 taken 17 times.
✗ Branch 1 not taken.
17 Wrapland::Client::Registry registry;
140
1/2
✓ Branch 0 taken 17 times.
✗ Branch 1 not taken.
17 registry.setEventQueue(m_queue);
141
2/4
✓ Branch 0 taken 17 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 17 times.
✗ Branch 3 not taken.
17 QSignalSpy compositorSpy(&registry, SIGNAL(compositorAnnounced(quint32, quint32)));
142
2/4
✓ Branch 0 taken 17 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 17 times.
✗ Branch 3 not taken.
17 QSignalSpy shmSpy(&registry, SIGNAL(shmAnnounced(quint32, quint32)));
143
2/4
✓ Branch 0 taken 17 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 17 times.
✗ Branch 3 not taken.
17 QSignalSpy allAnnounced(&registry, SIGNAL(interfacesAnnounced()));
144
3/6
✓ Branch 0 taken 17 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 17 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 17 times.
✗ Branch 5 not taken.
17 QVERIFY(allAnnounced.isValid());
145
3/6
✓ Branch 0 taken 17 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 17 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 17 times.
✗ Branch 5 not taken.
17 QVERIFY(shmSpy.isValid());
146
2/4
✓ Branch 0 taken 17 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 17 times.
✗ Branch 3 not taken.
17 registry.create(m_connection->display());
147
3/6
✓ Branch 0 taken 17 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 17 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 17 times.
✗ Branch 5 not taken.
17 QVERIFY(registry.isValid());
148
1/2
✓ Branch 0 taken 17 times.
✗ Branch 1 not taken.
17 registry.setup();
149
5/10
✓ Branch 0 taken 17 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 17 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 17 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 17 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 17 times.
17 QVERIFY(allAnnounced.wait());
150
2/4
✓ Branch 0 taken 17 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 17 times.
✗ Branch 3 not taken.
17 QVERIFY(!compositorSpy.isEmpty());
151
2/4
✓ Branch 0 taken 17 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 17 times.
✗ Branch 3 not taken.
17 QVERIFY(!shmSpy.isEmpty());
152
153
4/8
✓ Branch 0 taken 17 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 17 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 17 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 17 times.
✗ Branch 7 not taken.
34 m_compositor = registry.createCompositor(compositorSpy.first().first().value<quint32>(),
154
3/6
✓ Branch 0 taken 17 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 17 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 17 times.
✗ Branch 5 not taken.
17 compositorSpy.first().last().value<quint32>(),
155 this);
156
3/6
✓ Branch 0 taken 17 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 17 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 17 times.
✗ Branch 5 not taken.
17 QVERIFY(m_compositor->isValid());
157
1/2
✓ Branch 0 taken 17 times.
✗ Branch 1 not taken.
17 m_shm = registry.createShmPool(
158
6/12
✓ Branch 0 taken 17 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 17 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 17 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 17 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 17 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 17 times.
✗ Branch 11 not taken.
17 shmSpy.first().first().value<quint32>(), shmSpy.first().last().value<quint32>(), this);
159
3/6
✓ Branch 0 taken 17 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 17 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 17 times.
✗ Branch 5 not taken.
17 QVERIFY(m_shm->isValid());
160
161
1/2
✓ Branch 0 taken 17 times.
✗ Branch 1 not taken.
17 m_idleInhibitManager = registry.createIdleInhibitManager(
162
1/2
✓ Branch 0 taken 17 times.
✗ Branch 1 not taken.
17 registry.interface(Wrapland::Client::Registry::Interface::IdleInhibitManagerUnstableV1)
163 17 .name,
164
1/2
✓ Branch 0 taken 17 times.
✗ Branch 1 not taken.
17 registry.interface(Wrapland::Client::Registry::Interface::IdleInhibitManagerUnstableV1)
165 17 .version,
166 this);
167
3/6
✓ Branch 0 taken 17 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 17 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 17 times.
✗ Branch 5 not taken.
17 QVERIFY(m_idleInhibitManager->isValid());
168
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 17 times.
17 }
169
170 17 void TestSurface::cleanup()
171 {
172
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 17 times.
17 if (m_compositor) {
173
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 17 times.
17 delete m_compositor;
174 17 m_compositor = nullptr;
175 17 }
176
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 17 times.
17 if (m_idleInhibitManager) {
177
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 17 times.
17 delete m_idleInhibitManager;
178 17 m_idleInhibitManager = nullptr;
179 17 }
180
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 16 times.
17 if (m_shm) {
181
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 delete m_shm;
182 16 m_shm = nullptr;
183 16 }
184
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 17 times.
17 if (m_queue) {
185
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 17 times.
17 delete m_queue;
186 17 m_queue = nullptr;
187 17 }
188
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 17 times.
17 if (m_thread) {
189 17 m_thread->quit();
190 17 m_thread->wait();
191
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 17 times.
17 delete m_thread;
192 17 m_thread = nullptr;
193 17 }
194
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 16 times.
17 delete m_connection;
195 17 m_connection = nullptr;
196
197
1/2
✓ Branch 0 taken 17 times.
✗ Branch 1 not taken.
17 server = {};
198 17 }
199
200 1 void TestSurface::testStaticAccessor()
201 {
202 // TODO: Does this test still make sense with the remodel? If yes, needs porting.
203 #if 0
204 QSignalSpy serverSurfaceCreated(server.globals.compositor.get(),
205 SIGNAL(surfaceCreated(Wrapland::Server::Surface*)));
206 QVERIFY(serverSurfaceCreated.isValid());
207
208 QVERIFY(!Wrapland::Server::Surface::get(nullptr));
209 QVERIFY(!Wrapland::Server::Surface::get(1, nullptr));
210 QVERIFY(Wrapland::Client::Surface::all().isEmpty());
211 auto s1 = m_compositor->createSurface();
212 QVERIFY(s1->isValid());
213 QCOMPARE(Wrapland::Client::Surface::all().count(), 1);
214 QCOMPARE(Wrapland::Client::Surface::all().first(), s1);
215 QCOMPARE(Wrapland::Client::Surface::get(*s1), s1);
216 QVERIFY(serverSurfaceCreated.wait());
217 auto serverSurface1 = serverSurfaceCreated.first().first().value<Wrapland::Server::Surface*>();
218 QVERIFY(serverSurface1);
219 QCOMPARE(Wrapland::Server::Surface::get(serverSurface1->resource()), serverSurface1);
220 QCOMPARE(Wrapland::Server::Surface::get(serverSurface1->id(), serverSurface1->client()),
221 serverSurface1);
222
223 QVERIFY(!s1->size().isValid());
224 QSignalSpy sizeChangedSpy(s1, SIGNAL(sizeChanged(QSize)));
225 QVERIFY(sizeChangedSpy.isValid());
226 const QSize testSize(200, 300);
227 s1->setSize(testSize);
228 QCOMPARE(s1->size(), testSize);
229 QCOMPARE(sizeChangedSpy.count(), 1);
230 QCOMPARE(sizeChangedSpy.first().first().toSize(), testSize);
231
232 // add another surface
233 auto s2 = m_compositor->createSurface();
234 QVERIFY(s2->isValid());
235 QCOMPARE(Wrapland::Client::Surface::all().count(), 2);
236 QCOMPARE(Wrapland::Client::Surface::all().first(), s1);
237 QCOMPARE(Wrapland::Client::Surface::all().last(), s2);
238 QCOMPARE(Wrapland::Client::Surface::get(*s1), s1);
239 QCOMPARE(Wrapland::Client::Surface::get(*s2), s2);
240 serverSurfaceCreated.clear();
241 QVERIFY(serverSurfaceCreated.wait());
242 auto serverSurface2 = serverSurfaceCreated.first().first().value<Wrapland::Server::Surface*>();
243 QVERIFY(serverSurface2);
244 QCOMPARE(Wrapland::Server::Surface::get(serverSurface1->resource()), serverSurface1);
245 QCOMPARE(Wrapland::Server::Surface::get(serverSurface1->id(), serverSurface1->client()),
246 serverSurface1);
247 QCOMPARE(Wrapland::Server::Surface::get(serverSurface2->resource()), serverSurface2);
248 QCOMPARE(Wrapland::Server::Surface::get(serverSurface2->id(), serverSurface2->client()),
249 serverSurface2);
250
251 // delete s2 again
252 delete s2;
253 QCOMPARE(Wrapland::Client::Surface::all().count(), 1);
254 QCOMPARE(Wrapland::Client::Surface::all().first(), s1);
255 QCOMPARE(Wrapland::Client::Surface::get(*s1), s1);
256
257 // and finally delete the last one
258 delete s1;
259 QVERIFY(Wrapland::Client::Surface::all().isEmpty());
260 QVERIFY(!Wrapland::Client::Surface::get(nullptr));
261 QSignalSpy unboundSpy(serverSurface1, &Wrapland::Server::Resource::unbound);
262 QVERIFY(unboundSpy.isValid());
263 QVERIFY(unboundSpy.wait());
264 QVERIFY(!Wrapland::Server::Surface::get(nullptr));
265 QVERIFY(!Wrapland::Server::Surface::get(1, nullptr));
266 #endif
267 1 }
268
269 1 void TestSurface::testDamage()
270 {
271 2 QSignalSpy serverSurfaceCreated(server.globals.compositor.get(),
272 1 SIGNAL(surfaceCreated(Wrapland::Server::Surface*)));
273
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(serverSurfaceCreated.isValid());
274
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> s{m_compositor->createSurface()};
275
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->setScale(2);
276
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(serverSurfaceCreated.wait());
277
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 auto serverSurface = serverSurfaceCreated.first().first().value<Wrapland::Server::Surface*>();
278
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(serverSurface);
279
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
1 QCOMPARE(serverSurface->state().damage, QRegion());
280
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(!serverSurface->isMapped());
281
282
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QSignalSpy committedSpy(serverSurface, SIGNAL(committed()));
283
284 // send damage without a buffer
285
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->damage(QRect(0, 0, 100, 100));
286
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->commit(Wrapland::Client::Surface::CommitFlag::None);
287
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 wl_display_flush(m_connection->display());
288
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QCoreApplication::processEvents();
289
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QCoreApplication::processEvents();
290
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(!serverSurface->isMapped());
291
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(committedSpy.count(), 1);
292
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
1 QVERIFY(serverSurface->state().damage.isEmpty());
293
294
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QImage img(QSize(10, 10), QImage::Format_ARGB32_Premultiplied);
295
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 img.fill(Qt::black);
296
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 auto b = m_shm->createBuffer(img);
297
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->attachBuffer(b, QPoint(55, 55));
298
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->damage(QRect(0, 0, 10, 10));
299
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->commit(Wrapland::Client::Surface::CommitFlag::None);
300
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(committedSpy.wait());
301
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(serverSurface->state().offset,
302 QPoint(55, 55)); // offset is surface local so scale doesn't change this
303
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
1 QCOMPARE(serverSurface->state().damage, QRegion(0, 0, 5, 5)); // scale is 2
304
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(serverSurface->isMapped());
305
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(committedSpy.count(), 2);
306
307 // damage multiple times
308
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QRegion testRegion(5, 8, 3, 6);
309
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 testRegion = testRegion.united(QRect(10, 11, 6, 1));
310
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 img = QImage(QSize(40, 35), QImage::Format_ARGB32_Premultiplied);
311
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 img.fill(Qt::black);
312
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 b = m_shm->createBuffer(img);
313
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->attachBuffer(b);
314
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->damage(testRegion);
315
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->commit(Wrapland::Client::Surface::CommitFlag::None);
316
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(committedSpy.wait());
317
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QCOMPARE(serverSurface->state().damage, testRegion);
318
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(serverSurface->isMapped());
319
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(committedSpy.count(), 3);
320
321 // damage buffer
322
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 const QRegion testRegion2(30, 40, 22, 4);
323
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 const QRegion cmpRegion2(15, 20, 11, 2); // divided by scale factor
324
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 img = QImage(QSize(80, 70), QImage::Format_ARGB32_Premultiplied);
325
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 img.fill(Qt::black);
326
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 b = m_shm->createBuffer(img);
327
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->attachBuffer(b);
328
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->damageBuffer(testRegion2);
329
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->commit(Wrapland::Client::Surface::CommitFlag::None);
330
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(committedSpy.wait());
331
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QCOMPARE(serverSurface->state().damage, cmpRegion2);
332
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(serverSurface->isMapped());
333
334 // combined regular damage and damaged buffer
335
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 const QRegion testRegion3 = testRegion.united(cmpRegion2);
336
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 img = QImage(QSize(80, 70), QImage::Format_ARGB32_Premultiplied);
337
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 img.fill(Qt::black);
338
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 b = m_shm->createBuffer(img);
339
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->attachBuffer(b);
340
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->damage(testRegion);
341
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->damageBuffer(testRegion2);
342
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->commit(Wrapland::Client::Surface::CommitFlag::None);
343
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(committedSpy.wait());
344
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
1 QVERIFY(serverSurface->state().damage != testRegion);
345
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
1 QVERIFY(serverSurface->state().damage != testRegion2);
346
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
1 QVERIFY(serverSurface->state().damage != cmpRegion2);
347
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QCOMPARE(serverSurface->state().damage, testRegion3);
348
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(serverSurface->isMapped());
349
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
350
351 1 void TestSurface::testFrameCallback()
352 {
353 2 QSignalSpy serverSurfaceCreated(server.globals.compositor.get(),
354 1 SIGNAL(surfaceCreated(Wrapland::Server::Surface*)));
355
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(serverSurfaceCreated.isValid());
356
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> s{m_compositor->createSurface()};
357
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(serverSurfaceCreated.wait());
358
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 auto serverSurface = serverSurfaceCreated.first().first().value<Wrapland::Server::Surface*>();
359
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(serverSurface);
360
361
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy commit_spy(serverSurface, &Wrapland::Server::Surface::committed);
362
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(commit_spy.isValid());
363
364
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QSignalSpy frameRenderedSpy(s.get(), SIGNAL(frameRendered()));
365
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(frameRenderedSpy.isValid());
366
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QImage img(QSize(10, 10), QImage::Format_ARGB32_Premultiplied);
367
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 img.fill(Qt::black);
368
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 auto b = m_shm->createBuffer(img);
369
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->attachBuffer(b);
370
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->damage(QRect(0, 0, 10, 10));
371
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->commit();
372
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(commit_spy.wait());
373
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 serverSurface->frameRendered(10);
374
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(frameRenderedSpy.isEmpty());
375
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(frameRenderedSpy.wait());
376
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(!frameRenderedSpy.isEmpty());
377
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
378
379 1 void TestSurface::testAttachBuffer()
380 {
381 // create the surface
382 2 QSignalSpy serverSurfaceCreated(server.globals.compositor.get(),
383 1 SIGNAL(surfaceCreated(Wrapland::Server::Surface*)));
384
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(serverSurfaceCreated.isValid());
385
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> s{m_compositor->createSurface()};
386
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(serverSurfaceCreated.wait());
387
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 auto serverSurface = serverSurfaceCreated.first().first().value<Wrapland::Server::Surface*>();
388
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QVERIFY(serverSurface);
389
390 // create three images
391
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QImage black(24, 24, QImage::Format_RGB32);
392
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 black.fill(Qt::black);
393
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QImage red(24, 24, QImage::Format_ARGB32); // Note - deliberately not premultiplied
394
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 red.fill(QColor(255, 0, 0, 128));
395
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QImage blue(24, 24, QImage::Format_ARGB32_Premultiplied);
396
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 blue.fill(QColor(0, 0, 255, 128));
397
398
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::shared_ptr<Wrapland::Client::Buffer> blackBufferPtr = m_shm->createBuffer(black).lock();
399
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QVERIFY(blackBufferPtr);
400
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 wl_buffer* blackBuffer = *(blackBufferPtr.get());
401
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::shared_ptr<Wrapland::Client::Buffer> redBuffer = m_shm->createBuffer(red).lock();
402
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(redBuffer);
403
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::shared_ptr<Wrapland::Client::Buffer> blueBuffer = m_shm->createBuffer(blue).lock();
404
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QVERIFY(blueBuffer);
405
406
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(blueBuffer->format(), Wrapland::Client::Buffer::Format::ARGB32);
407
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
1 QCOMPARE(blueBuffer->size(), blue.size());
408
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(!blueBuffer->isReleased());
409
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QVERIFY(!blueBuffer->isUsed());
410
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
1 QCOMPARE(blueBuffer->stride(), blue.bytesPerLine());
411
412
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->attachBuffer(redBuffer);
413
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->attachBuffer(blackBuffer);
414
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->damage(QRect(0, 0, 24, 24));
415
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->commit(Wrapland::Client::Surface::CommitFlag::None);
416
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy commit_spy(serverSurface, &Wrapland::Server::Surface::committed);
417
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(commit_spy.isValid());
418
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(commit_spy.wait());
419
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(serverSurface->isMapped());
420
421 // now the ServerSurface should have the black image attached as a buffer
422
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 auto buffer1 = serverSurface->state().buffer;
423
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QVERIFY(buffer1->shmBuffer());
424
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
1 QCOMPARE(buffer1->shmImage()->createQImage(), black);
425
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
1 QCOMPARE(buffer1->shmImage()->format(), Wrapland::Server::ShmImage::Format::xrgb8888);
426
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QCOMPARE(buffer1->shmImage()->createQImage().format(), QImage::Format_RGB32);
427 1 buffer1.reset();
428
429 // render another frame
430
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->attachBuffer(redBuffer);
431
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->damage(QRect(0, 0, 24, 24));
432
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->commit(Wrapland::Client::Surface::CommitFlag::None);
433
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QVERIFY(!redBuffer->isReleased());
434
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(commit_spy.wait());
435
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QVERIFY(serverSurface->isMapped());
436
437
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 auto buffer2 = serverSurface->state().buffer;
438
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(buffer2->shmBuffer());
439
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QCOMPARE(buffer2->shmImage()->createQImage().format(), QImage::Format_ARGB32_Premultiplied);
440
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QCOMPARE(buffer2->shmImage()->createQImage().width(), 24);
441
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QCOMPARE(buffer2->shmImage()->createQImage().height(), 24);
442
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 24 times.
25 for (int i = 0; i < 24; ++i) {
443
2/2
✓ Branch 0 taken 24 times.
✓ Branch 1 taken 576 times.
600 for (int j = 0; j < 24; ++j) {
444 // it's premultiplied in the format
445
6/12
✓ Branch 0 taken 576 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 576 times.
✓ Branch 4 taken 576 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 576 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 576 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 576 times.
✗ Branch 11 not taken.
576 QCOMPARE(buffer2->shmImage()->createQImage().pixel(i, j), qRgba(128, 0, 0, 128));
446 576 }
447 24 }
448
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QVERIFY(!redBuffer->isReleased());
449 1 buffer2.reset();
450
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(!redBuffer->isReleased());
451
452 // render another frame
453
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 blueBuffer->setUsed(true);
454
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(blueBuffer->isUsed());
455
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->attachBuffer(blueBuffer.get());
456
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->damage(QRect(0, 0, 24, 24));
457
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QSignalSpy frameRenderedSpy(s.get(), SIGNAL(frameRendered()));
458
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QVERIFY(frameRenderedSpy.isValid());
459
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->commit();
460
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(commit_spy.wait());
461
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(serverSurface->isMapped());
462 1 buffer2.reset();
463
464 // TODO: we should have a signal on when the Buffer gets released
465
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QCoreApplication::processEvents(QEventLoop::WaitForMoreEvents);
466
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 if (!redBuffer->isReleased()) {
467
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QCoreApplication::processEvents(QEventLoop::WaitForMoreEvents);
468 1 }
469
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QVERIFY(redBuffer->isReleased());
470
471
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 auto buffer3 = serverSurface->state().buffer.get();
472
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(buffer3->shmBuffer());
473
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QCOMPARE(buffer3->shmImage()->createQImage().format(), QImage::Format_ARGB32_Premultiplied);
474
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QCOMPARE(buffer3->shmImage()->createQImage().width(), 24);
475
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QCOMPARE(buffer3->shmImage()->createQImage().height(), 24);
476
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 24 times.
25 for (int i = 0; i < 24; ++i) {
477
2/2
✓ Branch 0 taken 576 times.
✓ Branch 1 taken 24 times.
600 for (int j = 0; j < 24; ++j) {
478 // it's premultiplied in the format
479
6/12
✓ Branch 0 taken 576 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 576 times.
✓ Branch 4 taken 576 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 576 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 576 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 576 times.
576 QCOMPARE(buffer3->shmImage()->createQImage().pixel(i, j), qRgba(0, 0, 128, 128));
480 576 }
481 24 }
482
483
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 serverSurface->frameRendered(1);
484
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(frameRenderedSpy.wait());
485
486 // commit a different value shouldn't change our buffer
487
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(serverSurface->state().buffer.get(), buffer3);
488
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
1 QVERIFY(serverSurface->state().input.isNull());
489
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 s->setInputRegion(m_compositor->createRegion(QRegion(0, 0, 24, 24)).get());
490
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->commit(Wrapland::Client::Surface::CommitFlag::None);
491
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 wl_display_flush(m_connection->display());
492
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QCoreApplication::processEvents();
493
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QCoreApplication::processEvents();
494
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
1 QCOMPARE(serverSurface->state().input, QRegion(0, 0, 24, 24));
495
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(serverSurface->state().buffer.get(), buffer3);
496
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
1 QVERIFY(serverSurface->state().damage.isEmpty());
497
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(serverSurface->isMapped());
498
499 // clear the surface
500
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->attachBuffer(blackBuffer);
501
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->damage(QRect(0, 0, 1, 1));
502 // TODO: better method
503
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->attachBuffer((wl_buffer*)nullptr);
504
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->damage(QRect(0, 0, 10, 10));
505
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->commit(Wrapland::Client::Surface::CommitFlag::None);
506
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(commit_spy.wait());
507
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
1 QVERIFY(serverSurface->state().damage.isEmpty());
508
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QVERIFY(!serverSurface->isMapped());
509
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
510
511 1 void TestSurface::testMultipleSurfaces()
512 {
513 using namespace Wrapland::Client;
514 using namespace Wrapland::Server;
515 1 Registry registry;
516
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 registry.setEventQueue(m_queue);
517
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QSignalSpy shmSpy(&registry, SIGNAL(shmAnnounced(quint32, quint32)));
518
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 registry.create(m_connection->display());
519
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(registry.isValid());
520
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 registry.setup();
521
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(shmSpy.wait());
522
523
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 ShmPool pool1;
524
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 ShmPool pool2;
525
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
2 pool1.setup(registry.bindShm(shmSpy.first().first().value<quint32>(),
526
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 shmSpy.first().last().value<quint32>()));
527
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
2 pool2.setup(registry.bindShm(shmSpy.first().first().value<quint32>(),
528
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 shmSpy.first().last().value<quint32>()));
529
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(pool1.isValid());
530
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(pool2.isValid());
531
532 // create the surfaces
533
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy serverSurfaceCreated(server.globals.compositor.get(),
534
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 SIGNAL(surfaceCreated(Wrapland::Server::Surface*)));
535
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(serverSurfaceCreated.isValid());
536
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> s1(m_compositor->createSurface());
537
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(serverSurfaceCreated.wait());
538
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 auto serverSurface1 = serverSurfaceCreated.first().first().value<Wrapland::Server::Surface*>();
539
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(serverSurface1);
540 // second surface
541
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> s2(m_compositor->createSurface());
542
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(serverSurfaceCreated.wait());
543
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 auto serverSurface2 = serverSurfaceCreated.last().first().value<Wrapland::Server::Surface*>();
544
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(serverSurface2);
545 // QVERIFY(serverSurface1->resource() != serverSurface2->resource());
546
547 // create two images
548
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QImage black(24, 24, QImage::Format_RGB32);
549
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 black.fill(Qt::black);
550
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QImage red(24, 24, QImage::Format_ARGB32_Premultiplied);
551
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 red.fill(QColor(255, 0, 0, 128));
552
553
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 auto blackBuffer = pool1.createBuffer(black);
554
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 auto redBuffer = pool2.createBuffer(red);
555
556
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s1->attachBuffer(blackBuffer);
557
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s1->damage(QRect(0, 0, 24, 24));
558
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s1->commit(Wrapland::Client::Surface::CommitFlag::None);
559
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy commit_spy1(serverSurface1, &Wrapland::Server::Surface::committed);
560
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(commit_spy1.isValid());
561
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(commit_spy1.wait());
562
563 // now the ServerSurface should have the black image attached as a buffer
564
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 auto buffer1 = serverSurface1->state().buffer;
565
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(buffer1);
566
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QImage buffer1Data = buffer1->shmImage()->createQImage();
567
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QCOMPARE(buffer1Data, black);
568 // accessing the same buffer is OK
569
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QImage buffer1Data2 = buffer1->shmImage()->createQImage();
570
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QCOMPARE(buffer1Data2, buffer1Data);
571 1 buffer1Data = QImage();
572
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(buffer1Data.isNull());
573 1 buffer1Data2 = QImage();
574
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(buffer1Data2.isNull());
575
576 // attach a buffer for the other surface
577
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s2->attachBuffer(redBuffer);
578
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s2->damage(QRect(0, 0, 24, 24));
579
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s2->commit(Wrapland::Client::Surface::CommitFlag::None);
580
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy commit_spy2(serverSurface2, &Wrapland::Server::Surface::committed);
581
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(commit_spy2.isValid());
582
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(commit_spy2.wait());
583
584
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 auto buffer2 = serverSurface2->state().buffer;
585
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(buffer2);
586
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QImage buffer2Data = buffer2->shmImage()->createQImage();
587
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QCOMPARE(buffer2Data, red);
588
589 // while buffer2 is accessed we cannot access buffer1
590
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 auto buffer1ShmImage = buffer1->shmImage();
591
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(!buffer1ShmImage);
592
593 // a deep copy can be kept around
594
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QImage deepCopy = buffer2Data.copy();
595
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QCOMPARE(deepCopy, red);
596 1 buffer2Data = QImage();
597
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(buffer2Data.isNull());
598
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QCOMPARE(deepCopy, red);
599
600 // now that buffer2Data is destroyed we can access buffer1 again
601
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 buffer1ShmImage = buffer1->shmImage();
602
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(buffer1ShmImage);
603
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 buffer1Data = buffer1ShmImage->createQImage();
604
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(!buffer1Data.isNull());
605
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QCOMPARE(buffer1Data, black);
606
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
607
608 1 void TestSurface::testOpaque()
609 {
610 using namespace Wrapland::Client;
611 using namespace Wrapland::Server;
612 2 QSignalSpy serverSurfaceCreated(server.globals.compositor.get(),
613 1 SIGNAL(surfaceCreated(Wrapland::Server::Surface*)));
614
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(serverSurfaceCreated.isValid());
615
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> s{m_compositor->createSurface()};
616
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(serverSurfaceCreated.wait());
617
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 auto serverSurface = serverSurfaceCreated.first().first().value<Wrapland::Server::Surface*>();
618
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(serverSurface);
619
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy commit_spy(serverSurface, &Wrapland::Server::Surface::committed);
620
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(commit_spy.isValid());
621
622 // by default there should be an empty opaque region
623
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
1 QCOMPARE(serverSurface->state().opaque, QRegion());
624
625 // let's install an opaque region
626
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 s->setOpaqueRegion(m_compositor->createRegion(QRegion(0, 10, 20, 30)).get());
627 // the region should only be applied after the surface got committed
628
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 wl_display_flush(m_connection->display());
629
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QCoreApplication::processEvents();
630
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
1 QCOMPARE(serverSurface->state().opaque, QRegion());
631
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(commit_spy.count(), 0);
632
633 // so let's commit to get the new region
634
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->commit(Wrapland::Client::Surface::CommitFlag::None);
635
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(commit_spy.wait());
636
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(commit_spy.count(), 1);
637
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QVERIFY(serverSurface->state().updates & Wrapland::Server::surface_change::opaque);
638
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
1 QCOMPARE(serverSurface->state().opaque, QRegion(0, 10, 20, 30));
639
640 // committing without setting a new region shouldn't change
641
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->commit(Wrapland::Client::Surface::CommitFlag::None);
642
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 wl_display_flush(m_connection->display());
643
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QCoreApplication::processEvents();
644
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(commit_spy.count(), 2);
645
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(serverSurface->state().updates & Wrapland::Server::surface_change::opaque, false);
646
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
1 QCOMPARE(serverSurface->state().opaque, QRegion(0, 10, 20, 30));
647
648 // let's change the opaque region
649
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 s->setOpaqueRegion(m_compositor->createRegion(QRegion(10, 20, 30, 40)).get());
650
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->commit(Wrapland::Client::Surface::CommitFlag::None);
651
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(commit_spy.wait());
652
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(commit_spy.count(), 3);
653
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QVERIFY(serverSurface->state().updates & Wrapland::Server::surface_change::opaque);
654
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
1 QCOMPARE(serverSurface->state().opaque, QRegion(10, 20, 30, 40));
655
656 // and let's go back to an empty region
657
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->setOpaqueRegion();
658
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->commit(Wrapland::Client::Surface::CommitFlag::None);
659
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(commit_spy.wait());
660
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(commit_spy.count(), 4);
661
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QVERIFY(serverSurface->state().updates & Wrapland::Server::surface_change::opaque);
662
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
1 QCOMPARE(serverSurface->state().opaque, QRegion());
663
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
664
665 1 void TestSurface::testInput()
666 {
667 using namespace Wrapland::Client;
668 using namespace Wrapland::Server;
669 2 QSignalSpy serverSurfaceCreated(server.globals.compositor.get(),
670 1 SIGNAL(surfaceCreated(Wrapland::Server::Surface*)));
671
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(serverSurfaceCreated.isValid());
672
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> s{m_compositor->createSurface()};
673
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(serverSurfaceCreated.wait());
674
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 auto serverSurface = serverSurfaceCreated.first().first().value<Wrapland::Server::Surface*>();
675
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(serverSurface);
676
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy commit_spy(serverSurface, &Wrapland::Server::Surface::committed);
677
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(commit_spy.isValid());
678
679 // by default there should be an empty == infinite input region
680
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
1 QCOMPARE(serverSurface->state().input, QRegion());
681
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(serverSurface->state().input_is_infinite, true);
682
683 // let's install an input region
684
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 s->setInputRegion(m_compositor->createRegion(QRegion(0, 10, 20, 30)).get());
685 // the region should only be applied after the surface got committed
686
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 wl_display_flush(m_connection->display());
687
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QCoreApplication::processEvents();
688
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
1 QCOMPARE(serverSurface->state().input, QRegion());
689
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(serverSurface->state().input_is_infinite, true);
690
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(commit_spy.count(), 0);
691
692 // so let's commit to get the new region
693
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->commit(Wrapland::Client::Surface::CommitFlag::None);
694
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(commit_spy.wait());
695
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(commit_spy.count(), 1);
696
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QVERIFY(serverSurface->state().updates & Wrapland::Server::surface_change::input);
697
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
1 QCOMPARE(serverSurface->state().input, QRegion(0, 10, 20, 30));
698
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(serverSurface->state().input_is_infinite, false);
699
700 // committing without setting a new region shouldn't change
701
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->commit(Wrapland::Client::Surface::CommitFlag::None);
702
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 wl_display_flush(m_connection->display());
703
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QCoreApplication::processEvents();
704
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(commit_spy.count(), 2);
705
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(serverSurface->state().updates & Wrapland::Server::surface_change::input, false);
706
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
1 QCOMPARE(serverSurface->state().input, QRegion(0, 10, 20, 30));
707
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(serverSurface->state().input_is_infinite, false);
708
709 // let's change the input region
710
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 s->setInputRegion(m_compositor->createRegion(QRegion(10, 20, 30, 40)).get());
711
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->commit(Wrapland::Client::Surface::CommitFlag::None);
712
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(commit_spy.wait());
713
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(commit_spy.count(), 3);
714
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QVERIFY(serverSurface->state().updates & Wrapland::Server::surface_change::input);
715
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
1 QCOMPARE(serverSurface->state().input, QRegion(10, 20, 30, 40));
716
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(serverSurface->state().input_is_infinite, false);
717
718 // and let's go back to an empty region
719
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->setInputRegion();
720
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->commit(Wrapland::Client::Surface::CommitFlag::None);
721
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(commit_spy.wait());
722
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(commit_spy.count(), 4);
723
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QVERIFY(serverSurface->state().updates & Wrapland::Server::surface_change::input);
724
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
1 QCOMPARE(serverSurface->state().input, QRegion());
725
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(serverSurface->state().input_is_infinite, true);
726
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
727
728 1 void TestSurface::testScale()
729 {
730 // This test verifies that updating the scale factor is correctly passed to the Wayland server.
731
732 // Create surface.
733 1 QSignalSpy serverSurfaceCreated(server.globals.compositor.get(),
734 &Wrapland::Server::Compositor::surfaceCreated);
735
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(serverSurfaceCreated.isValid());
736
737
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> s(m_compositor->createSurface());
738
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QCOMPARE(s->scale(), 1);
739
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(serverSurfaceCreated.wait());
740
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 auto serverSurface = serverSurfaceCreated.first().first().value<Wrapland::Server::Surface*>();
741
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(serverSurface);
742
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QCOMPARE(serverSurface->state().scale, 1);
743
744 // let's change the scale factor
745
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy commit_spy(serverSurface, &Wrapland::Server::Surface::committed);
746
747
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(commit_spy.isValid());
748
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->setScale(2);
749
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QCOMPARE(s->scale(), 2);
750 // needs a commit
751
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(!commit_spy.wait(100));
752
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(serverSurface->state().updates & Wrapland::Server::surface_change::scale, false);
753
754
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->commit(Wrapland::Client::Surface::CommitFlag::None);
755
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(commit_spy.wait());
756
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(commit_spy.count(), 1);
757
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QVERIFY(serverSurface->state().updates & Wrapland::Server::surface_change::scale);
758
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QCOMPARE(serverSurface->state().scale, 2);
759
760 // even though we've changed the scale, if we don't have a buffer we
761 // don't have a size. If we don't have a size it can't have changed
762
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(serverSurface->state().updates & Wrapland::Server::surface_change::size, false);
763
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QVERIFY(!serverSurface->size().isValid());
764
765 // let's try changing to same factor, should not emit changed on server
766
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->setScale(2);
767
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->commit(Wrapland::Client::Surface::CommitFlag::None);
768
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(commit_spy.wait());
769
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QEXPECT_FAIL("", "Scale update set also when factor stays same. Change behavior?", Continue);
770
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(serverSurface->state().updates & Wrapland::Server::surface_change::scale, false);
771
772 // but changing to a different value should still work
773
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->setScale(4);
774
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->commit(Wrapland::Client::Surface::CommitFlag::None);
775
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(commit_spy.wait());
776
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(commit_spy.count(), 3);
777
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QVERIFY(serverSurface->state().updates & Wrapland::Server::surface_change::scale);
778
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QCOMPARE(serverSurface->state().scale, 4);
779
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 commit_spy.clear();
780
781 // attach a buffer of 100x100, our scale is 4, so this should be a size of 25x25
782
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QImage red(100, 100, QImage::Format_ARGB32_Premultiplied);
783
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 red.fill(QColor(255, 0, 0, 128));
784
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::shared_ptr<Wrapland::Client::Buffer> redBuffer = m_shm->createBuffer(red).lock();
785
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(redBuffer);
786
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->attachBuffer(redBuffer.get());
787
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->damage(QRect(0, 0, 25, 25));
788
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->commit(Wrapland::Client::Surface::CommitFlag::None);
789
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(commit_spy.wait());
790
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(commit_spy.count(), 1);
791
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QVERIFY(serverSurface->state().updates & Wrapland::Server::surface_change::size);
792
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(serverSurface->state().updates & Wrapland::Server::surface_change::scale, false);
793
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(serverSurface->size(), QSize(25, 25));
794
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 commit_spy.clear();
795
796 // set the scale to 1, buffer is still 100x100 so size should change to 100x100
797
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->setScale(1);
798
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->commit(Wrapland::Client::Surface::CommitFlag::None);
799
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(commit_spy.wait());
800
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(commit_spy.count(), 1);
801
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QVERIFY(serverSurface->state().updates & Wrapland::Server::surface_change::size);
802
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QVERIFY(serverSurface->state().updates & Wrapland::Server::surface_change::scale);
803
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QCOMPARE(serverSurface->state().scale, 1);
804
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(serverSurface->size(), QSize(100, 100));
805
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 commit_spy.clear();
806
807 // set scale and size in one commit, buffer is 50x50 at scale 2 so size should be 25x25
808
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QImage blue(50, 50, QImage::Format_ARGB32_Premultiplied);
809
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 red.fill(QColor(255, 0, 0, 128));
810
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::shared_ptr<Wrapland::Client::Buffer> blueBuffer = m_shm->createBuffer(blue).lock();
811
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(blueBuffer);
812
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->attachBuffer(blueBuffer.get());
813
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->setScale(2);
814
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->commit(Wrapland::Client::Surface::CommitFlag::None);
815
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(commit_spy.wait());
816
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(commit_spy.count(), 1);
817
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QVERIFY(serverSurface->state().updates & Wrapland::Server::surface_change::size);
818
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QVERIFY(serverSurface->state().updates & Wrapland::Server::surface_change::scale);
819
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QCOMPARE(serverSurface->state().scale, 2);
820
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(serverSurface->size(), QSize(25, 25));
821
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
822
823 1 void TestSurface::testDestroy()
824 {
825 using namespace Wrapland::Client;
826 1 std::unique_ptr<Wrapland::Client::Surface> s{m_compositor->createSurface()};
827
828
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 connect(m_connection, &ConnectionThread::establishedChanged, s.get(), &Surface::release);
829
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 connect(
830 1 m_connection, &ConnectionThread::establishedChanged, m_compositor, &Compositor::release);
831
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 connect(m_connection, &ConnectionThread::establishedChanged, m_shm, &ShmPool::release);
832
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 connect(m_connection, &ConnectionThread::establishedChanged, m_queue, &EventQueue::release);
833
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 connect(m_connection,
834 &ConnectionThread::establishedChanged,
835 1 m_idleInhibitManager,
836 1 &IdleInhibitManager::release);
837
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(s->isValid());
838
839
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server = {};
840
18/74
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 1 times.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 1 times.
✗ Branch 34 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✗ Branch 51 not taken.
✗ Branch 52 not taken.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✗ Branch 63 not taken.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
✗ Branch 66 not taken.
✗ Branch 67 not taken.
✓ Branch 68 taken 1 times.
✗ Branch 69 not taken.
✓ Branch 70 taken 1 times.
✗ Branch 71 not taken.
✓ Branch 72 taken 1 times.
✗ Branch 73 not taken.
1 QTRY_VERIFY(!m_connection->established());
841
842 // Now the Surface should be destroyed.
843
19/74
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 1 times.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 1 times.
✗ Branch 34 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✗ Branch 51 not taken.
✗ Branch 52 not taken.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✗ Branch 63 not taken.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
✗ Branch 66 not taken.
✗ Branch 67 not taken.
✓ Branch 68 taken 1 times.
✗ Branch 69 not taken.
✓ Branch 70 taken 1 times.
✗ Branch 71 not taken.
✓ Branch 72 taken 1 times.
✗ Branch 73 not taken.
1 QTRY_VERIFY(!s->isValid());
844
845 // Calling destroy again should not fail.
846
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->release();
847
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
848
849 1 void TestSurface::testUnmapOfNotMappedSurface()
850 {
851 // this test verifies that a surface which doesn't have a buffer attached doesn't trigger the
852 // unmapped signal
853
854 // create surface
855 1 QSignalSpy serverSurfaceCreated(server.globals.compositor.get(),
856 &Wrapland::Server::Compositor::surfaceCreated);
857
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(serverSurfaceCreated.isValid());
858
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> s(m_compositor->createSurface());
859
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(serverSurfaceCreated.wait());
860
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 auto serverSurface = serverSurfaceCreated.first().first().value<Wrapland::Server::Surface*>();
861
862
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy commit_spy(serverSurface, &Wrapland::Server::Surface::committed);
863
864 // let's map a null buffer and change scale to trigger a signal we can wait for
865
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->attachBuffer(Wrapland::Client::Buffer::Ptr());
866
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->setScale(2);
867
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->commit(Wrapland::Client::Surface::CommitFlag::None);
868
869
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(commit_spy.wait());
870
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QVERIFY(serverSurface->state().updates & Wrapland::Server::surface_change::scale);
871
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(serverSurface->state().updates & Wrapland::Server::surface_change::mapped, false);
872
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
873
874 1 void TestSurface::testDamageTracking()
875 {
876 // this tests the damage tracking feature
877 using namespace Wrapland::Client;
878 using namespace Wrapland::Server;
879 // create surface
880 1 QSignalSpy serverSurfaceCreated(server.globals.compositor.get(),
881 &Wrapland::Server::Compositor::surfaceCreated);
882
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(serverSurfaceCreated.isValid());
883
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> s(m_compositor->createSurface());
884
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(serverSurfaceCreated.wait());
885
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 auto serverSurface = serverSurfaceCreated.first().first().value<Wrapland::Server::Surface*>();
886
887 // before first commit, the tracked damage should be empty
888
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
1 QVERIFY(serverSurface->trackedDamage().isEmpty());
889
890 // Now let's damage the surface
891
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy commit_spy(serverSurface, &Wrapland::Server::Surface::committed);
892
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QImage image(QSize(100, 100), QImage::Format_ARGB32_Premultiplied);
893
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 image.fill(Qt::red);
894
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 s->attachBuffer(m_shm->createBuffer(image));
895
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->damage(QRect(0, 0, 100, 100));
896
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->commit(Wrapland::Client::Surface::CommitFlag::None);
897
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(commit_spy.wait());
898
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
1 QCOMPARE(serverSurface->trackedDamage(), QRegion(0, 0, 100, 100));
899
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
1 QCOMPARE(serverSurface->state().damage, QRegion(0, 0, 100, 100));
900
901 // resetting the tracked damage should empty it
902
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 serverSurface->resetTrackedDamage();
903
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
1 QVERIFY(serverSurface->trackedDamage().isEmpty());
904 // but not affect the actual damage
905
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
1 QCOMPARE(serverSurface->state().damage, QRegion(0, 0, 100, 100));
906
907 // let's damage some parts of the surface
908
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QPainter p;
909
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 p.begin(&image);
910
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 p.fillRect(QRect(0, 0, 10, 10), Qt::blue);
911
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 p.end();
912
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 s->attachBuffer(m_shm->createBuffer(image));
913
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->damage(QRect(0, 0, 10, 10));
914
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->commit(Wrapland::Client::Surface::CommitFlag::None);
915
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(commit_spy.wait());
916
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
1 QCOMPARE(serverSurface->trackedDamage(), QRegion(0, 0, 10, 10));
917
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
1 QCOMPARE(serverSurface->state().damage, QRegion(0, 0, 10, 10));
918
919 // and damage some part completely not bounding to the current damage region
920
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 p.begin(&image);
921
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 p.fillRect(QRect(50, 40, 20, 30), Qt::blue);
922
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 p.end();
923
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 s->attachBuffer(m_shm->createBuffer(image));
924
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->damage(QRect(50, 40, 20, 30));
925
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->commit(Wrapland::Client::Surface::CommitFlag::None);
926
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(commit_spy.wait());
927
6/12
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
1 QCOMPARE(serverSurface->trackedDamage(), QRegion(0, 0, 10, 10).united(QRegion(50, 40, 20, 30)));
928
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(serverSurface->trackedDamage().rectCount(), 2);
929
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
1 QCOMPARE(serverSurface->state().damage, QRegion(50, 40, 20, 30));
930
931 // now let's reset the tracked damage again
932
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 serverSurface->resetTrackedDamage();
933
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
1 QVERIFY(serverSurface->trackedDamage().isEmpty());
934 // but not affect the actual damage
935
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
1 QCOMPARE(serverSurface->state().damage, QRegion(50, 40, 20, 30));
936
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
937
938 1 void TestSurface::testSurfaceAt()
939 {
940 // this test verifies that surfaceAt(const QPointF&) works as expected for the case of no
941 // children
942 using namespace Wrapland::Client;
943 using namespace Wrapland::Server;
944 // create surface
945 1 QSignalSpy serverSurfaceCreated(server.globals.compositor.get(),
946 &Wrapland::Server::Compositor::surfaceCreated);
947
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(serverSurfaceCreated.isValid());
948
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> s(m_compositor->createSurface());
949
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(serverSurfaceCreated.wait());
950
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 auto serverSurface = serverSurfaceCreated.first().first().value<Wrapland::Server::Surface*>();
951
952 // a newly created surface should not be mapped and not provide a surface at a position
953
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(!serverSurface->isMapped());
954
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QVERIFY(!Wrapland::Server::Test::surface_at(serverSurface, QPointF(0, 0)));
955
956 // let's damage this surface
957
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy commit_spy(serverSurface, &Wrapland::Server::Surface::committed);
958
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(commit_spy.isValid());
959
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QImage image(QSize(100, 100), QImage::Format_ARGB32_Premultiplied);
960
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 image.fill(Qt::red);
961
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 s->attachBuffer(m_shm->createBuffer(image));
962
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->damage(QRect(0, 0, 100, 100));
963
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->commit(Wrapland::Client::Surface::CommitFlag::None);
964
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(commit_spy.wait());
965
966 // now the surface is mapped and surfaceAt should give the surface
967
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(serverSurface->isMapped());
968
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(Wrapland::Server::Test::surface_at(serverSurface, QPointF(0, 0)), serverSurface);
969
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(Wrapland::Server::Test::surface_at(serverSurface, QPointF(100, 100)), serverSurface);
970 // outside the geometry it should not give a surface
971
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QVERIFY(!Wrapland::Server::Test::surface_at(serverSurface, QPointF(101, 101)));
972
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QVERIFY(!Wrapland::Server::Test::surface_at(serverSurface, QPointF(-1, -1)));
973
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
974
975 1 void TestSurface::testDestroyAttachedBuffer()
976 {
977 // this test verifies that destroying of a buffer attached to a surface works
978
979 // create surface
980 1 QSignalSpy serverSurfaceCreated(server.globals.compositor.get(),
981 &Wrapland::Server::Compositor::surfaceCreated);
982
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(serverSurfaceCreated.isValid());
983
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> s(m_compositor->createSurface());
984
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(serverSurfaceCreated.wait());
985
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 auto serverSurface = serverSurfaceCreated.first().first().value<Wrapland::Server::Surface*>();
986
987 // let's damage this surface
988
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy commit_spy(serverSurface, &Wrapland::Server::Surface::committed);
989
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(commit_spy.isValid());
990
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QImage image(QSize(100, 100), QImage::Format_ARGB32_Premultiplied);
991
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 image.fill(Qt::red);
992
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 s->attachBuffer(m_shm->createBuffer(image));
993
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->damage(QRect(0, 0, 100, 100));
994
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->commit(Wrapland::Client::Surface::CommitFlag::None);
995
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(commit_spy.wait());
996
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(serverSurface->state().buffer);
997
998 // attach another buffer
999
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 image.fill(Qt::blue);
1000
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 s->attachBuffer(m_shm->createBuffer(image));
1001
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_connection->flush();
1002
1003 // Let's try to destroy it
1004
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 auto currentBuffer = serverSurface->state().buffer;
1005
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy destroySpy(currentBuffer.get(), &Wrapland::Server::Buffer::resourceDestroyed);
1006
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(destroySpy.isValid());
1007
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 delete m_shm;
1008 1 m_shm = nullptr;
1009
6/12
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
1 QVERIFY(destroySpy.count() || destroySpy.wait());
1010
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(!serverSurface->state().buffer);
1011
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
1012
1013 1 void TestSurface::testDestroyWithPendingCallback()
1014 {
1015 // this test tries to verify that destroying a surface with a pending callback works correctly
1016 // first create surface
1017 using namespace Wrapland::Client;
1018 using namespace Wrapland::Server;
1019 1 std::unique_ptr<Wrapland::Client::Surface> s(m_compositor->createSurface());
1020
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(s != nullptr);
1021
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(s->isValid());
1022
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy surfaceCreatedSpy(server.globals.compositor.get(),
1023 &Wrapland::Server::Compositor::surfaceCreated);
1024
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(surfaceCreatedSpy.isValid());
1025
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(surfaceCreatedSpy.wait());
1026
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 auto serverSurface = surfaceCreatedSpy.first().first().value<Wrapland::Server::Surface*>();
1027
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(serverSurface);
1028
1029 // now render to it
1030
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QImage img(QSize(10, 10), QImage::Format_ARGB32_Premultiplied);
1031
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 img.fill(Qt::black);
1032
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 auto b = m_shm->createBuffer(img);
1033
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->attachBuffer(b);
1034
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->damage(QRect(0, 0, 10, 10));
1035 // add some frame callbacks
1036 wl_callback* callbacks[1000];
1037
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1000 times.
1001 for (int i = 0; i < 1000; i++) {
1038
2/4
✓ Branch 0 taken 1000 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1000 times.
✗ Branch 3 not taken.
1000 callbacks[i] = wl_surface_frame(*s);
1039 1000 }
1040
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->commit(Wrapland::Client::Surface::CommitFlag::FrameCallback);
1041
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy commit_spy(serverSurface, &Wrapland::Server::Surface::committed);
1042
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(commit_spy.isValid());
1043
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(commit_spy.wait());
1044
1045 // now try to destroy the Surface again
1046
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy destroyedSpy(serverSurface, &QObject::destroyed);
1047
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(destroyedSpy.isValid());
1048 1 s.reset();
1049
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(destroyedSpy.wait());
1050
1051
2/2
✓ Branch 0 taken 1000 times.
✓ Branch 1 taken 1 times.
1001 for (int i = 0; i < 1000; i++) {
1052
1/2
✓ Branch 0 taken 1000 times.
✗ Branch 1 not taken.
1000 wl_callback_destroy(callbacks[i]);
1053 1000 }
1054
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
1055
1056 1 void TestSurface::testDisconnect()
1057 {
1058 // this test verifies that the server side correctly tears down the resources when the client
1059 // disconnects
1060 using namespace Wrapland::Client;
1061 using namespace Wrapland::Server;
1062 1 std::unique_ptr<Wrapland::Client::Surface> s(m_compositor->createSurface());
1063
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(s != nullptr);
1064
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(s->isValid());
1065
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy surfaceCreatedSpy(server.globals.compositor.get(),
1066 &Wrapland::Server::Compositor::surfaceCreated);
1067
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(surfaceCreatedSpy.isValid());
1068
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(surfaceCreatedSpy.wait());
1069
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 auto serverSurface = surfaceCreatedSpy.first().first().value<Wrapland::Server::Surface*>();
1070
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(serverSurface);
1071
1072 // destroy client
1073
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QSignalSpy clientDisconnectedSpy(serverSurface->client(),
1074 &Wrapland::Server::Client::disconnected);
1075
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(clientDisconnectedSpy.isValid());
1076
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy surfaceDestroyedSpy(serverSurface, &QObject::destroyed);
1077
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(surfaceDestroyedSpy.isValid());
1078
1079
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 s->release();
1080
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_shm->release();
1081
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_compositor->release();
1082
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_queue->release();
1083
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_idleInhibitManager->release();
1084
1085
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(surfaceDestroyedSpy.count(), 0);
1086
1087
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(m_connection);
1088
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_connection->deleteLater();
1089 1 m_connection = nullptr;
1090
1091
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(clientDisconnectedSpy.wait());
1092
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(clientDisconnectedSpy.count(), 1);
1093
12/58
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✗ Branch 51 not taken.
✗ Branch 52 not taken.
✗ Branch 53 not taken.
✓ Branch 54 taken 1 times.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✓ Branch 57 taken 1 times.
1 QTRY_COMPARE(surfaceDestroyedSpy.count(), 1);
1094
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
1095
1096 1 void TestSurface::testOutput()
1097 {
1098 // This test verifies that the enter/leave are sent correctly to the Client
1099 1 qRegisterMetaType<Wrapland::Client::Output*>();
1100
1101 1 std::unique_ptr<Wrapland::Client::Surface> s(m_compositor->createSurface());
1102
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(s != nullptr);
1103
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(s->isValid());
1104
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QVERIFY(s->outputs().isEmpty());
1105
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy enteredSpy(s.get(), &Wrapland::Client::Surface::outputEntered);
1106
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(enteredSpy.isValid());
1107
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy leftSpy(s.get(), &Wrapland::Client::Surface::outputLeft);
1108
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(leftSpy.isValid());
1109 // wait for the surface on the Server side
1110
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy surfaceCreatedSpy(server.globals.compositor.get(),
1111 &Wrapland::Server::Compositor::surfaceCreated);
1112
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(surfaceCreatedSpy.isValid());
1113
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(surfaceCreatedSpy.wait());
1114
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 auto serverSurface = surfaceCreatedSpy.first().first().value<Wrapland::Server::Surface*>();
1115
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(serverSurface);
1116
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(serverSurface->outputs(), std::vector<Wrapland::Server::WlOutput*>());
1117
1118 // Create another registry to get notified about added outputs.
1119
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 Wrapland::Client::Registry registry;
1120
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 registry.setEventQueue(m_queue);
1121
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy allAnnounced(&registry, &Wrapland::Client::Registry::interfacesAnnounced);
1122
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(allAnnounced.isValid());
1123
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 registry.create(m_connection);
1124
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(registry.isValid());
1125
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 registry.setup();
1126
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(allAnnounced.wait());
1127
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy outputAnnouncedSpy(&registry, &Wrapland::Client::Registry::outputAnnounced);
1128
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(outputAnnouncedSpy.isValid());
1129
1130
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 auto serverOutput = new Wrapland::Server::output(*server.globals.output_manager);
1131
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 serverOutput->add_mode({.size = QSize{1920, 1080}, .id = 0});
1132
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 auto state = serverOutput->get_state();
1133 1 state.enabled = true;
1134
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 serverOutput->set_state(state);
1135
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 serverOutput->done();
1136
1137
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(outputAnnouncedSpy.wait());
1138 1 std::unique_ptr<Wrapland::Client::Output> clientOutput(
1139
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
2 registry.createOutput(outputAnnouncedSpy.first().first().value<quint32>(),
1140
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 outputAnnouncedSpy.first().last().value<quint32>()));
1141
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(clientOutput->isValid());
1142
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_connection->flush();
1143
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server.display->dispatchEvents();
1144
1145 // Now enter it.
1146 1 std::vector<Wrapland::Server::WlOutput*> outputs;
1147
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 outputs.push_back(serverOutput->wayland_output());
1148
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 serverSurface->setOutputs(outputs);
1149
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(serverSurface->outputs(), outputs);
1150
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(enteredSpy.wait());
1151
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(enteredSpy.count(), 1);
1152
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
1 QCOMPARE(enteredSpy.first().first().value<Wrapland::Client::Output*>(), clientOutput.get());
1153
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
1 QCOMPARE(s->outputs(), QVector<Wrapland::Client::Output*>{clientOutput.get()});
1154
1155 // Adding to same should not trigger.
1156
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 serverSurface->setOutputs(std::vector<Wrapland::Server::output*>{serverOutput});
1157
1158 // leave again
1159
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 serverSurface->setOutputs(std::vector<Wrapland::Server::output*>());
1160
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(serverSurface->outputs(), std::vector<Wrapland::Server::WlOutput*>());
1161
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(leftSpy.wait());
1162
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(enteredSpy.count(), 1);
1163
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(leftSpy.count(), 1);
1164
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
1 QCOMPARE(leftSpy.first().first().value<Wrapland::Client::Output*>(), clientOutput.get());
1165
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(s->outputs(), QVector<Wrapland::Client::Output*>());
1166
1167 // Leave again should not trigger.
1168
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 serverSurface->setOutputs(std::vector<Wrapland::Server::output*>());
1169
1170 // and enter again, just to verify
1171
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 serverSurface->setOutputs(std::vector<Wrapland::Server::output*>{serverOutput});
1172
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QCOMPARE(serverSurface->outputs(),
1173 std::vector<Wrapland::Server::WlOutput*>{serverOutput->wayland_output()});
1174
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(enteredSpy.wait());
1175
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(enteredSpy.count(), 2);
1176
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(leftSpy.count(), 1);
1177
1178 // Delete output client is on. Client should get an exit and be left on no outputs (which is
1179 // allowed).
1180
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 serverOutput->deleteLater();
1181
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(leftSpy.wait());
1182
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(serverSurface->outputs().size(), 0);
1183
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
1184
1185 1 void TestSurface::testInhibit()
1186 {
1187 1 std::unique_ptr<Wrapland::Client::Surface> s(m_compositor->createSurface());
1188 // wait for the surface on the Server side
1189
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy surfaceCreatedSpy(server.globals.compositor.get(),
1190 &Wrapland::Server::Compositor::surfaceCreated);
1191
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(surfaceCreatedSpy.isValid());
1192
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(surfaceCreatedSpy.wait());
1193
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 auto serverSurface = surfaceCreatedSpy.first().first().value<Wrapland::Server::Surface*>();
1194
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(serverSurface);
1195
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(serverSurface->inhibitsIdle(), false);
1196
1197
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy inhibitsChangedSpy(serverSurface, &Wrapland::Server::Surface::inhibitsIdleChanged);
1198
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(inhibitsChangedSpy.isValid());
1199
1200 // now create an idle inhibition
1201 1 std::unique_ptr<Wrapland::Client::IdleInhibitor> inhibitor1(
1202
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_idleInhibitManager->createInhibitor(s.get()));
1203
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(inhibitsChangedSpy.wait());
1204
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(serverSurface->inhibitsIdle(), true);
1205
1206 // creating a second idle inhibition should not trigger the signal
1207 1 std::unique_ptr<Wrapland::Client::IdleInhibitor> inhibitor2(
1208
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_idleInhibitManager->createInhibitor(s.get()));
1209
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(!inhibitsChangedSpy.wait(500));
1210
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(serverSurface->inhibitsIdle(), true);
1211
1212 // and also deleting the first inhibitor should not yet change the inhibition
1213 1 inhibitor1.reset();
1214
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
1 QVERIFY(!inhibitsChangedSpy.wait(500));
1215
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(serverSurface->inhibitsIdle(), true);
1216
1217 // but deleting also the second inhibitor should trigger
1218 1 inhibitor2.reset();
1219
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(inhibitsChangedSpy.wait());
1220
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(serverSurface->inhibitsIdle(), false);
1221
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(inhibitsChangedSpy.count(), 2);
1222
1223 // recreate inhibitor1 should inhibit again
1224
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 inhibitor1.reset(m_idleInhibitManager->createInhibitor(s.get()));
1225
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(inhibitsChangedSpy.wait());
1226
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(serverSurface->inhibitsIdle(), true);
1227 // and destroying should uninhibit
1228 1 inhibitor1.reset();
1229
5/10
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QVERIFY(inhibitsChangedSpy.wait());
1230
3/6
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
1 QCOMPARE(serverSurface->inhibitsIdle(), false);
1231
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(inhibitsChangedSpy.count(), 4);
1232
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
1233
1234
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
1 QTEST_GUILESS_MAIN(TestSurface)
1235 #include "surface.moc"
1236