GCC Code Coverage Report


Directory: ./
File: autotests/client/subsurface.cpp
Date: 2024-01-22 17:25:27
Exec Total Coverage
Lines: 902 903 99.9%
Branches: 1955 3992 49.0%

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 <QtTest>
21
22 #include "../../src/client/compositor.h"
23 #include "../../src/client/connection_thread.h"
24 #include "../../src/client/event_queue.h"
25 #include "../../src/client/region.h"
26 #include "../../src/client/registry.h"
27 #include "../../src/client/shm_pool.h"
28 #include "../../src/client/subcompositor.h"
29 #include "../../src/client/subsurface.h"
30 #include "../../src/client/surface.h"
31
32 #include "../../server/buffer.h"
33 #include "../../server/compositor.h"
34 #include "../../server/display.h"
35 #include "../../server/subcompositor.h"
36 #include "../../server/surface.h"
37
38 #include "../../tests/globals.h"
39 #include "../../tests/helpers.h"
40
41 #include <wayland-client.h>
42
43 class TestSubsurface : public QObject
44 {
45 Q_OBJECT
46 public:
47 explicit TestSubsurface(QObject* parent = nullptr);
48 private Q_SLOTS:
49 void init();
50 void cleanup();
51
52 void testCreate();
53 void testMode();
54 void testPosition();
55 void testPlaceAbove();
56 void testPlaceBelow();
57 void testDestroy();
58 void testCast();
59 void testSyncMode();
60 void testDeSyncMode();
61 void testMainSurfaceFromTree();
62 void testRemoveSurface();
63 void testMappingOfSurfaceTree();
64 void testSurfaceAt();
65 void testDestroyAttachedBuffer();
66 void testDestroyParentSurface();
67
68 private:
69 1 struct {
70 std::unique_ptr<Wrapland::Server::Display> display;
71 Wrapland::Server::globals globals;
72 } server;
73
74 Wrapland::Client::ConnectionThread* m_connection;
75 Wrapland::Client::Compositor* m_compositor;
76 Wrapland::Client::ShmPool* m_shm;
77 Wrapland::Client::SubCompositor* m_subCompositor;
78 Wrapland::Client::EventQueue* m_queue;
79 QThread* m_thread;
80 };
81
82 constexpr auto socket_name{"wrapland-test-wayland-subsurface-0"};
83
84
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 TestSubsurface::TestSubsurface(QObject* parent)
85 1 : QObject(parent)
86 1 , m_connection(nullptr)
87 1 , m_compositor(nullptr)
88 1 , m_shm(nullptr)
89 1 , m_subCompositor(nullptr)
90 1 , m_queue(nullptr)
91 1 , m_thread(nullptr)
92 1 {
93 1 }
94
95 15 void TestSubsurface::init()
96 {
97 15 qRegisterMetaType<Wrapland::Server::Surface*>();
98
99 15 server.display = std::make_unique<Wrapland::Server::Display>();
100
2/4
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 15 times.
✗ Branch 3 not taken.
15 server.display->set_socket_name(std::string(socket_name));
101 15 server.display->start();
102
1/2
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
15 QVERIFY(server.display->running());
103
104 15 server.display->createShm();
105
106 // setup connection
107
1/2
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
15 m_connection = new Wrapland::Client::ConnectionThread;
108 15 QSignalSpy connectedSpy(m_connection, &Wrapland::Client::ConnectionThread::establishedChanged);
109
2/4
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 15 times.
✗ Branch 3 not taken.
15 m_connection->setSocketName(socket_name);
110
111
2/4
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 15 times.
✗ Branch 3 not taken.
15 m_thread = new QThread(this);
112
1/2
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
15 m_connection->moveToThread(m_thread);
113
1/2
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
15 m_thread->start();
114
115
1/2
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
15 m_connection->establishConnection();
116
6/12
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 15 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 15 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 15 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 15 times.
15 QVERIFY(connectedSpy.count() || connectedSpy.wait());
117
2/4
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 15 times.
15 QCOMPARE(connectedSpy.count(), 1);
118
119
2/4
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 15 times.
✗ Branch 3 not taken.
15 m_queue = new Wrapland::Client::EventQueue(this);
120
3/6
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 15 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 5 not taken.
15 QVERIFY(!m_queue->isValid());
121
1/2
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
15 m_queue->setup(m_connection);
122
3/6
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 15 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 5 not taken.
15 QVERIFY(m_queue->isValid());
123
124
1/2
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
15 Wrapland::Client::Registry registry;
125
2/4
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 15 times.
✗ Branch 3 not taken.
15 QSignalSpy compositorSpy(&registry, SIGNAL(compositorAnnounced(quint32, quint32)));
126
3/6
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 15 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 5 not taken.
15 QVERIFY(compositorSpy.isValid());
127
2/4
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 15 times.
✗ Branch 3 not taken.
15 QSignalSpy subCompositorSpy(&registry, SIGNAL(subCompositorAnnounced(quint32, quint32)));
128
3/6
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 15 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 5 not taken.
15 QVERIFY(subCompositorSpy.isValid());
129
3/6
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 15 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 5 not taken.
15 QVERIFY(!registry.eventQueue());
130
1/2
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
15 registry.setEventQueue(m_queue);
131
3/6
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 15 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 5 not taken.
15 QCOMPARE(registry.eventQueue(), m_queue);
132
2/4
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 15 times.
✗ Branch 3 not taken.
15 registry.create(m_connection->display());
133
3/6
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 15 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 5 not taken.
15 QVERIFY(registry.isValid());
134
1/2
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
15 registry.setup();
135
136 30 server.globals.compositor
137
1/2
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
15 = std::make_unique<Wrapland::Server::Compositor>(server.display.get());
138 30 server.globals.subcompositor
139
1/2
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
15 = std::make_unique<Wrapland::Server::Subcompositor>(server.display.get());
140
141
5/10
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 15 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 15 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 15 times.
15 QVERIFY(subCompositorSpy.wait());
142 15 m_subCompositor
143
4/8
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 15 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 15 times.
✗ Branch 7 not taken.
30 = registry.createSubCompositor(subCompositorSpy.first().first().value<quint32>(),
144
3/6
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 15 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 5 not taken.
15 subCompositorSpy.first().last().value<quint32>(),
145 this);
146
147
1/2
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
15 if (compositorSpy.isEmpty()) {
148 QVERIFY(compositorSpy.wait());
149 }
150
4/8
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 15 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 15 times.
✗ Branch 7 not taken.
30 m_compositor = registry.createCompositor(compositorSpy.first().first().value<quint32>(),
151
3/6
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 15 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 5 not taken.
15 compositorSpy.first().last().value<quint32>(),
152 this);
153
154
1/2
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
15 m_shm = registry.createShmPool(
155
1/2
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
15 registry.interface(Wrapland::Client::Registry::Interface::Shm).name,
156
1/2
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
15 registry.interface(Wrapland::Client::Registry::Interface::Shm).version,
157 this);
158
3/6
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 15 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 15 times.
✗ Branch 5 not taken.
15 QVERIFY(m_shm->isValid());
159
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 15 times.
15 }
160
161 15 void TestSubsurface::cleanup()
162 {
163
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 14 times.
15 if (m_shm) {
164
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 14 times.
14 delete m_shm;
165 14 m_shm = nullptr;
166 14 }
167
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 15 times.
15 if (m_subCompositor) {
168
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 15 times.
15 delete m_subCompositor;
169 15 m_subCompositor = nullptr;
170 15 }
171
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 15 times.
15 if (m_compositor) {
172
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 15 times.
15 delete m_compositor;
173 15 m_compositor = nullptr;
174 15 }
175
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 15 times.
15 if (m_queue) {
176
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 15 times.
15 delete m_queue;
177 15 m_queue = nullptr;
178 15 }
179
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 15 times.
15 if (m_thread) {
180 15 m_thread->quit();
181 15 m_thread->wait();
182
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 15 times.
15 delete m_thread;
183 15 m_thread = nullptr;
184 15 }
185
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 15 times.
15 delete m_connection;
186 15 m_connection = nullptr;
187
188
1/2
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
15 server = {};
189 15 }
190
191 1 void TestSubsurface::testCreate()
192 {
193 1 QSignalSpy surfaceCreatedSpy(server.globals.compositor.get(),
194 &Wrapland::Server::Compositor::surfaceCreated);
195
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());
196
197 // create two Surfaces
198
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> surface(m_compositor->createSurface());
199
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());
200
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*>();
201
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(serverSurface);
202
203
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 surfaceCreatedSpy.clear();
204
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> parent(m_compositor->createSurface());
205
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());
206 1 auto serverParentSurface
207
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 = surfaceCreatedSpy.first().first().value<Wrapland::Server::Surface*>();
208
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(serverParentSurface);
209
210
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy subsurfaceCreatedSpy(server.globals.subcompositor.get(),
211 &Wrapland::Server::Subcompositor::subsurfaceCreated);
212
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(subsurfaceCreatedSpy.isValid());
213
214 // create subsurface for surface of parent
215 1 std::unique_ptr<Wrapland::Client::SubSurface> subsurface(
216
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 m_subCompositor->createSubSurface(QPointer<Wrapland::Client::Surface>(surface.get()),
217
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QPointer<Wrapland::Client::Surface>(parent.get())));
218
219
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(subsurfaceCreatedSpy.wait());
220
221 1 auto serverSubsurface
222
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 = subsurfaceCreatedSpy.first().first().value<Wrapland::Server::Subsurface*>();
223
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(serverSubsurface);
224
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(serverSubsurface->parentSurface());
225
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(serverSubsurface->parentSurface(), serverParentSurface);
226
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(serverSubsurface->surface(), serverSurface);
227
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->subsurface(), serverSubsurface);
228
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(serverSubsurface->mainSurface(), serverParentSurface);
229
230 // children are only added after committing the surface
231
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(serverParentSurface->state().children.size(), 0);
232
233 // so let's commit the surface, to apply the stacking change
234
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 parent->commit(Wrapland::Client::Surface::CommitFlag::None);
235
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());
236
237
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QCoreApplication::processEvents();
238
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(serverParentSurface->state().children.size(), 1);
239
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(serverParentSurface->state().children.front(), serverSubsurface);
240
241 // and let's destroy it again
242
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QSignalSpy destroyedSpy(serverSubsurface, SIGNAL(destroyed(QObject*)));
243
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());
244 1 subsurface.reset();
245
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());
246
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->subsurface(), QPointer<Wrapland::Server::Subsurface>());
247
248 // Applied immediately.
249
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(serverParentSurface->state().children.size(), 0);
250
251 // Make sure committing on parent still works.
252
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 parent->commit(Wrapland::Client::Surface::CommitFlag::None);
253
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());
254
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QCoreApplication::processEvents();
255
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(serverParentSurface->state().children.size(), 0);
256
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
257
258 1 void TestSubsurface::testMode()
259 {
260 // create two Surface
261 1 std::unique_ptr<Wrapland::Client::Surface> surface(m_compositor->createSurface());
262
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> parent(m_compositor->createSurface());
263
264
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy subsurfaceCreatedSpy(server.globals.subcompositor.get(),
265
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 SIGNAL(subsurfaceCreated(Wrapland::Server::Subsurface*)));
266
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(subsurfaceCreatedSpy.isValid());
267
268 // create the Subsurface for surface of parent
269 1 std::unique_ptr<Wrapland::Client::SubSurface> subsurface(
270
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 m_subCompositor->createSubSurface(QPointer<Wrapland::Client::Surface>(surface.get()),
271
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QPointer<Wrapland::Client::Surface>(parent.get())));
272
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(subsurfaceCreatedSpy.wait());
273 1 auto serverSubsurface
274
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 = subsurfaceCreatedSpy.first().first().value<Wrapland::Server::Subsurface*>();
275
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(serverSubsurface);
276
277 // both client and server subsurface should be in synchronized mode
278
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(subsurface->mode(), Wrapland::Client::SubSurface::Mode::Synchronized);
279
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(serverSubsurface->mode(), Wrapland::Server::Subsurface::Mode::Synchronized);
280
281 // verify that we can change to desynchronized
282
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy modeChangedSpy(serverSubsurface,
283
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 SIGNAL(modeChanged(Wrapland::Server::Subsurface::Mode)));
284
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(modeChangedSpy.isValid());
285
286
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 subsurface->setMode(Wrapland::Client::SubSurface::Mode::Desynchronized);
287
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(subsurface->mode(), Wrapland::Client::SubSurface::Mode::Desynchronized);
288
289
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(modeChangedSpy.wait());
290
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(modeChangedSpy.first().first().value<Wrapland::Server::Subsurface::Mode>(),
291 Wrapland::Server::Subsurface::Mode::Desynchronized);
292
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(serverSubsurface->mode(), Wrapland::Server::Subsurface::Mode::Desynchronized);
293
294 // setting the same again won't change
295
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 subsurface->setMode(Wrapland::Client::SubSurface::Mode::Desynchronized);
296
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(subsurface->mode(), Wrapland::Client::SubSurface::Mode::Desynchronized);
297 // not testing the signal, we do that after changing to synchronized
298
299 // and change back to synchronized
300
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 subsurface->setMode(Wrapland::Client::SubSurface::Mode::Synchronized);
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(subsurface->mode(), Wrapland::Client::SubSurface::Mode::Synchronized);
302
303
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(modeChangedSpy.wait());
304
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(modeChangedSpy.count(), 2);
305
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(modeChangedSpy.first().first().value<Wrapland::Server::Subsurface::Mode>(),
306 Wrapland::Server::Subsurface::Mode::Desynchronized);
307
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(modeChangedSpy.last().first().value<Wrapland::Server::Subsurface::Mode>(),
308 Wrapland::Server::Subsurface::Mode::Synchronized);
309
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(serverSubsurface->mode(), Wrapland::Server::Subsurface::Mode::Synchronized);
310
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
311
312 1 void TestSubsurface::testPosition()
313 {
314 // create two Surface
315 1 std::unique_ptr<Wrapland::Client::Surface> surface(m_compositor->createSurface());
316
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> parent(m_compositor->createSurface());
317
318
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy subsurfaceCreatedSpy(server.globals.subcompositor.get(),
319
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 SIGNAL(subsurfaceCreated(Wrapland::Server::Subsurface*)));
320
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(subsurfaceCreatedSpy.isValid());
321
322 // create the Subsurface for surface of parent
323 1 std::unique_ptr<Wrapland::Client::SubSurface> subsurface(
324
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 m_subCompositor->createSubSurface(QPointer<Wrapland::Client::Surface>(surface.get()),
325
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QPointer<Wrapland::Client::Surface>(parent.get())));
326
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(subsurfaceCreatedSpy.wait());
327 1 auto serverSubsurface
328
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 = subsurfaceCreatedSpy.first().first().value<Wrapland::Server::Subsurface*>();
329
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(serverSubsurface);
330
331 // create a signalspy
332
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QSignalSpy subsurfaceTreeChanged(serverSubsurface->parentSurface(),
333 &Wrapland::Server::Surface::subsurfaceTreeChanged);
334
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(subsurfaceTreeChanged.isValid());
335
336 // both client and server should have a default position
337
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(subsurface->position(), QPoint());
338
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(serverSubsurface->position(), QPoint());
339
340
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QSignalSpy positionChangedSpy(serverSubsurface, SIGNAL(positionChanged(QPoint)));
341
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(positionChangedSpy.isValid());
342
343 // changing the position should not trigger a direct update on server side
344
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 subsurface->setPosition(QPoint(10, 20));
345
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(subsurface->position(), QPoint(10, 20));
346 // ensure it's processed on server side
347
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());
348
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QCoreApplication::processEvents();
349
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(serverSubsurface->position(), QPoint());
350 // changing once more
351
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 subsurface->setPosition(QPoint(20, 30));
352
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(subsurface->position(), QPoint(20, 30));
353 // ensure it's processed on server side
354
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());
355
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QCoreApplication::processEvents();
356
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(serverSubsurface->position(), QPoint());
357
358 // committing the parent surface should update the position
359
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 parent->commit(Wrapland::Client::Surface::CommitFlag::None);
360
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(subsurfaceTreeChanged.count(), 0);
361
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(positionChangedSpy.wait());
362
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(positionChangedSpy.count(), 1);
363
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(positionChangedSpy.first().first().toPoint(), QPoint(20, 30));
364
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(serverSubsurface->position(), QPoint(20, 30));
365
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(subsurfaceTreeChanged.count(), 0);
366
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
367
368 1 void TestSubsurface::testPlaceAbove()
369 {
370 // Create needed Surfaces (one parent, three children).
371 1 std::unique_ptr<Wrapland::Client::Surface> surface1(m_compositor->createSurface());
372
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> surface2(m_compositor->createSurface());
373
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> surface3(m_compositor->createSurface());
374
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> parent(m_compositor->createSurface());
375
376
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy subsurfaceCreatedSpy(server.globals.subcompositor.get(),
377 &Wrapland::Server::Subcompositor::subsurfaceCreated);
378
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(subsurfaceCreatedSpy.isValid());
379
380 // Create the Subsurfaces for surface of parent.
381 1 std::unique_ptr<Wrapland::Client::SubSurface> subsurface1(
382
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 m_subCompositor->createSubSurface(QPointer<Wrapland::Client::Surface>(surface1.get()),
383
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QPointer<Wrapland::Client::Surface>(parent.get())));
384
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(subsurfaceCreatedSpy.wait());
385
386 1 auto serverSubsurface1
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 = subsurfaceCreatedSpy.first().first().value<Wrapland::Server::Subsurface*>();
388
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(serverSubsurface1);
389
390
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 subsurfaceCreatedSpy.clear();
391 1 std::unique_ptr<Wrapland::Client::SubSurface> subsurface2(
392
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 m_subCompositor->createSubSurface(QPointer<Wrapland::Client::Surface>(surface2.get()),
393
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QPointer<Wrapland::Client::Surface>(parent.get())));
394
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(subsurfaceCreatedSpy.wait());
395
396 1 auto serverSubsurface2
397
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 = subsurfaceCreatedSpy.first().first().value<Wrapland::Server::Subsurface*>();
398
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(serverSubsurface2);
399
400
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 subsurfaceCreatedSpy.clear();
401 1 std::unique_ptr<Wrapland::Client::SubSurface> subsurface3(
402
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 m_subCompositor->createSubSurface(QPointer<Wrapland::Client::Surface>(surface3.get()),
403
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QPointer<Wrapland::Client::Surface>(parent.get())));
404
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(subsurfaceCreatedSpy.wait());
405
406 1 auto serverSubsurface3
407
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 = subsurfaceCreatedSpy.first().first().value<Wrapland::Server::Subsurface*>();
408
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(serverSubsurface3);
409
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 subsurfaceCreatedSpy.clear();
410
411 // So far the stacking order should still be empty.
412
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(serverSubsurface1->parentSurface()->state().children.empty());
413
414 // Committing the parent should create the stacking order.
415
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 parent->commit(Wrapland::Client::Surface::CommitFlag::None);
416
417 // Ensure it's processed on server side.
418
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());
419
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QCoreApplication::processEvents();
420
421
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(serverSubsurface1->parentSurface()->state().children.size(), 3);
422
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(serverSubsurface1->parentSurface()->state().children.at(0), serverSubsurface1);
423
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(serverSubsurface1->parentSurface()->state().children.at(1), serverSubsurface2);
424
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(serverSubsurface1->parentSurface()->state().children.at(2), serverSubsurface3);
425
426 // Raising subsurface1 should place it to top of stack.
427
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 subsurface1->raise();
428
429 // Ensure it's processed on server side.
430
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());
431
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QCoreApplication::processEvents();
432
433 // But as long as parent is not committed it shouldn't change on server side.
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 taken 1 times.
✗ Branch 9 not taken.
1 QCOMPARE(serverSubsurface1->parentSurface()->state().children.at(0), serverSubsurface1);
435
436 // After commit it's changed.
437
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 parent->commit(Wrapland::Client::Surface::CommitFlag::None);
438
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());
439
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QCoreApplication::processEvents();
440
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(serverSubsurface1->parentSurface()->state().children.size(), 3);
441
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(serverSubsurface1->parentSurface()->state().children.at(0), serverSubsurface2);
442
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(serverSubsurface1->parentSurface()->state().children.at(1), serverSubsurface3);
443
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(serverSubsurface1->parentSurface()->state().children.at(2), serverSubsurface1);
444
445 // Try placing 3 above 1, should result in 2, 1, 3.
446
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 subsurface3->placeAbove(QPointer<Wrapland::Client::SubSurface>(subsurface1.get()));
447
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 parent->commit(Wrapland::Client::Surface::CommitFlag::None);
448
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());
449
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QCoreApplication::processEvents();
450
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(serverSubsurface1->parentSurface()->state().children.size(), 3);
451
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(serverSubsurface1->parentSurface()->state().children.at(0), serverSubsurface2);
452
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(serverSubsurface1->parentSurface()->state().children.at(1), serverSubsurface1);
453
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(serverSubsurface1->parentSurface()->state().children.at(2), serverSubsurface3);
454
455 // try placing 3 above 2, should result in 2, 3, 1
456
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 subsurface3->placeAbove(QPointer<Wrapland::Client::SubSurface>(subsurface2.get()));
457
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 parent->commit(Wrapland::Client::Surface::CommitFlag::None);
458
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());
459
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QCoreApplication::processEvents();
460
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(serverSubsurface1->parentSurface()->state().children.size(), 3);
461
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(serverSubsurface1->parentSurface()->state().children.at(0), serverSubsurface2);
462
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(serverSubsurface1->parentSurface()->state().children.at(1), serverSubsurface3);
463
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(serverSubsurface1->parentSurface()->state().children.at(2), serverSubsurface1);
464
465 // try placing 1 above 3 - shouldn't change
466
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 subsurface1->placeAbove(QPointer<Wrapland::Client::SubSurface>(subsurface3.get()));
467
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 parent->commit(Wrapland::Client::Surface::CommitFlag::None);
468
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());
469
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QCoreApplication::processEvents();
470
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(serverSubsurface1->parentSurface()->state().children.size(), 3);
471
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(serverSubsurface1->parentSurface()->state().children.at(0), serverSubsurface2);
472
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(serverSubsurface1->parentSurface()->state().children.at(1), serverSubsurface3);
473
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(serverSubsurface1->parentSurface()->state().children.at(2), serverSubsurface1);
474
475 // and 2 above 3 - > 3, 2, 1
476
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 subsurface2->placeAbove(QPointer<Wrapland::Client::SubSurface>(subsurface3.get()));
477
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 parent->commit(Wrapland::Client::Surface::CommitFlag::None);
478
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());
479
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QCoreApplication::processEvents();
480
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(serverSubsurface1->parentSurface()->state().children.size(), 3);
481
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(serverSubsurface1->parentSurface()->state().children.at(0), serverSubsurface3);
482
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(serverSubsurface1->parentSurface()->state().children.at(1), serverSubsurface2);
483
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(serverSubsurface1->parentSurface()->state().children.at(2), serverSubsurface1);
484
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
485
486 1 void TestSubsurface::testPlaceBelow()
487 {
488 using namespace Wrapland::Server;
489 // create needed Surfaces (one parent, three client
490 1 std::unique_ptr<Wrapland::Client::Surface> surface1(m_compositor->createSurface());
491
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> surface2(m_compositor->createSurface());
492
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> surface3(m_compositor->createSurface());
493
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> parent(m_compositor->createSurface());
494
495
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy subsurfaceCreatedSpy(server.globals.subcompositor.get(),
496
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 SIGNAL(subsurfaceCreated(Wrapland::Server::Subsurface*)));
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(subsurfaceCreatedSpy.isValid());
498
499 // create the Subsurfaces for surface of parent
500 1 std::unique_ptr<Wrapland::Client::SubSurface> subsurface1(
501
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 m_subCompositor->createSubSurface(QPointer<Wrapland::Client::Surface>(surface1.get()),
502
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QPointer<Wrapland::Client::Surface>(parent.get())));
503
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(subsurfaceCreatedSpy.wait());
504 1 auto serverSubsurface1
505
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 = subsurfaceCreatedSpy.first().first().value<Wrapland::Server::Subsurface*>();
506
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(serverSubsurface1);
507
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 subsurfaceCreatedSpy.clear();
508 1 std::unique_ptr<Wrapland::Client::SubSurface> subsurface2(
509
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 m_subCompositor->createSubSurface(QPointer<Wrapland::Client::Surface>(surface2.get()),
510
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QPointer<Wrapland::Client::Surface>(parent.get())));
511
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(subsurfaceCreatedSpy.wait());
512 1 auto serverSubsurface2
513
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 = subsurfaceCreatedSpy.first().first().value<Wrapland::Server::Subsurface*>();
514
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(serverSubsurface2);
515
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 subsurfaceCreatedSpy.clear();
516 1 std::unique_ptr<Wrapland::Client::SubSurface> subsurface3(
517
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 m_subCompositor->createSubSurface(QPointer<Wrapland::Client::Surface>(surface3.get()),
518
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QPointer<Wrapland::Client::Surface>(parent.get())));
519
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(subsurfaceCreatedSpy.wait());
520 1 auto serverSubsurface3
521
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 = subsurfaceCreatedSpy.first().first().value<Wrapland::Server::Subsurface*>();
522
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(serverSubsurface3);
523
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 subsurfaceCreatedSpy.clear();
524
525 // so far the stacking order should still be empty
526
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(serverSubsurface1->parentSurface()->state().children.empty());
527
528 // committing the parent should create the stacking order
529
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 parent->commit(Wrapland::Client::Surface::CommitFlag::None);
530 // ensure it's processed on server side
531
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());
532
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QCoreApplication::processEvents();
533
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(serverSubsurface1->parentSurface()->state().children.size(), 3);
534
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(serverSubsurface1->parentSurface()->state().children.at(0), serverSubsurface1);
535
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(serverSubsurface1->parentSurface()->state().children.at(1), serverSubsurface2);
536
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(serverSubsurface1->parentSurface()->state().children.at(2), serverSubsurface3);
537
538 // lowering subsurface3 should place it to the bottom of stack
539
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 subsurface3->lower();
540 // ensure it's processed on server side
541
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());
542
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QCoreApplication::processEvents();
543 // but as long as parent is not committed it shouldn't change on server side
544
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(serverSubsurface1->parentSurface()->state().children.at(0), serverSubsurface1);
545 // after commit it's changed
546
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 parent->commit(Wrapland::Client::Surface::CommitFlag::None);
547
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());
548
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QCoreApplication::processEvents();
549
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(serverSubsurface1->parentSurface()->state().children.size(), 3);
550
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(serverSubsurface1->parentSurface()->state().children.at(0), serverSubsurface3);
551
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(serverSubsurface1->parentSurface()->state().children.at(1), serverSubsurface1);
552
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(serverSubsurface1->parentSurface()->state().children.at(2), serverSubsurface2);
553
554 // place 1 below 3 -> 1, 3, 2
555
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 subsurface1->placeBelow(QPointer<Wrapland::Client::SubSurface>(subsurface3.get()));
556
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 parent->commit(Wrapland::Client::Surface::CommitFlag::None);
557
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());
558
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QCoreApplication::processEvents();
559
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(serverSubsurface1->parentSurface()->state().children.size(), 3);
560
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(serverSubsurface1->parentSurface()->state().children.at(0), serverSubsurface1);
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 taken 1 times.
✗ Branch 9 not taken.
1 QCOMPARE(serverSubsurface1->parentSurface()->state().children.at(1), serverSubsurface3);
562
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(serverSubsurface1->parentSurface()->state().children.at(2), serverSubsurface2);
563
564 // 2 below 3 -> 1, 2, 3
565
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 subsurface2->placeBelow(QPointer<Wrapland::Client::SubSurface>(subsurface3.get()));
566
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 parent->commit(Wrapland::Client::Surface::CommitFlag::None);
567
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());
568
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QCoreApplication::processEvents();
569
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(serverSubsurface1->parentSurface()->state().children.size(), 3);
570
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(serverSubsurface1->parentSurface()->state().children.at(0), serverSubsurface1);
571
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(serverSubsurface1->parentSurface()->state().children.at(1), serverSubsurface2);
572
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(serverSubsurface1->parentSurface()->state().children.at(2), serverSubsurface3);
573
574 // 1 below 2 -> shouldn't change
575
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 subsurface1->placeBelow(QPointer<Wrapland::Client::SubSurface>(subsurface2.get()));
576
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 parent->commit(Wrapland::Client::Surface::CommitFlag::None);
577
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());
578
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QCoreApplication::processEvents();
579
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(serverSubsurface1->parentSurface()->state().children.size(), 3);
580
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(serverSubsurface1->parentSurface()->state().children.at(0), serverSubsurface1);
581
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(serverSubsurface1->parentSurface()->state().children.at(1), serverSubsurface2);
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 taken 1 times.
✗ Branch 9 not taken.
1 QCOMPARE(serverSubsurface1->parentSurface()->state().children.at(2), serverSubsurface3);
583
584 // and 3 below 1 -> 3, 1, 2
585
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 subsurface3->placeBelow(QPointer<Wrapland::Client::SubSurface>(subsurface1.get()));
586
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 parent->commit(Wrapland::Client::Surface::CommitFlag::None);
587
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());
588
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QCoreApplication::processEvents();
589
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(serverSubsurface1->parentSurface()->state().children.size(), 3);
590
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(serverSubsurface1->parentSurface()->state().children.at(0), serverSubsurface3);
591
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(serverSubsurface1->parentSurface()->state().children.at(1), serverSubsurface1);
592
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(serverSubsurface1->parentSurface()->state().children.at(2), serverSubsurface2);
593
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
594
595 1 void TestSubsurface::testDestroy()
596 {
597 // create two Surfaces
598 1 std::unique_ptr<Wrapland::Client::Surface> surface(m_compositor->createSurface());
599
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> parent(m_compositor->createSurface());
600 // create subsurface for surface of parent
601 1 std::unique_ptr<Wrapland::Client::SubSurface> subsurface(
602
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 m_subCompositor->createSubSurface(QPointer<Wrapland::Client::Surface>(surface.get()),
603
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QPointer<Wrapland::Client::Surface>(parent.get())));
604
605
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 connect(m_connection,
606 &Wrapland::Client::ConnectionThread::establishedChanged,
607 1 m_compositor,
608 1 &Wrapland::Client::Compositor::release);
609
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 connect(m_connection,
610 &Wrapland::Client::ConnectionThread::establishedChanged,
611 1 m_subCompositor,
612 1 &Wrapland::Client::SubCompositor::release);
613
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 connect(m_connection,
614 &Wrapland::Client::ConnectionThread::establishedChanged,
615 1 m_shm,
616 1 &Wrapland::Client::ShmPool::release);
617
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 connect(m_connection,
618 &Wrapland::Client::ConnectionThread::establishedChanged,
619 1 m_queue,
620 1 &Wrapland::Client::EventQueue::release);
621
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 connect(m_connection,
622 &Wrapland::Client::ConnectionThread::establishedChanged,
623 1 surface.get(),
624 1 &Wrapland::Client::Surface::release);
625
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 connect(m_connection,
626 &Wrapland::Client::ConnectionThread::establishedChanged,
627 1 parent.get(),
628 1 &Wrapland::Client::Surface::release);
629
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 connect(m_connection,
630 &Wrapland::Client::ConnectionThread::establishedChanged,
631 1 subsurface.get(),
632 1 &Wrapland::Client::SubSurface::release);
633
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(subsurface->isValid());
634
635
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 server = {};
636
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());
637
638 // Now the pool should be destroyed.
639
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(!subsurface->isValid());
640
641 // Calling destroy again should not fail.
642
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 subsurface->release();
643
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
644
645 1 void TestSubsurface::testCast()
646 {
647 // Create two Surfaces.
648 1 std::unique_ptr<Wrapland::Client::Surface> surface(m_compositor->createSurface());
649
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> parent(m_compositor->createSurface());
650
651 // Create subsurface for surface with parent.
652 1 std::unique_ptr<Wrapland::Client::SubSurface> subsurface(
653
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 m_subCompositor->createSubSurface(QPointer<Wrapland::Client::Surface>(surface.get()),
654
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QPointer<Wrapland::Client::Surface>(parent.get())));
655
656
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(Wrapland::Client::SubSurface::get(*(subsurface.get())),
657 QPointer<Wrapland::Client::SubSurface>(subsurface.get()));
658
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
659
660 1 void TestSubsurface::testSyncMode()
661 {
662 // this test verifies that state is only applied when the parent surface commits its pending
663 // state
664
665 1 QSignalSpy surfaceCreatedSpy(server.globals.compositor.get(),
666 &Wrapland::Server::Compositor::surfaceCreated);
667
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());
668
669
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> surface(m_compositor->createSurface());
670
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());
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 auto childSurface = surfaceCreatedSpy.first().first().value<Wrapland::Server::Surface*>();
672
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(childSurface);
673
674
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> parent(m_compositor->createSurface());
675
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());
676
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 parentSurface = surfaceCreatedSpy.last().first().value<Wrapland::Server::Surface*>();
677
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(parentSurface);
678
679
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy parent_commit_spy(parentSurface, &Wrapland::Server::Surface::committed);
680
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(parent_commit_spy.isValid());
681
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy subsurfaceTreeChangedSpy(parentSurface,
682 &Wrapland::Server::Surface::subsurfaceTreeChanged);
683
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(subsurfaceTreeChangedSpy.isValid());
684
685 // create subsurface for surface of parent
686 1 std::unique_ptr<Wrapland::Client::SubSurface> subsurface(
687
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 m_subCompositor->createSubSurface(QPointer<Wrapland::Client::Surface>(surface.get()),
688
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QPointer<Wrapland::Client::Surface>(parent.get())));
689
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(!subsurfaceTreeChangedSpy.wait(100));
690
691
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 parent->commit(Wrapland::Client::Surface::CommitFlag::None);
692
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(parent_commit_spy.wait());
693
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(subsurfaceTreeChangedSpy.count(), 0);
694
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(parentSurface->state().updates & Wrapland::Server::surface_change::children);
695
696 // let's damage the child surface
697
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy child_commit_spy(childSurface, &Wrapland::Server::Surface::committed);
698
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(child_commit_spy.isValid());
699
700
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QImage image(QSize(200, 200), QImage::Format_ARGB32_Premultiplied);
701
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 image.fill(Qt::black);
702
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 surface->attachBuffer(m_shm->createBuffer(image));
703
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 surface->damage(QRect(0, 0, 200, 200));
704
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 surface->commit();
705
706 // state should be applied when the parent surface's state gets applied
707
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(!child_commit_spy.wait(100));
708
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(!childSurface->state().buffer);
709
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 QVERIFY(!childSurface->isMapped());
711
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(!parentSurface->isMapped());
712
713
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QImage image2(QSize(400, 400), QImage::Format_ARGB32_Premultiplied);
714
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 image2.fill(Qt::red);
715
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 parent->attachBuffer(m_shm->createBuffer(image2));
716
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 parent->damage(QRect(0, 0, 400, 400));
717
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 parent->commit();
718
719
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(child_commit_spy.wait());
720
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(child_commit_spy.count(), 1);
721
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(subsurfaceTreeChangedSpy.count(), 0);
722
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(childSurface->state().buffer->shmImage()->createQImage(), image);
723
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(parentSurface->state().buffer->shmImage()->createQImage(), image2);
724
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(childSurface->isMapped());
725
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(parentSurface->isMapped());
726
727 // sending frame rendered to parent should also send it to child
728
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy frameRenderedSpy(surface.get(), &Wrapland::Client::Surface::frameRendered);
729
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());
730
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 parentSurface->frameRendered(100);
731
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());
732
733 // Unmapping the child is applied on parent surface commit.
734
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 surface->attachBuffer(Wrapland::Client::Buffer::Ptr());
735
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 surface->commit();
736
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(!child_commit_spy.wait(100));
737
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(childSurface->state().buffer);
738
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(subsurfaceTreeChangedSpy.count(), 0);
739
740
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 parent->commit(Wrapland::Client::Surface::CommitFlag::None);
741
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(parent_commit_spy.wait());
742
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(parentSurface->state().updates & Wrapland::Server::surface_change::children);
743
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(!childSurface->state().buffer);
744
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(subsurfaceTreeChangedSpy.count(), 0);
745
746 // Destroying the child on the other side is applied immediately.
747 1 subsurface.reset();
748
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(subsurfaceTreeChangedSpy.wait());
749
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
750
751 1 void TestSubsurface::testDeSyncMode()
752 {
753 // this test verifies that state gets applied immediately in desync mode
754
755 1 QSignalSpy surfaceCreatedSpy(server.globals.compositor.get(),
756 &Wrapland::Server::Compositor::surfaceCreated);
757
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());
758
759
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> surface(m_compositor->createSurface());
760
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());
761
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 childSurface = surfaceCreatedSpy.first().first().value<Wrapland::Server::Surface*>();
762
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(childSurface);
763
764
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> parent(m_compositor->createSurface());
765
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());
766
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 parentSurface = surfaceCreatedSpy.last().first().value<Wrapland::Server::Surface*>();
767
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(parentSurface);
768
769
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy parent_commit_spy(parentSurface, &Wrapland::Server::Surface::committed);
770
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(parent_commit_spy.isValid());
771
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy subsurfaceTreeChangedSpy(parentSurface,
772 &Wrapland::Server::Surface::subsurfaceTreeChanged);
773
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(subsurfaceTreeChangedSpy.isValid());
774
775 // create subsurface for surface of parent
776 1 std::unique_ptr<Wrapland::Client::SubSurface> subsurface(
777
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 m_subCompositor->createSubSurface(QPointer<Wrapland::Client::Surface>(surface.get()),
778
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QPointer<Wrapland::Client::Surface>(parent.get())));
779
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(!subsurfaceTreeChangedSpy.wait(100));
780
781
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 parent->commit(Wrapland::Client::Surface::CommitFlag::None);
782
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(parent_commit_spy.wait());
783
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(subsurfaceTreeChangedSpy.count(), 0);
784
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(parentSurface->state().updates & Wrapland::Server::surface_change::children);
785
786 // let's damage the child surface
787
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy child_commit_spy(childSurface, &Wrapland::Server::Surface::committed);
788
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(child_commit_spy.isValid());
789
790
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QImage image(QSize(200, 200), QImage::Format_ARGB32_Premultiplied);
791
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 image.fill(Qt::black);
792
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 surface->attachBuffer(m_shm->createBuffer(image));
793
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 surface->damage(QRect(0, 0, 200, 200));
794
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 surface->commit(Wrapland::Client::Surface::CommitFlag::None);
795
796 // state should be applied when the parent surface's state gets applied or when the subsurface
797 // switches to desync
798
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(!child_commit_spy.wait(100));
799
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(!childSurface->isMapped());
800
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(!parentSurface->isMapped());
801
802 // setting to desync should apply the state directly
803
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(child_commit_spy.isEmpty());
804
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 subsurface->setMode(Wrapland::Client::SubSurface::Mode::Desynchronized);
805
806
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(child_commit_spy.count() || child_commit_spy.wait());
807
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(child_commit_spy.count(), 1);
808
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(subsurfaceTreeChangedSpy.count(), 0);
809
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(childSurface->state().buffer->shmImage()->createQImage(), image);
810
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(!childSurface->isMapped());
811
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(!parentSurface->isMapped());
812
813 // and damaging again, should directly be applied
814
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 image.fill(Qt::red);
815
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 surface->attachBuffer(m_shm->createBuffer(image));
816
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 surface->damage(QRect(0, 0, 200, 200));
817
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 surface->commit(Wrapland::Client::Surface::CommitFlag::None);
818
819
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(child_commit_spy.wait());
820
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(child_commit_spy.count(), 2);
821
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(subsurfaceTreeChangedSpy.count(), 0);
822
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 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 QCOMPARE(childSurface->state().buffer->shmImage()->createQImage(), image);
823
824 // Destroying the child is applied immediately.
825 1 surface.reset();
826
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(subsurfaceTreeChangedSpy.wait());
827
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
828
829 1 void TestSubsurface::testMainSurfaceFromTree()
830 {
831 // this test verifies that in a tree of surfaces every surface has the same main surface
832 using namespace Wrapland::Client;
833 using namespace Wrapland::Server;
834 1 QSignalSpy surfaceCreatedSpy(server.globals.compositor.get(),
835 &Wrapland::Server::Compositor::surfaceCreated);
836
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());
837
838
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> parentSurface(m_compositor->createSurface());
839
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());
840
841
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 parentServerSurface = surfaceCreatedSpy.last().first().value<Wrapland::Server::Surface*>();
842
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(parentServerSurface);
843
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> childLevel1Surface(m_compositor->createSurface());
844
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());
845
846 1 auto childLevel1ServerSurface
847
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 = surfaceCreatedSpy.last().first().value<Wrapland::Server::Surface*>();
848
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(childLevel1ServerSurface);
849
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> childLevel2Surface(m_compositor->createSurface());
850
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());
851
852 1 auto childLevel2ServerSurface
853
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 = surfaceCreatedSpy.last().first().value<Wrapland::Server::Surface*>();
854
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(childLevel2ServerSurface);
855
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> childLevel3Surface(m_compositor->createSurface());
856
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());
857
858 1 auto childLevel3ServerSurface
859
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 = surfaceCreatedSpy.last().first().value<Wrapland::Server::Surface*>();
860
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(childLevel3ServerSurface);
861
862
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy parent_commit_spy(parentServerSurface, &Wrapland::Server::Surface::committed);
863
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(parent_commit_spy.isValid());
864
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy subsurfaceTreeChangedSpy(parentServerSurface,
865 &Wrapland::Server::Surface::subsurfaceTreeChanged);
866
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(subsurfaceTreeChangedSpy.isValid());
867
868
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* sub1 = m_subCompositor->createSubSurface(childLevel1Surface.get(), parentSurface.get());
869 1 auto* sub2
870
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 = m_subCompositor->createSubSurface(childLevel2Surface.get(), childLevel1Surface.get());
871 1 auto* sub3
872
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 = m_subCompositor->createSubSurface(childLevel3Surface.get(), childLevel2Surface.get());
873
874
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 childLevel2Surface->commit(Wrapland::Client::Surface::CommitFlag::None);
875
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 childLevel1Surface->commit(Wrapland::Client::Surface::CommitFlag::None);
876
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 parentSurface->commit(Wrapland::Client::Surface::CommitFlag::None);
877
878
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(parent_commit_spy.wait());
879
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(subsurfaceTreeChangedSpy.count(), 0);
880
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(parentServerSurface->state().updates & Wrapland::Server::surface_change::children);
881
882
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(parentServerSurface->state().children.size(), 1);
883
884
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 auto child = parentServerSurface->state().children.front();
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 QCOMPARE(child->parentSurface(), parentServerSurface);
886
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(child->mainSurface(), parentServerSurface);
887
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(child->surface()->state().children.size(), 1);
888
889
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 auto child2 = child->surface()->state().children.front();
890
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 QCOMPARE(child2->parentSurface(), child->surface());
891
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(child2->mainSurface(), parentServerSurface);
892
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(child2->surface()->state().children.size(), 1);
893
894
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 auto child3 = child2->surface()->state().children.front();
895
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 QCOMPARE(child3->parentSurface(), child2->surface());
896
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(child3->mainSurface(), parentServerSurface);
897
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(child3->surface()->state().children.size(), 0);
898
899
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 delete sub1;
900
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 delete sub2;
901
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 delete sub3;
902
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
903
904 1 void TestSubsurface::testRemoveSurface()
905 {
906 // this test verifies that removing the surface also removes the sub-surface from the parent
907 using namespace Wrapland::Client;
908 using namespace Wrapland::Server;
909
910 1 QSignalSpy surfaceCreatedSpy(server.globals.compositor.get(),
911 &Wrapland::Server::Compositor::surfaceCreated);
912
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());
913
914
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> parentSurface(m_compositor->createSurface());
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(surfaceCreatedSpy.wait());
916
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 parentServerSurface = surfaceCreatedSpy.last().first().value<Wrapland::Server::Surface*>();
917
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(parentServerSurface);
918
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> childSurface(m_compositor->createSurface());
919
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());
920
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 childServerSurface = surfaceCreatedSpy.last().first().value<Wrapland::Server::Surface*>();
921
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(childServerSurface);
922
923
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy parent_commit_spy(parentServerSurface, &Wrapland::Server::Surface::committed);
924
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(parent_commit_spy.isValid());
925
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy subsurfaceTreeChangedSpy(parentServerSurface,
926 &Wrapland::Server::Surface::subsurfaceTreeChanged);
927
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(subsurfaceTreeChangedSpy.isValid());
928
929 1 std::unique_ptr<Wrapland::Client::SubSurface> sub(
930
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 m_subCompositor->createSubSurface(childSurface.get(), parentSurface.get()));
931
932
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 parentSurface->commit(Wrapland::Client::Surface::CommitFlag::None);
933
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(parent_commit_spy.wait());
934
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(subsurfaceTreeChangedSpy.count(), 0);
935
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(parentServerSurface->state().updates & Wrapland::Server::surface_change::children);
936
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(parentServerSurface->state().children.size(), 1);
937
938 // destroy surface, takes place immediately
939 1 childSurface.reset();
940
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(subsurfaceTreeChangedSpy.wait());
941
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(parentServerSurface->state().children.size(), 0);
942
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
943
944 1 void TestSubsurface::testMappingOfSurfaceTree()
945 {
946 // this test verifies mapping and unmapping of a sub-surface tree
947 using namespace Wrapland::Client;
948 using namespace Wrapland::Server;
949 1 QSignalSpy surfaceCreatedSpy(server.globals.compositor.get(),
950 &Wrapland::Server::Compositor::surfaceCreated);
951
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());
952
953
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> parentSurface(m_compositor->createSurface());
954
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());
955
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 parentServerSurface = surfaceCreatedSpy.last().first().value<Wrapland::Server::Surface*>();
956
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QVERIFY(parentServerSurface);
957
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> childLevel1Surface(m_compositor->createSurface());
958
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());
959 1 auto childLevel1ServerSurface
960
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 = surfaceCreatedSpy.last().first().value<Wrapland::Server::Surface*>();
961
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QVERIFY(childLevel1ServerSurface);
962
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> childLevel2Surface(m_compositor->createSurface());
963
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());
964 1 auto childLevel2ServerSurface
965
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 = surfaceCreatedSpy.last().first().value<Wrapland::Server::Surface*>();
966
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(childLevel2ServerSurface);
967
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> childLevel3Surface(m_compositor->createSurface());
968
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());
969 1 auto childLevel3ServerSurface
970
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 = surfaceCreatedSpy.last().first().value<Wrapland::Server::Surface*>();
971
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(childLevel3ServerSurface);
972
973
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy parent_commit_spy(parentServerSurface, &Wrapland::Server::Surface::committed);
974
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(parent_commit_spy.isValid());
975
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy subsurfaceTreeChangedSpy(parentServerSurface,
976 &Wrapland::Server::Surface::subsurfaceTreeChanged);
977
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(subsurfaceTreeChangedSpy.isValid());
978
979 1 auto subsurfaceLevel1
980
3/6
✓ 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.
1 = m_subCompositor->createSubSurface(childLevel1Surface.get(), parentSurface.get());
981 1 auto subsurfaceLevel2
982
3/6
✓ 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.
1 = m_subCompositor->createSubSurface(childLevel2Surface.get(), childLevel1Surface.get());
983 1 auto subsurfaceLevel3
984
3/6
✓ 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.
1 = m_subCompositor->createSubSurface(childLevel3Surface.get(), childLevel2Surface.get());
985
986
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 childLevel3Surface->commit(Wrapland::Client::Surface::CommitFlag::None);
987
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 childLevel2Surface->commit(Wrapland::Client::Surface::CommitFlag::None);
988
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 childLevel1Surface->commit(Wrapland::Client::Surface::CommitFlag::None);
989
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 parentSurface->commit(Wrapland::Client::Surface::CommitFlag::None);
990
991
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(parent_commit_spy.wait());
992
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QCOMPARE(subsurfaceTreeChangedSpy.count(), 0);
993
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(parentServerSurface->state().updates & Wrapland::Server::surface_change::children);
994
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(parentServerSurface->state().children.size(), 1);
995
996
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(parentServerSurface->state().children.size(), 1);
997
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 auto child = parentServerSurface->state().children.front();
998
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(child->surface()->state().children.size(), 1);
999
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 auto child2 = child->surface()->state().children.front();
1000
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(child2->surface()->state().children.size(), 1);
1001
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 auto child3 = child2->surface()->state().children.front();
1002
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(child3->parentSurface(), child2->surface());
1003
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(child3->mainSurface(), parentServerSurface);
1004
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(child3->surface()->state().children.size(), 0);
1005
1006 // So far no surface is mapped.
1007
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(!parentServerSurface->isMapped());
1008
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(!child->surface()->isMapped());
1009
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(!child2->surface()->isMapped());
1010
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(!child3->surface()->isMapped());
1011
1012 // First set all subsurfaces to desync to simplify.
1013
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 subsurfaceLevel1->setMode(Wrapland::Client::SubSurface::Mode::Desynchronized);
1014
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 subsurfaceLevel2->setMode(Wrapland::Client::SubSurface::Mode::Desynchronized);
1015
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 subsurfaceLevel3->setMode(Wrapland::Client::SubSurface::Mode::Desynchronized);
1016
1017
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QImage image(QSize(200, 200), QImage::Format_ARGB32_Premultiplied);
1018
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 image.fill(Qt::black);
1019
1020 // Attach a buffer to the first child. Should not map.
1021
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QSignalSpy child1_commit_spy(child->surface(), &Wrapland::Server::Surface::committed);
1022
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(child1_commit_spy.isValid());
1023
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 childLevel1Surface->attachBuffer(m_shm->createBuffer(image));
1024
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 childLevel1Surface->damage(QRect(0, 0, 200, 200));
1025
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 childLevel1Surface->commit(Wrapland::Client::Surface::CommitFlag::None);
1026
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(child1_commit_spy.wait());
1027
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(child->surface()->state().buffer);
1028
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(!child->surface()->isMapped());
1029
1030 // Attach a buffer to the third child. Should not map.
1031
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QSignalSpy child3_commit_spy(child3->surface(), &Wrapland::Server::Surface::committed);
1032
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(child3_commit_spy.isValid());
1033
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 childLevel3Surface->attachBuffer(m_shm->createBuffer(image));
1034
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 childLevel3Surface->damage(QRect(0, 0, 200, 200));
1035
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 childLevel3Surface->commit(Wrapland::Client::Surface::CommitFlag::None);
1036
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(child3_commit_spy.wait());
1037
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(child3->surface()->state().buffer);
1038
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(!child3->surface()->isMapped());
1039
1040 // Map the top level.
1041
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy commit_spy(parentServerSurface, &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
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 parentSurface->attachBuffer(m_shm->createBuffer(image));
1044
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 parentSurface->damage(QRect(0, 0, 200, 200));
1045
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 parentSurface->commit(Wrapland::Client::Surface::CommitFlag::None);
1046
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());
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(parentServerSurface->isMapped());
1048
1049 // First child should now be mapped automatically too but not second or third one.
1050
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(child->surface()->isMapped());
1051
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(!child2->surface()->isMapped());
1052
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(!child3->surface()->isMapped());
1053
1054 // Now map the second level. This should automatically also map the thrid one.
1055
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QSignalSpy child2_commit_spy(child2->surface(), &Wrapland::Server::Surface::committed);
1056
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(child2_commit_spy.isValid());
1057
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 childLevel2Surface->attachBuffer(m_shm->createBuffer(image));
1058
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 childLevel2Surface->damage(QRect(0, 0, 200, 200));
1059
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 childLevel2Surface->commit(Wrapland::Client::Surface::CommitFlag::None);
1060
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(child2_commit_spy.wait());
1061
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(parentServerSurface->isMapped());
1062
1063 // Everything is mapped now.
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(parentServerSurface->isMapped());
1065
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(child->surface()->isMapped());
1066
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(child2->surface()->isMapped());
1067
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(child3->surface()->isMapped());
1068
1069 // Unmapping a parent should unmap the complete tree.
1070
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 childLevel2Surface->attachBuffer(Wrapland::Client::Buffer::Ptr());
1071
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 childLevel2Surface->damage(QRect(0, 0, 200, 200));
1072
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 childLevel2Surface->commit(Wrapland::Client::Surface::CommitFlag::None);
1073
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(child2_commit_spy.wait());
1074
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(parentServerSurface->isMapped());
1076
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(child->surface()->isMapped());
1077
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(!child2->surface()->isMapped());
1078
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(!child3->surface()->isMapped());
1079
1080
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 delete subsurfaceLevel1;
1081
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 delete subsurfaceLevel2;
1082
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 delete subsurfaceLevel3;
1083
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
1084
1085 1 void TestSubsurface::testSurfaceAt()
1086 {
1087 // This test verifies that the correct surface is picked in a subsurface tree.
1088 //
1089 // -----------------------------
1090 // | |
1091 // | grandchild1(50x50) |
1092 // | |
1093 // | |
1094 // | |-----------------------------------------
1095 // | | | |
1096 // | | | |
1097 // | | | |
1098 // | | | |
1099 // ----------------------------- | |
1100 // | | |
1101 // | child1(75x75) | |
1102 // | | |
1103 // | | |
1104 // | ------------------------------------------
1105 // | | |
1106 // | | child2(75x75) |
1107 // | | |
1108 // |----------------------------| -----------------------------|
1109 // | | | | |
1110 // | | | input1 | grandhchild2 |
1111 // | parent(100x100) | | (25x25) | (50x50) |
1112 // | | | | |
1113 // ----------------------------| |--------------+--------------|
1114 // | | | |
1115 // | | | input2 |
1116 // | | | (25x25) |
1117 // | | | |
1118 // ------------------------------------------
1119 //
1120
1121 1 QImage parentimage(QSize(100, 100), QImage::Format_ARGB32_Premultiplied);
1122
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 parentimage.fill(Qt::red);
1123
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QImage childImage(QSize(75, 75), QImage::Format_ARGB32_Premultiplied);
1124
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 childImage.fill(Qt::green);
1125
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QImage grandchildImage(QSize(50, 50), QImage::Format_ARGB32_Premultiplied);
1126
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 childImage.fill(Qt::blue);
1127
1128 // First create a parent surface and map it.
1129
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy serverSurfaceCreated(server.globals.compositor.get(),
1130 &Wrapland::Server::Compositor::surfaceCreated);
1131
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(serverSurfaceCreated.isValid());
1132
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> parent(m_compositor->createSurface());
1133
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 parent->attachBuffer(m_shm->createBuffer(parentimage));
1134
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 parent->damage(QRect(0, 0, 100, 100));
1135
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 parent->commit(Wrapland::Client::Surface::CommitFlag::None);
1136
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());
1137
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 serverParent = serverSurfaceCreated.last().first().value<Wrapland::Server::Surface*>();
1138
1139 // Create two child subsurfaces, just added to the parent this is to simulate the behavior of
1140 // QtWayland (might have changed in the meantime).
1141
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> child1(m_compositor->createSurface());
1142
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());
1143
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 serverChild1 = serverSurfaceCreated.last().first().value<Wrapland::Server::Surface*>();
1144
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 QVERIFY(serverChild1);
1145
1146
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> child2(m_compositor->createSurface());
1147
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());
1148
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 serverChild2 = serverSurfaceCreated.last().first().value<Wrapland::Server::Surface*>();
1149
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 QVERIFY(serverChild2);
1150
1151 // Create the subsurfaces for the children.
1152 1 std::unique_ptr<Wrapland::Client::SubSurface> child1Sub(
1153
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 m_subCompositor->createSubSurface(child1.get(), parent.get()));
1154
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 child1Sub->setMode(Wrapland::Client::SubSurface::Mode::Desynchronized);
1155
1156
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 child1->attachBuffer(m_shm->createBuffer(childImage));
1157
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 child1->damage(QRect(0, 0, 75, 75));
1158
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 child1->commit(Wrapland::Client::Surface::CommitFlag::None);
1159
1160 // Note: child2Sub is initially above child1Sub since it is added after.
1161 1 std::unique_ptr<Wrapland::Client::SubSurface> child2Sub(
1162
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 m_subCompositor->createSubSurface(child2.get(), parent.get()));
1163
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 child2Sub->setMode(Wrapland::Client::SubSurface::Mode::Desynchronized);
1164
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 child2Sub->setPosition(QPoint(50, 50));
1165
1166
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 child2->attachBuffer(m_shm->createBuffer(childImage));
1167
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 child2->damage(QRect(0, 0, 75, 75));
1168
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 child2->commit(Wrapland::Client::Surface::CommitFlag::None);
1169
1170 // Each of the children gets a child.
1171
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> grandchild1(m_compositor->createSurface());
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 QVERIFY(serverSurfaceCreated.wait());
1173 1 auto serverGrandchild1
1174
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 = serverSurfaceCreated.last().first().value<Wrapland::Server::Surface*>();
1175
1176
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> grandchild2(m_compositor->createSurface());
1177
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());
1178 1 auto serverGrandchild2
1179
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 = serverSurfaceCreated.last().first().value<Wrapland::Server::Surface*>();
1180
1181 // Create subsurfaces for the grandchildren.
1182 1 std::unique_ptr<Wrapland::Client::SubSurface> grandchild1Sub(
1183
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 m_subCompositor->createSubSurface(grandchild1.get(), child1.get()));
1184
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 grandchild1Sub->setMode(Wrapland::Client::SubSurface::Mode::Desynchronized);
1185
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 grandchild1Sub->setPosition(QPoint(-25, -25));
1186
1187 1 std::unique_ptr<Wrapland::Client::SubSurface> grandchild2Sub(
1188
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 m_subCompositor->createSubSurface(grandchild2.get(), child2.get()));
1189
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 grandchild2Sub->setMode(Wrapland::Client::SubSurface::Mode::Desynchronized);
1190
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 grandchild2Sub->setPosition(QPoint(25, 25));
1191
1192 // Now let's render both grandchildren.
1193
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 grandchild1->attachBuffer(m_shm->createBuffer(grandchildImage));
1194
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 grandchild1->damage(QRect(0, 0, 50, 50));
1195
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 grandchild1->commit(Wrapland::Client::Surface::CommitFlag::None);
1196
1197 // Second grandchild's input region is subdivided into quadrants, with input mask on the top
1198 // left and bottom right.
1199
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QRegion region;
1200
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 region += QRect(0, 0, 25, 25);
1201
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 region += QRect(25, 25, 25, 25);
1202
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 grandchild2->setInputRegion(m_compositor->createRegion(region).get());
1203
1204
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 grandchild2->attachBuffer(m_shm->createBuffer(grandchildImage));
1205
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 grandchild2->damage(QRect(0, 0, 50, 50));
1206
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 grandchild2->commit(Wrapland::Client::Surface::CommitFlag::None);
1207
1208
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy parent_commit_spy(serverParent, &Wrapland::Server::Surface::committed);
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(parent_commit_spy.isValid());
1210
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 parent->commit(Wrapland::Client::Surface::CommitFlag::None);
1211
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(parent_commit_spy.wait());
1212
1213
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 QCOMPARE(serverChild1->subsurface()->parentSurface(), serverParent);
1214
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(serverChild2->subsurface()->parentSurface(), serverParent);
1215
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 QCOMPARE(serverGrandchild1->subsurface()->parentSurface(), serverChild1);
1216
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(serverGrandchild2->subsurface()->parentSurface(), serverChild2);
1217
1218
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(serverChild1->isMapped());
1219
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(serverChild2->isMapped());
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 QVERIFY(serverGrandchild1->isMapped());
1221
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(serverGrandchild2->isMapped());
1222
1223
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy commit_spy(serverParent, &Wrapland::Server::Surface::committed);
1224
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(commit_spy.isValid());
1225
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 parent->commit(Wrapland::Client::Surface::CommitFlag::None);
1226
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());
1227
1228 namespace WST = Wrapland::Server::Test;
1229
1230 // Now test some positions.
1231 // Around top-left.
1232
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(!WST::surface_at(serverParent, QPointF(-26, -25)));
1233
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(!WST::surface_at(serverParent, QPointF(-25, -26)));
1234
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(WST::surface_at(serverParent, QPointF(-25, -25)), serverGrandchild1);
1235
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(WST::surface_at(serverParent, QPointF(0, 0)), serverGrandchild1);
1236
1237 // Around middle.
1238
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(WST::surface_at(serverParent, QPointF(49, 49)), serverChild1);
1239
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(WST::surface_at(serverParent, QPointF(49, 75)), serverChild1);
1240
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(WST::surface_at(serverParent, QPointF(75, 49)), serverChild1);
1241
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(WST::surface_at(serverParent, QPointF(76, 49)), serverParent);
1242
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(WST::surface_at(serverParent, QPointF(49, 76)), serverParent);
1243
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(WST::surface_at(serverParent, QPointF(49, 100)), serverParent);
1244
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(WST::surface_at(serverParent, QPointF(100, 49)), serverParent);
1245
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(WST::surface_at(serverParent, QPointF(50, 50)), serverChild2);
1246
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(WST::surface_at(serverParent, QPointF(100, 50)), serverChild2);
1247
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(WST::surface_at(serverParent, QPointF(50, 100)), serverChild2);
1248
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(WST::surface_at(serverParent, QPointF(75, 75)), serverGrandchild2);
1249
1250 // Around bottom-right.
1251
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(WST::surface_at(serverParent, QPointF(100, 100)), serverGrandchild2);
1252
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(WST::surface_at(serverParent, QPointF(125, 100)), serverGrandchild2);
1253
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(WST::surface_at(serverParent, QPointF(100, 125)), serverGrandchild2);
1254
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(!WST::surface_at(serverParent, QPointF(126, 125)));
1255
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(!WST::surface_at(serverParent, QPointF(125, 126)));
1256
1257 // Now test some input positions.
1258 // Around top-left.
1259
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(!WST::input_surface_at(serverParent, QPointF(-26, -25)));
1260
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(!WST::input_surface_at(serverParent, QPointF(-25, -26)));
1261
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(WST::input_surface_at(serverParent, QPointF(-25, -25)), serverGrandchild1);
1262
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(WST::input_surface_at(serverParent, QPointF(0, 0)), serverGrandchild1);
1263
1264 // Around middle.
1265
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(WST::input_surface_at(serverParent, QPointF(49, 49)), serverChild1);
1266
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(WST::input_surface_at(serverParent, QPointF(49, 75)), serverChild1);
1267
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(WST::input_surface_at(serverParent, QPointF(75, 49)), serverChild1);
1268
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(WST::input_surface_at(serverParent, QPointF(76, 49)), serverParent);
1269
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(WST::input_surface_at(serverParent, QPointF(49, 76)), serverParent);
1270
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(WST::input_surface_at(serverParent, QPointF(49, 100)), serverParent);
1271
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(WST::input_surface_at(serverParent, QPointF(100, 49)), serverParent);
1272
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(WST::input_surface_at(serverParent, QPointF(50, 50)), serverChild2);
1273
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(WST::input_surface_at(serverParent, QPointF(100, 50)), serverChild2);
1274
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(WST::input_surface_at(serverParent, QPointF(50, 100)), serverChild2);
1275
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(WST::input_surface_at(serverParent, QPointF(75, 75)), serverGrandchild2);
1276
1277 // Around bottom-right.
1278
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(WST::input_surface_at(serverParent, QPointF(99, 99)), serverGrandchild2);
1279
1280 // In Qt QRegions do not contain the right and bottom edge.
1281
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(WST::input_surface_at(serverParent, QPointF(99, 100)), serverChild2);
1282
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(WST::input_surface_at(serverParent, QPointF(100, 99)), serverChild2);
1283
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(WST::input_surface_at(serverParent, QPointF(125, 100)), serverChild2);
1284
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(WST::input_surface_at(serverParent, QPointF(100, 125)), serverChild2);
1285
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(WST::input_surface_at(serverParent, QPointF(125, 125)), serverChild2);
1286
1287
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(WST::input_surface_at(serverParent, QPointF(99, 101)), serverChild2);
1288
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(WST::input_surface_at(serverParent, QPointF(101, 99)), serverChild2);
1289
1290
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(WST::input_surface_at(serverParent, QPointF(75, 75)), serverGrandchild2);
1291
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(WST::input_surface_at(serverParent, QPointF(100, 100)), serverGrandchild2);
1292
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(WST::input_surface_at(serverParent, QPointF(101, 100)), serverGrandchild2);
1293
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(WST::input_surface_at(serverParent, QPointF(100, 101)), serverGrandchild2);
1294
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(WST::input_surface_at(serverParent, QPointF(101, 101)), serverGrandchild2);
1295
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(WST::input_surface_at(serverParent, QPointF(124, 124)), serverGrandchild2);
1296
1297
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(!WST::input_surface_at(serverParent, QPointF(126, 125)));
1298
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(!WST::input_surface_at(serverParent, QPointF(125, 126)));
1299
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
1300
1301 1 void TestSubsurface::testDestroyAttachedBuffer()
1302 {
1303 // this test verifies that destroying of a buffer attached to a sub-surface works
1304 using namespace Wrapland::Client;
1305 using namespace Wrapland::Server;
1306 // create surface
1307 1 QSignalSpy serverSurfaceCreated(server.globals.compositor.get(),
1308 &Wrapland::Server::Compositor::surfaceCreated);
1309
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());
1310
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> parent(m_compositor->createSurface());
1311
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());
1312
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> child(m_compositor->createSurface());
1313
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());
1314 1 auto serverChildSurface
1315
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 = serverSurfaceCreated.last().first().value<Wrapland::Server::Surface*>();
1316 // create sub-surface
1317
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* sub = m_subCompositor->createSubSurface(child.get(), parent.get());
1318
1319 // let's damage this surface, will be in sub-surface pending state
1320
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QImage image(QSize(100, 100), QImage::Format_ARGB32_Premultiplied);
1321
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 image.fill(Qt::red);
1322
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 child->attachBuffer(m_shm->createBuffer(image));
1323
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 child->damage(QRect(0, 0, 100, 100));
1324
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 child->commit(Wrapland::Client::Surface::CommitFlag::None);
1325
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 m_connection->flush();
1326
1327 // Let's try to destroy it
1328
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy destroySpy(serverChildSurface, &QObject::destroyed);
1329
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());
1330
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 delete m_shm;
1331 1 m_shm = nullptr;
1332 1 child.reset();
1333
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(destroySpy.wait());
1334
1335
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 delete sub;
1336
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
1337
1338 1 void TestSubsurface::testDestroyParentSurface()
1339 {
1340 // this test verifies that destroying a parent surface does not create problems
1341 // see BUG 389231
1342 using namespace Wrapland::Client;
1343 using namespace Wrapland::Server;
1344 // create surface
1345 1 QSignalSpy serverSurfaceCreated(server.globals.compositor.get(),
1346 &Wrapland::Server::Compositor::surfaceCreated);
1347
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());
1348
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> parent(m_compositor->createSurface());
1349
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());
1350 1 auto serverParentSurface
1351
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 = serverSurfaceCreated.last().first().value<Wrapland::Server::Surface*>();
1352
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> child(m_compositor->createSurface());
1353
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());
1354 1 auto serverChildSurface
1355
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 = serverSurfaceCreated.last().first().value<Wrapland::Server::Surface*>();
1356
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 std::unique_ptr<Wrapland::Client::Surface> grandChild(m_compositor->createSurface());
1357
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());
1358 1 auto serverGrandChildSurface
1359
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 = serverSurfaceCreated.last().first().value<Wrapland::Server::Surface*>();
1360 // create sub-surface in desynchronized mode as Qt uses them
1361
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 sub1 = m_subCompositor->createSubSurface(child.get(), parent.get());
1362
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 sub1->setMode(Wrapland::Client::SubSurface::Mode::Desynchronized);
1363
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 sub2 = m_subCompositor->createSubSurface(grandChild.get(), child.get());
1364
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 sub2->setMode(Wrapland::Client::SubSurface::Mode::Desynchronized);
1365
1366 // let's damage this surface
1367 // and at the same time delete the parent surface
1368 1 parent.reset();
1369
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy parentDestroyedSpy(serverParentSurface, &QObject::destroyed);
1370
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(parentDestroyedSpy.isValid());
1371
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(parentDestroyedSpy.wait());
1372
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QImage image(QSize(100, 100), QImage::Format_ARGB32_Premultiplied);
1373
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 image.fill(Qt::red);
1374
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 grandChild->attachBuffer(m_shm->createBuffer(image));
1375
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 grandChild->damage(QRect(0, 0, 100, 100));
1376
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 grandChild->commit(Wrapland::Client::Surface::CommitFlag::None);
1377
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy commit_spy(serverGrandChildSurface, &Wrapland::Server::Surface::committed);
1378
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());
1379
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());
1380
1381 // Let's try to destroy it
1382
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 QSignalSpy destroySpy(serverChildSurface, &QObject::destroyed);
1383
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());
1384 1 child.reset();
1385
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(destroySpy.wait());
1386
1387
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 delete sub1;
1388
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 delete sub2;
1389
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 }
1390
1391
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(TestSubsurface)
1392 #include "subsurface.moc"
1393