diff options
author | Giulio Camuffo <giulio.camuffo@jollamobile.com> | 2014-02-10 14:32:34 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-03-11 15:05:34 +0100 |
commit | eeb365a8f164a1402c19ca5a7e38e01f4e69cf7b (patch) | |
tree | f50857284b63cb6497e5ac73f66ee3c32aee9b57 /src/compositor/compositor_api/qwaylandcompositor.h | |
parent | 666f597ccd2ced23ecc71ba497981d1a88c34d77 (diff) |
Make sure the frame callbacks are sent at the right time
When there is a rendering thread, like with QtQuick compositors,
there is a race condition where the frame callbacks are sent before
the last buffer the client sent is released.
Assume the following scenario:
attach(B1)/frame(F1)/commit()...frame started...attach(B2)/frame(F2)/
commit()...frame finished.
On frame finished the callback just installed is emitted before the
buffer B2 is being used and B1 released. That forces the client to
allocate a third buffer to draw the next frame.
Now, do not send out the frame callbacks until a new frame started.
The successive draw will release B1, use the new B2 and than send out F2.
Change-Id: I5743c7baf9fdd3cde28c5f594ff646c06abb74b7
Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com>
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
Diffstat (limited to 'src/compositor/compositor_api/qwaylandcompositor.h')
-rw-r--r-- | src/compositor/compositor_api/qwaylandcompositor.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/src/compositor/compositor_api/qwaylandcompositor.h b/src/compositor/compositor_api/qwaylandcompositor.h index 6ed9cd894..9009f4caa 100644 --- a/src/compositor/compositor_api/qwaylandcompositor.h +++ b/src/compositor/compositor_api/qwaylandcompositor.h @@ -84,6 +84,7 @@ public: struct wl_display *waylandDisplay() const; + void frameStarted(); void sendFrameCallbacks(QList<QWaylandSurface *> visibleSurfaces); void destroyClientForSurface(QWaylandSurface *surface); |