qeglfsdeviceintegration.cpp

Absolute File Name:/home/qt/qt5_coco/qt5/qtbase/src/plugins/platforms/eglfs/qeglfsdeviceintegration.cpp
Switch to Source codePreprocessed file
LineSourceCount
1-
2-
3-
4-
5-
6-
7-
8-
9-
10-
11const QLoggingCategory &qLcEglDevDebug() { static const QLoggingCategory category("qt.qpa.egldeviceintegration"); return category; }-
12-
13namespace { namespace Q_QGS_loader { typedef QFactoryLoader Type; QBasicAtomicInt guard = { QtGlobalStatic::Uninitialized }; __attribute__((visibility("hidden"))) inline Type *innerFunction() { struct HolderBase { ~HolderBase() noexcept { if (guard.load() == QtGlobalStatic::Initialized) guard.store(QtGlobalStatic::Destroyed); } }; static struct Holder : public HolderBase { Type value; Holder() noexcept(noexcept(Type ("org.qt-project.qt.qpa.egl.QEGLDeviceIntegrationFactoryInterface.5.5", QLatin1String("/egldeviceintegrations"), Qt::CaseInsensitive))) : value ("org.qt-project.qt.qpa.egl.QEGLDeviceIntegrationFactoryInterface.5.5", QLatin1String("/egldeviceintegrations"), Qt::CaseInsensitive) { guard.store(QtGlobalStatic::Initialized); } } holder; return &holder.value; } } } static QGlobalStatic<QFactoryLoader, Q_QGS_loader::innerFunction, Q_QGS_loader::guard> loader;-
14-
15-
16-
17namespace { namespace Q_QGS_directLoader { typedef QFactoryLoader Type; QBasicAtomicInt guard = { QtGlobalStatic::Uninitialized }; __attribute__((visibility("hidden"))) inline Type *innerFunction() { struct HolderBase { ~HolderBase() noexcept { if (guard.load() == QtGlobalStatic::Initialized) guard.store(QtGlobalStatic::Destroyed); } }; static struct Holder : public HolderBase { Type value; Holder() noexcept(noexcept(Type ("org.qt-project.qt.qpa.egl.QEGLDeviceIntegrationFactoryInterface.5.5", QLatin1String(""), Qt::CaseInsensitive))) : value ("org.qt-project.qt.qpa.egl.QEGLDeviceIntegrationFactoryInterface.5.5", QLatin1String(""), Qt::CaseInsensitive) { guard.store(QtGlobalStatic::Initialized); } } holder; return &holder.value; } } } static QGlobalStatic<QFactoryLoader, Q_QGS_directLoader::innerFunction, Q_QGS_directLoader::guard> directLoader;-
static inline QEGLDeviceIntegration *loadIntegration(QFactoryLoader *loader, const QString &key)
{
const int index = loader->indexOf(key);
if (index != -1) {
QObject *plugin = loader->instance(index);
if (QEGLDeviceIntegrationPlugin *factory = qobject_cast<QEGLDeviceIntegrationPlugin *>(plugin)) {
if (QEGLDeviceIntegration *result = factory->create())
return result;
}
}
return nullptr;
18-
19-
20-
}QStringList QEGLDeviceIntegrationFactory::keys(const QString &pluginPath)
22{-
23 QStringList list;-
24-
25 if (!pluginPath.isEmpty()
!pluginPath.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
26 QCoreApplication::addLibraryPath(pluginPath);-
27 list = directLoader()->keyMap().values();-
28 if (!list.isEmpty()
!list.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
29 const QString postFix = ([]() -> QString { enum { Size= sizeofQLatin1String(u"" " (from ")/2 - 1 }; static const QStaticStringData<Size> qstring_literal = { { { { -1 } }, Size, 0, 0, sizeof(QStringData)-
30 }, u"" " (from " }; QStringDataPtr holder = { qstring_literal.data_ptr() }; const QString qstring_literal_temp(holder); return qstring_literal_temp; }())+ QDir::toNativeSeparators(pluginPath)-
31 + QLatin1Char(')');-
32 const QStringList::iterator end = list.end();-
33 for (QStringList::iterator it = list.begin(); it != end
it != endDescription
TRUEnever evaluated
FALSEnever evaluated
; ++it)
0
34 (*
never executed: (*it).append(postFix);
it).append(postFix);
never executed: (*it).append(postFix);
0
35 }
never executed: end of block
0
36 }
never executed: end of block
0
37-
38-
39-
40 list.append(loader()->keyMap().values());-
41 for (bool qt_category_enabled = qLcEglDevDebug().isDebugEnabled(); qt_category_enabled
qt_category_enabledDescription
TRUEnever evaluated
FALSEnever evaluated
; qt_category_enabled = false) QMessageLogger(__FILE__, 10094, __PRETTY_FUNCTION__, qLcEglDevDebug().categoryName()).debug() << "EGL device integration plugin keys:" << list;
never executed: QMessageLogger(__FILE__, 94, __PRETTY_FUNCTION__, qLcEglDevDebug().categoryName()).debug() << "EGL device integration plugin keys:" << list;
0
42 return
never executed: return list;
list;
never executed: return list;
0
43}-
44-
45QEGLDeviceIntegration *QEGLDeviceIntegrationFactory::create(const QString &key, const QString &pluginPath)-
46{-
47 QEGLDeviceIntegration *integration = nullptr;-
48-
49 if (!pluginPath.isEmpty()
!pluginPath.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
50 QCoreApplication::addLibraryPath(pluginPath);-
51 integration = loadIntegration(qLoadPlugin<QEGLDeviceIntegration, QEGLDeviceIntegrationPlugin>(directLoader(), key);-
52 }
never executed: end of block
0
53-
54-
55-
56 if (!integration
!integrationDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
57 integration = loadIntegration(qLoadPlugin<QEGLDeviceIntegration, QEGLDeviceIntegrationPlugin>(loader(), key);
never executed: integration = qLoadPlugin<QEGLDeviceIntegration, QEGLDeviceIntegrationPlugin>(loader(), key);
0
58 if (integration
integrationDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
59 for (bool qt_category_enabled = qLcEglDevDebug().isDebugEnabled(); qt_category_enabled
qt_category_enabledDescription
TRUEnever evaluated
FALSEnever evaluated
; qt_category_enabled = false) QMessageLogger(__FILE__, 119112, __PRETTY_FUNCTION__, qLcEglDevDebug().categoryName()).debug() << "Using EGL device integration" << key;
never executed: QMessageLogger(__FILE__, 112, __PRETTY_FUNCTION__, qLcEglDevDebug().categoryName()).debug() << "Using EGL device integration" << key;
0
60 else-
61 for (bool qt_category_enabled = qLcEglDevDebug().isWarningEnabled(); qt_category_enabled
qt_category_enabledDescription
TRUEnever evaluated
FALSEnever evaluated
; qt_category_enabled = false) QMessageLogger(__FILE__, 121114, __PRETTY_FUNCTION__, qLcEglDevDebug().categoryName()).warning() << "Failed to load EGL device integration" << key;
never executed: QMessageLogger(__FILE__, 114, __PRETTY_FUNCTION__, qLcEglDevDebug().categoryName()).warning() << "Failed to load EGL device integration" << key;
0
62-
63 return
never executed: return integration;
integration;
never executed: return integration;
0
64}-
65-
66static int framebuffer = -1;-
67-
68QByteArray QEGLDeviceIntegration::fbDeviceName() const-
69{-
70-
71 QByteArray fbDev = qgetenv("QT_QPA_EGLFS_FB");-
72 if (fbDev.isEmpty()
fbDev.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
73 fbDev = ([]() -> QByteArray { enum { Size = sizeof("/dev/fb0") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "/dev/fb0" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }());
never executed: fbDev = ([]() -> QByteArray { enum { Size = sizeof("/dev/fb0") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "/dev/fb0" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }());
0
74-
75 return
never executed: return fbDev;
fbDev;
never executed: return fbDev;
0
76-
77-
78-
79}-
80-
81int QEGLDeviceIntegration::framebufferIndex() const-
82{-
83 int fbIndex = 0;-
84-
85 QRegularExpression fbIndexRx(QLatin1String("fb(\\d+)"));-
86 QRegularExpressionMatch match = fbIndexRx.match(QString::fromLocal8Bit(fbDeviceName()));-
87 if (match.hasMatch())-
88 fbIndex = match.captured(1).toInt();-
89-
90 return fbIndex;-
91}-
92-
93void QEGLDeviceIntegration::platformInit()-
94{-
95-
96 QByteArray fbDev = fbDeviceName();-
97-
98 framebuffer = qt_safe_open(fbDev, 00);-
99-
100 if (__builtin_expect(!!(
__builtin_expe...== -1), false)Description
TRUEnever evaluated
FALSEnever evaluated
framebuffer == -1)), false)
__builtin_expe...== -1), false)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
101 QMessageLogger(__FILE__, 159154, __PRETTY_FUNCTION__).warning("EGLFS: Failed to open %s", fbDev.constData());-
102 QMessageLogger(__FILE__, 160155, __PRETTY_FUNCTION__).fatal("EGLFS: Can't continue without a display");-
103 }
never executed: end of block
0
104-
105-
106 ioctl(framebuffer, 0x4611, 0);-
107-
108-
109}
never executed: end of block
0
110-
111void QEGLDeviceIntegration::platformDestroy()-
112{-
113-
114 if (framebuffer != -1
framebuffer != -1Description
TRUEnever evaluated
FALSEnever evaluated
)
0
115 close(framebuffer);
never executed: close(framebuffer);
0
116-
117}
never executed: end of block
0
118-
119EGLNativeDisplayType QEGLDeviceIntegration::platformDisplay() const-
120{-
121 return ((EGLNativeDisplayType)0);-
122}-
123-
124EGLDisplay QEGLDeviceIntegration::createDisplay(EGLNativeDisplayType nativeDisplay)-
125{-
126 return eglGetDisplay(nativeDisplay);-
127}-
128-
129bool QEGLDeviceIntegration::usesDefaultScreen()-
130{-
131 return true;-
132}-
133-
134void QEGLDeviceIntegration::screenInit()-
135{-
136-
137}-
138-
139void QEGLDeviceIntegration::screenDestroy()-
140{-
141 QGuiApplication *app = (static_cast<QGuiApplication *>(QCoreApplication::instance()));-
142 QEglFSIntegration *platformIntegration = static_cast<QEglFSIntegration *>(-
143 QGuiApplicationPrivate::platformIntegration());-
144 while (!app->screens().isEmpty())-
145 platformIntegration->removeScreen(app->screens().last()->handle());-
146}-
147-
148QSizeF QEGLDeviceIntegration::physicalScreenSize() const-
149{-
150 return q_physicalScreenSizeFromFb(framebuffer, screenSize());-
151}-
152-
153QSize QEGLDeviceIntegration::screenSize() const-
154{-
155 return q_screenSizeFromFb(framebuffer);-
156}-
157-
158QDpi QEGLDeviceIntegration::logicalDpi() const-
159{-
160 const QSizeF ps = physicalScreenSize();-
161 const QSize s = screenSize();-
162-
163 if (!ps.isEmpty() && !s.isEmpty())-
164 return QDpi(25.4 * s.width() / ps.width(),-
165 25.4 * s.height() / ps.height());-
166 else-
167 return QDpi(100, 100);-
168}-
169-
170qreal QEGLDeviceIntegration::pixelDensity() const-
171{-
172 return qRound(logicalDpi().first / qreal(100));-
173}-
174-
175Qt::ScreenOrientation QEGLDeviceIntegration::nativeOrientation() const-
176{-
177 return Qt::PrimaryOrientation;-
178}-
179-
180Qt::ScreenOrientation QEGLDeviceIntegration::orientation() const-
181{-
182 return Qt::PrimaryOrientation;-
183}-
184-
185int QEGLDeviceIntegration::screenDepth() const-
186{-
187 return q_screenDepthFromFb(framebuffer);-
188}-
189-
190QImage::Format QEGLDeviceIntegration::screenFormat() const-
191{-
192 return screenDepth() == 16 ? QImage::Format_RGB16 : QImage::Format_RGB32;-
193}-
194-
195qreal QEGLDeviceIntegration::refreshRate() const-
196{-
197 return q_refreshRateFromFb(framebuffer);-
198}-
199-
200EGLint QEGLDeviceIntegration::surfaceType() const-
201{-
202 return 0x0004;-
203}-
204-
205QSurfaceFormat QEGLDeviceIntegration::surfaceFormatFor(const QSurfaceFormat &inputFormat) const-
206{-
207 QSurfaceFormat format = inputFormat;-
208-
209 static const bool force888 = qEnvironmentVariableIntValue("QT_QPA_EGLFS_FORCE888");-
210 if (force888) {-
211 format.setRedBufferSize(8);-
212 format.setGreenBufferSize(8);-
213 format.setBlueBufferSize(8);-
214 }-
215-
216 return format;-
217}-
218-
219bool QEGLDeviceIntegration::filterConfig(EGLDisplay, EGLConfig) const-
220{-
221 return true;-
222}-
223-
224QEglFSWindow *QEGLDeviceIntegration::createWindow(QWindow *window) const-
225{-
226 return new QEglFSWindow(window);-
227}-
228-
229EGLNativeWindowType QEGLDeviceIntegration::createNativeWindow(QPlatformWindow *platformWindow,-
230 const QSize &size,-
231 const QSurfaceFormat &format)-
232{-
233 (void)platformWindow;;-
234 (void)size;;-
235 (void)format;;-
236 return 0;-
237}-
238-
239EGLNativeWindowType QEGLDeviceIntegration::createNativeOffscreenWindow(const QSurfaceFormat &format)-
240{-
241 (void)format;;-
242 return 0;-
243}-
244-
245void QEGLDeviceIntegration::destroyNativeWindow(EGLNativeWindowType window)-
246{-
247 (void)window;;-
248}-
249-
250bool QEGLDeviceIntegration::hasCapability(QPlatformIntegration::Capability cap) const-
251{-
252 (void)cap;;-
253 return false;-
254}-
255-
256QPlatformCursor *QEGLDeviceIntegration::createCursor(QPlatformScreen *screen) const-
257{-
258 return new QEglFSCursor(screen);-
259}-
260-
261void QEGLDeviceIntegration::waitForVSync(QPlatformSurface *surface) const-
262{-
263 (void)surface;;-
264-
265-
266 static const bool forceSync = qEnvironmentVariableIntValue("QT_QPA_EGLFS_FORCEVSYNC");-
267 if (forceSync
forceSyncDescription
TRUEnever evaluated
FALSEnever evaluated
&& framebuffer != -1
framebuffer != -1Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
268 int arg = 0;-
269 if (ioctl(framebuffer, (((1U) << (((0 +8)+8)+14)) | ((('F')) << (0 +8)) | (((0x20)) << 0) | ((((sizeof(__u32)))) << ((0 +8)+8))), &arg) == -1
ioctl(framebuf...), &arg) == -1Description
TRUEnever evaluated
FALSEnever evaluated
)
0
270 QMessageLogger(__FILE__, 325323, __PRETTY_FUNCTION__).warning("Could not wait for vsync.");
never executed: QMessageLogger(__FILE__, 323, __PRETTY_FUNCTION__).warning("Could not wait for vsync.");
0
271 }
never executed: end of block
0
272-
273}
never executed: end of block
0
274-
275void QEGLDeviceIntegration::presentBuffer(QPlatformSurface *surface)-
276{-
277 (void)surface;;-
278}-
279-
280bool QEGLDeviceIntegration::supportsPBuffers() const-
281{-
282 return true;-
283}-
284-
285bool QEGLDeviceIntegration::supportsSurfacelessContexts() const-
286{-
287 return true;-
288}-
289-
290void *QEGLDeviceIntegration::wlDisplay() const-
291{-
292 return nullptr;-
293}-
294-
295-
Switch to Source codePreprocessed file

Generated by Squish Coco Non-Commercial 4.3.0-BETA-master-30-08-2018-4cb69e9