jasonlg3d
jasonlg3d

Reputation: 504

Qt QGraphicsView application is always using 15% CPU.

I have a Qt application that is built around a QGraphicsView/Scene. The graphical performance is fine, animations are extremely smooth and a simple high res timer says the frames are drawing as fast as 400 fps. However, the application is always using 15% cpu according to task manager. I have run performance analysis on it in Visual Studio 2012 and it is showing that most of the samples are being taken in the QApplication::notify function. Sampling Profile Report from Visual Studio

I have set the viewport to render with a QGLWidget in hopes that offloading the drawing functions to the GPU would help, but that had no impact at all on CPU usage.

Is this normal? Is there something I can do to reduce CPU usage?

Process Explorer Performance Tab Process Explorer Performance Graph

Upvotes: 0

Views: 1251

Answers (1)

dtech
dtech

Reputation: 49309

Well, there you have it - 400 FPS framerates. That loads one of your cores at 100%. There is a reason people usually cap framerates. The high framerates are putting a strain on the Qt event system which is driving the graphics.

Limit your frame rate to 60 FPS and problem solved.

I'm not updating the view unless an event occurs that updates an individual graphicswidget

Do not update the scene for each and every scene element change. This is likely the cause of the overhead. You can make multiple scene item changes, but render the scene at a fixed rate.

Also, I notice you said graphicswidget - which I assume is QGraphicsWidget - this might be problematic too. QObject derived classes are a little on the heavy side, and the Qt event system comes with overheads too, which is the reason the regular QGraphicsItem is not QObject derived. If you use graphics widgets excessively, that might be a source of overhead, so see if you can get away with using the lighter QGraphicsItem class and some lighter mechanism to drive your scene.

Upvotes: 2

Related Questions