diff options
author | Jani Hautakangas <jani.hautakangas@nokia.com> | 2011-05-02 09:22:24 (GMT) |
---|---|---|
committer | Jani Hautakangas <jani.hautakangas@nokia.com> | 2011-05-02 09:45:11 (GMT) |
commit | 6a92de7c89764848f7a85b1aa412a07bedc72b1a (patch) | |
tree | 8037df739702167f5d696dab9d18036bee4a0bba /src | |
parent | a690e560b38385ebb9cd83288e8660d2a4ca2fde (diff) | |
download | Qt-6a92de7c89764848f7a85b1aa412a07bedc72b1a.zip Qt-6a92de7c89764848f7a85b1aa412a07bedc72b1a.tar.gz Qt-6a92de7c89764848f7a85b1aa412a07bedc72b1a.tar.bz2 |
Fix for native child widget performance issue.
Flushing native child widgets in VG and GL window
surfaces caused performance downgrade because unnecessary
swapBuffers calls. On Symbian we must not support flushing
native child widgets in VG and GL window surfaces because
it causes GPU memory overhead and performance issues. Symbian
graphics architecture allows us to render native child widgets
to TLW EGL surface correctly in most of the cases.
Task-number: QTMOBILITY-1570
Reviewed-by: Samuel Rødal
Diffstat (limited to 'src')
-rw-r--r-- | src/opengl/qwindowsurface_gl.cpp | 11 | ||||
-rw-r--r-- | src/openvg/qwindowsurface_vg.cpp | 11 |
2 files changed, 22 insertions, 0 deletions
diff --git a/src/opengl/qwindowsurface_gl.cpp b/src/opengl/qwindowsurface_gl.cpp index b056caa..c6cb214 100644 --- a/src/opengl/qwindowsurface_gl.cpp +++ b/src/opengl/qwindowsurface_gl.cpp @@ -604,6 +604,17 @@ void QGLWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoint & if (!hasPartialUpdateSupport() && !d_ptr->did_paint) return; +#ifdef Q_OS_SYMBIAN + if (window() != widget) { + // For performance reasons we don't support + // flushing native child widgets on Symbian. + // It breaks overlapping native child widget + // rendering in some cases but we prefer performance. + return; + } +#endif + + QWidget *parent = widget->internalWinId() ? widget : widget->nativeParentWidget(); Q_ASSERT(parent); diff --git a/src/openvg/qwindowsurface_vg.cpp b/src/openvg/qwindowsurface_vg.cpp index 9ce7f9a..01a6ce9 100644 --- a/src/openvg/qwindowsurface_vg.cpp +++ b/src/openvg/qwindowsurface_vg.cpp @@ -79,6 +79,17 @@ QPaintDevice *QVGWindowSurface::paintDevice() void QVGWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) { Q_UNUSED(offset); + +#ifdef Q_OS_SYMBIAN + if (window() != widget) { + // For performance reasons we don't support + // flushing native child widgets on Symbian. + // It breaks overlapping native child widget + // rendering in some cases but we prefer performance. + return; + } +#endif + QWidget *parent = widget->internalWinId() ? widget : widget->nativeParentWidget(); d_ptr->endPaint(parent, region); } |