KWin
Loading...
Searching...
No Matches
mock_drm.h
Go to the documentation of this file.
1/*
2 KWin - the KDE window manager
3 This file is part of the KDE project.
4
5 SPDX-FileCopyrightText: 2022 Xaver Hugl <xaver.hugl@gmail.com>
6
7 SPDX-License-Identifier: GPL-2.0-or-later
8*/
9#pragma once
10
11#include <xf86drm.h>
12#include <xf86drmMode.h>
13
14#include <QList>
15#include <QMap>
16#include <QRect>
17#include <memory>
18#include <mutex>
19#include <vector>
20
21class MockGpu;
22class MockFb;
23class MockCrtc;
24class MockEncoder;
25class MockObject;
26class MockPlane;
27
29public:
30 MockProperty(MockObject *obj, QString name, uint64_t initialValue, uint32_t flags, QList<QByteArray> enums = {});
31 ~MockProperty() = default;
32
34 uint32_t id;
35 uint32_t flags;
36 QString name;
37 uint64_t value;
38 QList<QByteArray> enums;
39};
40
42public:
43 MockPropertyBlob(MockGpu *gpu, const void *data, size_t size);
45
47 uint32_t id;
48 void *data;
49 size_t size;
50};
51
53public:
55 virtual ~MockObject();
56
57 uint64_t getProp(const QString &propName) const;
58 void setProp(const QString &propName, uint64_t value);
59
60 uint32_t getPropId(const QString &propName) const;
61
62 uint32_t id;
63 QList<MockProperty> props;
65};
66
67class MockConnector : public MockObject {
68public:
69 MockConnector(MockGpu *gpu, bool nonDesktop = false);
70 MockConnector(const MockConnector &obj) = default;
71 ~MockConnector() = default;
72
73 void addMode(uint32_t width, uint32_t height, float refreshRate, bool preferred = false);
74
75 drmModeConnection connection;
76 uint32_t type;
77 std::shared_ptr<MockEncoder> encoder;
78 QList<drmModeModeInfo> modes;
79};
80
81class MockEncoder : public MockObject {
82public:
84 MockEncoder(const MockEncoder &obj) = default;
85 ~MockEncoder() = default;
86
87 MockCrtc *crtc = nullptr;
89 uint32_t possible_clones = 0;
90};
91
92class MockCrtc : public MockObject {
93public:
94 MockCrtc(MockGpu *gpu, const std::shared_ptr<MockPlane> &legacyPlane, int pipeIndex, int gamma_size = 255);
95 MockCrtc(const MockCrtc &obj) = default;
96 ~MockCrtc() = default;
97
100 drmModeModeInfo mode;
101 bool modeValid = true;
102 MockFb *currentFb = nullptr;
103 MockFb *nextFb = nullptr;
105 std::shared_ptr<MockPlane> legacyPlane;
106};
107
108enum class PlaneType {
109 Primary = 0,
110 Overlay,
111 Cursor
112};
113
114class MockPlane : public MockObject {
115public:
116 MockPlane(MockGpu *gpu, PlaneType type, int crtcIndex);
117 MockPlane(const MockPlane &obj) = default;
118 ~MockPlane() = default;
119
120 MockFb *currentFb = nullptr;
121 MockFb *nextFb = nullptr;
124};
125
126class MockFb {
127public:
128 MockFb(MockGpu *gpu, uint32_t width, uint32_t height);
129 ~MockFb();
130
131 uint32_t id;
132 uint32_t width, height;
134};
135
136struct Prop {
137 uint32_t obj;
138 uint32_t prop;
139 uint64_t value;
140};
141
143 bool legacyEmulation = false;
144 QList<Prop> props;
145};
146
147#define MOCKDRM_DEVICE_CAP_ATOMIC 0xFF
148
149class MockGpu {
150public:
151 MockGpu(int fd, const QString &devNode, int numCrtcs, int gammaSize = 255);
152 ~MockGpu();
153
155 MockCrtc *findCrtc(uint32_t id) const;
156 MockPlane *findPlane(uint32_t id) const;
158
159 void flipPage(uint32_t crtcId);
160
161 int fd;
166
168 QList<MockObject *> objects;
169
170 QList<std::shared_ptr<MockConnector>> connectors;
171 QList<drmModeConnectorPtr> drmConnectors;
172
173 QList<std::shared_ptr<MockEncoder>> encoders;
174 QList<drmModeEncoderPtr> drmEncoders;
175
176 QList<std::shared_ptr<MockCrtc>> crtcs;
177 QList<drmModeCrtcPtr> drmCrtcs;
178
179 QList<std::shared_ptr<MockPlane>> planes;
180 QList<drmModePlanePtr> drmPlanes;
181
182 QList<MockFb *> fbs;
183 std::vector<std::unique_ptr<MockPropertyBlob>> propertyBlobs;
184
185 QList<drmModeResPtr> resPtrs;
186 QList<drmModePropertyPtr> drmProps;
187 QList<drmModePropertyBlobPtr> drmPropertyBlobs;
188 QList<drmModeObjectPropertiesPtr> drmObjectProperties;
189 QList<drmModePlaneResPtr> drmPlaneRes;
190 std::mutex m_mutex;
191};
192
193
194
std::shared_ptr< MockEncoder > encoder
Definition mock_drm.h:77
~MockConnector()=default
uint32_t type
Definition mock_drm.h:76
MockConnector(MockGpu *gpu, bool nonDesktop=false)
Definition mock_drm.cpp:167
QList< drmModeModeInfo > modes
Definition mock_drm.h:78
void addMode(uint32_t width, uint32_t height, float refreshRate, bool preferred=false)
Definition mock_drm.cpp:186
MockConnector(const MockConnector &obj)=default
drmModeConnection connection
Definition mock_drm.h:75
bool modeValid
Definition mock_drm.h:101
drmModeModeInfo mode
Definition mock_drm.h:100
int gamma_size
Definition mock_drm.h:99
MockFb * nextFb
Definition mock_drm.h:103
MockFb * currentFb
Definition mock_drm.h:102
~MockCrtc()=default
int pipeIndex
Definition mock_drm.h:98
std::shared_ptr< MockPlane > legacyPlane
Definition mock_drm.h:105
MockCrtc(const MockCrtc &obj)=default
QRect cursorRect
Definition mock_drm.h:104
MockCrtc(MockGpu *gpu, const std::shared_ptr< MockPlane > &legacyPlane, int pipeIndex, int gamma_size=255)
Definition mock_drm.cpp:217
uint32_t possible_crtcs
Definition mock_drm.h:88
MockEncoder(const MockEncoder &obj)=default
MockCrtc * crtc
Definition mock_drm.h:87
~MockEncoder()=default
MockEncoder(MockGpu *gpu, uint32_t possible_crtcs)
Definition mock_drm.cpp:253
uint32_t possible_clones
Definition mock_drm.h:89
uint32_t height
Definition mock_drm.h:132
MockGpu * gpu
Definition mock_drm.h:133
uint32_t width
Definition mock_drm.h:132
MockFb(MockGpu *gpu, uint32_t width, uint32_t height)
Definition mock_drm.cpp:262
uint32_t id
Definition mock_drm.h:131
QMap< uint32_t, uint64_t > deviceCaps
Definition mock_drm.h:165
QList< std::shared_ptr< MockCrtc > > crtcs
Definition mock_drm.h:176
QList< drmModeResPtr > resPtrs
Definition mock_drm.h:185
std::mutex m_mutex
Definition mock_drm.h:190
QList< drmModePlanePtr > drmPlanes
Definition mock_drm.h:180
QList< MockFb * > fbs
Definition mock_drm.h:182
uint32_t idCounter
Definition mock_drm.h:167
QList< drmModeConnectorPtr > drmConnectors
Definition mock_drm.h:171
std::vector< std::unique_ptr< MockPropertyBlob > > propertyBlobs
Definition mock_drm.h:183
QByteArray name
Definition mock_drm.h:163
QList< drmModePropertyPtr > drmProps
Definition mock_drm.h:186
QList< std::shared_ptr< MockEncoder > > encoders
Definition mock_drm.h:173
QList< drmModeObjectPropertiesPtr > drmObjectProperties
Definition mock_drm.h:188
QList< std::shared_ptr< MockPlane > > planes
Definition mock_drm.h:179
QList< drmModePropertyBlobPtr > drmPropertyBlobs
Definition mock_drm.h:187
QMap< uint32_t, uint64_t > clientCaps
Definition mock_drm.h:164
QList< drmModePlaneResPtr > drmPlaneRes
Definition mock_drm.h:189
MockCrtc * findCrtc(uint32_t id) const
Definition mock_drm.cpp:67
MockPlane * findPlane(uint32_t id) const
Definition mock_drm.cpp:73
QString devNode
Definition mock_drm.h:162
void flipPage(uint32_t crtcId)
Definition mock_drm.cpp:79
QList< drmModeCrtcPtr > drmCrtcs
Definition mock_drm.h:177
MockGpu(int fd, const QString &devNode, int numCrtcs, int gammaSize=255)
Definition mock_drm.cpp:31
QList< std::shared_ptr< MockConnector > > connectors
Definition mock_drm.h:170
MockConnector * findConnector(uint32_t id) const
Definition mock_drm.cpp:61
QList< MockObject * > objects
Definition mock_drm.h:168
QList< drmModeEncoderPtr > drmEncoders
Definition mock_drm.h:174
MockPropertyBlob * getBlob(uint32_t id) const
Definition mock_drm.cpp:53
int fd
Definition mock_drm.h:161
uint64_t getProp(const QString &propName) const
Definition mock_drm.cpp:105
QList< MockProperty > props
Definition mock_drm.h:63
uint32_t getPropId(const QString &propName) const
Definition mock_drm.cpp:126
uint32_t id
Definition mock_drm.h:62
virtual ~MockObject()
Definition mock_drm.cpp:100
MockObject(MockGpu *gpu)
Definition mock_drm.cpp:93
void setProp(const QString &propName, uint64_t value)
Definition mock_drm.cpp:115
MockGpu * gpu
Definition mock_drm.h:64
MockFb * currentFb
Definition mock_drm.h:120
MockPlane(MockGpu *gpu, PlaneType type, int crtcIndex)
Definition mock_drm.cpp:232
MockPlane(const MockPlane &obj)=default
PlaneType type
Definition mock_drm.h:123
MockFb * nextFb
Definition mock_drm.h:121
int possibleCrtcs
Definition mock_drm.h:122
~MockPlane()=default
MockPropertyBlob(MockGpu *gpu, const void *data, size_t size)
Definition mock_drm.cpp:149
MockGpu * gpu
Definition mock_drm.h:46
uint32_t id
Definition mock_drm.h:47
uint32_t id
Definition mock_drm.h:34
uint32_t flags
Definition mock_drm.h:35
QList< QByteArray > enums
Definition mock_drm.h:38
uint64_t value
Definition mock_drm.h:37
QString name
Definition mock_drm.h:36
~MockProperty()=default
MockObject * obj
Definition mock_drm.h:33
MockProperty(MockObject *obj, QString name, uint64_t initialValue, uint32_t flags, QList< QByteArray > enums={})
Definition mock_drm.cpp:138
PlaneType
Definition mock_drm.h:108
QList< Prop > props
Definition mock_drm.h:144
uint32_t prop
Definition mock_drm.h:138
uint64_t value
Definition mock_drm.h:139
uint32_t obj
Definition mock_drm.h:137