[Interest] Rotating objects in QML are killing performance

Sean Harmer sean.harmer at kdab.com
Fri Apr 12 09:54:06 CEST 2013


On Friday 12 April 2013 09:26:16 Michael Andersen wrote:
> > Is vsync enabled in your driver? Sounds like it might not be. If not, then
> > Qt Quick 2.0 will render at 100% cpu rendering maybe many thousands of
> > frames per second, even though you only see 60 of them.
> 
> Unfortunately, VSync is enabled, that would have been a good explanation.
> 
> I am using the Nvidia binary drivers (v304.51) so in order to double check
> that applications actually *were* vsynced, I ran glxgears. Turns out that
> glxgears does the same thing: no repainting while dragging and it lags the
> whole PC when you drag the app. This is not a small PC, I have a GTX 560
> Ti, 32GB of ram and an i7 3930.. why oh why is glxgears lagging...
> 
> For want of another data point, I ran minecraft, yes I know its a different
> language and all that, but it does have an OpenGL context... and it doesn't
> lag the pc at all while the window is being dragged.
> 
> So I am not sure that this is really Qt's fault, except that the QtQuick
> 1.1 application did not exhibit the same problems, and it does seem
> possible to make an OpenGL application that repaints while the window is
> moved.
> 
> Any ideas?

I suspect the window manager compositing. I am seeing similar lags with KWin 
with compositing enabled and I change focus (so that window shadow changes) or 
hovering over a window button (so that tooltip appears). This happens with raw 
Qt + OpenGL applications too.

Disabling compositing eliminates the massive lag when performing these 
actions. Also the lag used to be much less noticeable. I think I first noticed 
it around KDE 4.9.1 but thought it must be something I was doing dumb.

Running 10 instances of this simple qml animation test show CPU usage of each 
to be about 2-3% here which seems reasonable. KWin / X itself spike when the 
lags occur due to the above actions.

If I had to guess right now I would say that the transfer of pixel data from 
the application into a texture for use by the compositor is the bottleneck but 
I have not had a chance to dig in and prove this or fix it.

Cheers,

Sean

> 
> > cheers,
> > Gunnar
> > 
> > > Here is a simple reproducer of the problem, I create a QtQuick2
> > 
> > application in Qt Creator 2.7. I adjust the QML to look like this:
> > > import QtQuick 2.0
> > > 
> > > Rectangle {
> > > 
> > >     width: 400
> > >     height: 400
> > >     Rectangle {
> > >     
> > >         id: redsquare
> > >         color: "red"
> > >         width: 50
> > >         height: 50
> > >         x: 50
> > >         y: 50
> > >     
> > >     }
> > >     RotationAnimation {
> > >     
> > >         loops: Animation.Infinite
> > >         target: redsquare
> > >         properties: "rotation"
> > >         from: 0
> > >         to: 360
> > >         duration: 300*5
> > >         direction: RotationAnimation.Clockwise
> > >         running: true
> > >     
> > >     }
> > > 
> > > }
> > > 
> > > My main.cpp is the default, but that looks like this:
> > > 
> > > #include <QtGui/QGuiApplication>
> > > #include "qtquick2applicationviewer.h"
> > > 
> > > int main(int argc, char *argv[])
> > > {
> > > 
> > >     QGuiApplication app(argc, argv);
> > >     
> > >     QtQuick2ApplicationViewer viewer;
> > >     viewer.setMainQmlFile(QStringLiteral("qml/SimpleRotator/main.qml"));
> > >     viewer.showExpanded();
> > >     
> > >     return app.exec();
> > > 
> > > }
> > > 
> > > I am new to Qt, so perhaps I am doing something wrong with my animation,
> > 
> > but I have tried a couple other methods of animating and they all lag
> > equally badly. The PC I develop on is quite a monster, so if it is lagging
> > on this, I hate to think what it's going to do on my clients' laptops.
> > 
> > > Anyone have any ideas?
> > > 
> > > Regards
> > > Michael
> > > _______________________________________________
> > > Interest mailing list
> > > Interest at qt-project.org
> > > http://lists.qt-project.org/mailman/listinfo/interest
--
Dr Sean Harmer | sean.harmer at kdab.com | Senior Software Engineer
Klarälvdalens Datakonsult AB, a KDAB Group company
Tel. Sweden (HQ) +46-563-540090, USA +1-866-777-KDAB(5322)
KDAB - Qt Experts - Platform-independent software solutions



More information about the Interest mailing list