From 67734050e65cb487fe8a12b6afb7ccdb39628c9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Gr=C3=A4=C3=9Flin?= Date: Thu, 25 Jun 2015 18:04:06 +0200 Subject: [PATCH] [hwcomposer] Get refresh rate --- backends/hwcomposer/hwcomposer_backend.cpp | 8 +++++--- backends/hwcomposer/hwcomposer_backend.h | 4 ++++ backends/hwcomposer/screens_hwcomposer.cpp | 6 ++++++ backends/hwcomposer/screens_hwcomposer.h | 1 + 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/backends/hwcomposer/hwcomposer_backend.cpp b/backends/hwcomposer/hwcomposer_backend.cpp index 0c063e2b8e..214aa42e5a 100644 --- a/backends/hwcomposer/hwcomposer_backend.cpp +++ b/backends/hwcomposer/hwcomposer_backend.cpp @@ -396,12 +396,13 @@ static KWayland::Server::OutputInterface *createOutput(hwc_composer_device_1_t * return nullptr; } - int32_t attr_values[4]; + int32_t attr_values[5]; uint32_t attributes[] = { HWC_DISPLAY_WIDTH, HWC_DISPLAY_HEIGHT, HWC_DISPLAY_DPI_X, HWC_DISPLAY_DPI_Y, + HWC_DISPLAY_VSYNC_PERIOD , HWC_DISPLAY_NO_ATTRIBUTE }; device->getDisplayAttributes(device, 0, configs[0], attributes, attr_values); @@ -412,8 +413,7 @@ static KWayland::Server::OutputInterface *createOutput(hwc_composer_device_1_t * using namespace KWayland::Server; OutputInterface *o = waylandServer()->display()->createOutput(waylandServer()->display()); - // TODO: get refresh rate - o->addMode(pixel, OutputInterface::ModeFlag::Current | OutputInterface::ModeFlag::Preferred); + o->addMode(pixel, OutputInterface::ModeFlag::Current | OutputInterface::ModeFlag::Preferred, (attr_values[4] == 0) ? 60000 : 10E11/attr_values[4]); if (attr_values[2] != 0 && attr_values[3] != 0) { static const qreal factor = 25.4; @@ -454,7 +454,9 @@ void HwcomposerBackend::init() return; } m_displaySize = output->pixelSize(); + m_refreshRate = output->refreshRate(); qCDebug(KWIN_HWCOMPOSER) << "Display size:" << m_displaySize; + qCDebug(KWIN_HWCOMPOSER) << "Refresh rate:" << m_refreshRate; initInput(); diff --git a/backends/hwcomposer/hwcomposer_backend.h b/backends/hwcomposer/hwcomposer_backend.h index 96a0a214b1..4c68b39cd7 100644 --- a/backends/hwcomposer/hwcomposer_backend.h +++ b/backends/hwcomposer/hwcomposer_backend.h @@ -59,6 +59,9 @@ public: hwc_composer_device_1_t *device() const { return m_device; } + int refreshRate() const { + return m_refreshRate; + } private Q_SLOTS: void toggleBlankOutput(); @@ -70,6 +73,7 @@ private: hwc_composer_device_1_t *m_device = nullptr; AndroidEventListener *m_inputListener = nullptr; bool m_outputBlank = true; + int m_refreshRate = 60000; }; class HwcomposerWindow : public HWComposerNativeWindow diff --git a/backends/hwcomposer/screens_hwcomposer.cpp b/backends/hwcomposer/screens_hwcomposer.cpp index db79cc3784..63a5e376c8 100644 --- a/backends/hwcomposer/screens_hwcomposer.cpp +++ b/backends/hwcomposer/screens_hwcomposer.cpp @@ -65,4 +65,10 @@ int HwcomposerScreens::number(const QPoint &pos) const return 0; } +float HwcomposerScreens::refreshRate(int screen) const +{ + Q_UNUSED(screen) + return m_backend->refreshRate() / 1000.0f; +} + } diff --git a/backends/hwcomposer/screens_hwcomposer.h b/backends/hwcomposer/screens_hwcomposer.h index 9ee2baf90f..6c32e873a4 100644 --- a/backends/hwcomposer/screens_hwcomposer.h +++ b/backends/hwcomposer/screens_hwcomposer.h @@ -36,6 +36,7 @@ public: int number(const QPoint &pos) const override; QSize size(int screen) const override; void updateCount() override; + float refreshRate(int screen) const override; private: HwcomposerBackend *m_backend;