summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorJørgen Lind <jorgen.lind@nokia.com>2011-03-23 08:04:40 (GMT)
committerJørgen Lind <jorgen.lind@nokia.com>2011-03-23 16:00:22 (GMT)
commit11d327e3d2b90a8f1f68675cf1c93a67e26b273b (patch)
tree396b990e478edbef8ae4e950bddac8ff35a07431 /src/plugins
parent9ca3f9c6b6ae50c6b8a19d5e4b26bff15d5421e6 (diff)
downloadQt-11d327e3d2b90a8f1f68675cf1c93a67e26b273b.zip
Qt-11d327e3d2b90a8f1f68675cf1c93a67e26b273b.tar.gz
Qt-11d327e3d2b90a8f1f68675cf1c93a67e26b273b.tar.bz2
Lighthouse: Wayland: Move the frame throttling into the platform window
This is only for the shm case
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/platforms/wayland/qwaylandshmsurface.cpp19
-rw-r--r--src/plugins/platforms/wayland/qwaylandshmwindow.cpp19
-rw-r--r--src/plugins/platforms/wayland/qwaylandshmwindow.h5
3 files changed, 24 insertions, 19 deletions
diff --git a/src/plugins/platforms/wayland/qwaylandshmsurface.cpp b/src/plugins/platforms/wayland/qwaylandshmsurface.cpp
index 54da9a1..cc6b2a1 100644
--- a/src/plugins/platforms/wayland/qwaylandshmsurface.cpp
+++ b/src/plugins/platforms/wayland/qwaylandshmsurface.cpp
@@ -95,7 +95,6 @@ QWaylandShmWindowSurface::QWaylandShmWindowSurface(QWidget *window)
: QWindowSurface(window)
, mBuffer(0)
, mDisplay(QWaylandScreen::waylandScreenFromWidget(window)->display())
- , mWaitingForFrameSync(false)
{
}
@@ -110,30 +109,20 @@ QPaintDevice *QWaylandShmWindowSurface::paintDevice()
void QWaylandShmWindowSurface::beginPaint(const QRegion &)
{
- while (mWaitingForFrameSync) {
+ QWaylandShmWindow *waylandWindow = static_cast<QWaylandShmWindow *>(window()->platformWindow());
+ Q_ASSERT(waylandWindow->windowType() == QWaylandWindow::Shm);
+ while (waylandWindow->waitingForFrameSync()) {
mDisplay->iterate();
}
}
-void QWaylandShmWindowSurface::frameCallback(void *data, uint32_t time)
-{
- QWaylandShmWindowSurface *self = static_cast<QWaylandShmWindowSurface*>(data);
- self->mWaitingForFrameSync = false;
-}
-
void QWaylandShmWindowSurface::flush(QWidget *widget, const QRegion &region, const QPoint &offset)
{
Q_UNUSED(widget);
Q_UNUSED(offset);
QWaylandShmWindow *waylandWindow = static_cast<QWaylandShmWindow *>(window()->platformWindow());
Q_ASSERT(waylandWindow->windowType() == QWaylandWindow::Shm);
-
- QVector<QRect> rects = region.rects();
- for (int i = 0; i < rects.size(); i++) {
- waylandWindow->damage(rects.at(i));
- }
- mWaitingForFrameSync = true;
- mDisplay->frameCallback(QWaylandShmWindowSurface::frameCallback, this);
+ waylandWindow->damage(region);
}
void QWaylandShmWindowSurface::resize(const QSize &size)
diff --git a/src/plugins/platforms/wayland/qwaylandshmwindow.cpp b/src/plugins/platforms/wayland/qwaylandshmwindow.cpp
index cafd2d0..d7c44a4 100644
--- a/src/plugins/platforms/wayland/qwaylandshmwindow.cpp
+++ b/src/plugins/platforms/wayland/qwaylandshmwindow.cpp
@@ -46,6 +46,7 @@
QWaylandShmWindow::QWaylandShmWindow(QWidget *widget)
: QWaylandWindow(widget)
, mBuffer(0)
+ , mWaitingForFrameSync(false)
{
newSurfaceCreated();
}
@@ -75,10 +76,16 @@ void QWaylandShmWindow::attach(QWaylandBuffer *buffer)
}
-void QWaylandShmWindow::damage(const QRect &rect)
+void QWaylandShmWindow::damage(const QRegion &region)
{
- wl_surface_damage(mSurface,
- rect.x(), rect.y(), rect.width(), rect.height());
+ QVector<QRect> rects = region.rects();
+ for (int i = 0; i < rects.size(); i++) {
+ const QRect rect = rects.at(i);
+ wl_surface_damage(mSurface,
+ rect.x(), rect.y(), rect.width(), rect.height());
+ }
+ mWaitingForFrameSync = true;
+ mDisplay->frameCallback(QWaylandShmWindow::frameCallback, this);
}
void QWaylandShmWindow::newSurfaceCreated()
@@ -87,3 +94,9 @@ void QWaylandShmWindow::newSurfaceCreated()
wl_surface_attach(mSurface,mBuffer->buffer(),0,0);
}
}
+
+void QWaylandShmWindow::frameCallback(void *data, uint32_t time)
+{
+ QWaylandShmWindow *self = static_cast<QWaylandShmWindow*>(data);
+ self->mWaitingForFrameSync = false;
+}
diff --git a/src/plugins/platforms/wayland/qwaylandshmwindow.h b/src/plugins/platforms/wayland/qwaylandshmwindow.h
index 14a29d2..669533c 100644
--- a/src/plugins/platforms/wayland/qwaylandshmwindow.h
+++ b/src/plugins/platforms/wayland/qwaylandshmwindow.h
@@ -53,11 +53,14 @@ public:
WindowType windowType() const;
QPlatformGLContext *glContext() const;
void attach(QWaylandBuffer *buffer);
- void damage(const QRect &rect);
+ void damage(const QRegion &region);
+ bool waitingForFrameSync() const { return mWaitingForFrameSync; }
protected:
void newSurfaceCreated();
private:
+ static void frameCallback(void *data, uint32_t time);
QWaylandBuffer *mBuffer;
+ bool mWaitingForFrameSync;
};
#endif // QWAYLANDSHMWINDOW_H