From 9c4996b709ee5cebb1513bb7fe4703caee90f304 Mon Sep 17 00:00:00 2001 From: Rolf Eike Beer Date: Wed, 7 May 2014 11:02:23 +0200 Subject: kms plugin: do not needlessly query drm information twice QKmsDevice already requested the drmModeRes and drmModeConnector information. Simply pass them to the QKmsScreen constructor instead of requesting and freeing them there again. Change-Id: I4897d76d7b13d83297c928b6e10e17ccdfdbd242 Reviewed-by: Laszlo Agocs --- src/plugins/platforms/kms/qkmsdevice.cpp | 5 ++--- src/plugins/platforms/kms/qkmsscreen.cpp | 15 ++++----------- src/plugins/platforms/kms/qkmsscreen.h | 4 ++-- 3 files changed, 8 insertions(+), 16 deletions(-) (limited to 'src/plugins') diff --git a/src/plugins/platforms/kms/qkmsdevice.cpp b/src/plugins/platforms/kms/qkmsdevice.cpp index 1e08c6f301..8e669fe7d5 100644 --- a/src/plugins/platforms/kms/qkmsdevice.cpp +++ b/src/plugins/platforms/kms/qkmsdevice.cpp @@ -85,8 +85,7 @@ QKmsDevice::~QKmsDevice() void QKmsDevice::createScreens() { - drmModeRes *resources = 0; - resources = drmModeGetResources(m_fd); + drmModeRes *resources = drmModeGetResources(m_fd); if (!resources) qFatal("drmModeGetResources failed"); @@ -95,7 +94,7 @@ void QKmsDevice::createScreens() drmModeConnector *connector = 0; connector = drmModeGetConnector(m_fd, resources->connectors[i]); if (connector && connector->connection == DRM_MODE_CONNECTED) { - m_integration->addScreen(new QKmsScreen(this, connector->connector_id)); + m_integration->addScreen(new QKmsScreen(this, resources, connector)); } drmModeFreeConnector(connector); } diff --git a/src/plugins/platforms/kms/qkmsscreen.cpp b/src/plugins/platforms/kms/qkmsscreen.cpp index ad1a45b459..2749139330 100644 --- a/src/plugins/platforms/kms/qkmsscreen.cpp +++ b/src/plugins/platforms/kms/qkmsscreen.cpp @@ -63,18 +63,18 @@ static drmModeModeInfo builtin_1024x768 = { "1024x768" }; -QKmsScreen::QKmsScreen(QKmsDevice *device, int connectorId) +QKmsScreen::QKmsScreen(QKmsDevice *device, const drmModeRes *resources, const drmModeConnector *connector) : m_device(device), m_current_bo(0), m_next_bo(0), - m_connectorId(connectorId), + m_connectorId(connector->connector_id), m_depth(32), m_format(QImage::Format_Invalid), m_eglWindowSurface(EGL_NO_SURFACE), m_modeSet(false) { m_cursor = new QKmsCursor(this); - initializeScreenMode(); + initializeScreenMode(resources, connector); } QKmsScreen::~QKmsScreen() @@ -114,14 +114,9 @@ QPlatformCursor *QKmsScreen::cursor() const return m_cursor; } -void QKmsScreen::initializeScreenMode() +void QKmsScreen::initializeScreenMode(const drmModeRes *resources, const drmModeConnector *connector) { //Determine optimal mode for screen - drmModeRes *resources = drmModeGetResources(m_device->fd()); - if (!resources) - qFatal("drmModeGetResources failed"); - - drmModeConnector *connector = drmModeGetConnector(m_device->fd(), m_connectorId); drmModeModeInfo *mode = 0; for (int i = 0; i < connector->count_modes; ++i) { if (connector->modes[i].type & DRM_MODE_TYPE_PREFERRED) { @@ -162,8 +157,6 @@ void QKmsScreen::initializeScreenMode() qDebug() << "created gbm surface" << m_gbmSurface << m_mode.hdisplay << m_mode.vdisplay; //Cleanup drmModeFreeEncoder(encoder); - drmModeFreeConnector(connector); - drmModeFreeResources(resources); } QSurfaceFormat QKmsScreen::tweakFormat(const QSurfaceFormat &format) diff --git a/src/plugins/platforms/kms/qkmsscreen.h b/src/plugins/platforms/kms/qkmsscreen.h index 5ae5a1062b..1fa8dbb763 100644 --- a/src/plugins/platforms/kms/qkmsscreen.h +++ b/src/plugins/platforms/kms/qkmsscreen.h @@ -68,7 +68,7 @@ class QKmsContext; class QKmsScreen : public QPlatformScreen { public: - QKmsScreen(QKmsDevice *device, int connectorId); + QKmsScreen(QKmsDevice *device, const drmModeRes *resources, const drmModeConnector *connector); ~QKmsScreen(); QRect geometry() const; @@ -94,7 +94,7 @@ public: private: void performPageFlip(); - void initializeScreenMode(); + void initializeScreenMode(const drmModeRes *resources, const drmModeConnector *connector); QKmsDevice *m_device; gbm_bo *m_current_bo; -- cgit v1.2.3