[Qt-interest] UI Interaction Freezing when using QGraphicsView - How to Debug?
Josiah Bryan
jbryan at productiveconcepts.com
Mon Sep 21 15:32:24 CEST 2009
David Boosalis wrote:
> I ran your code on my Linux system which has an inferior cpu (AMD Athlon
> X2) and a cheap built in graphics card on motherboard. Saw really flaky
> and randon behavior. SOmetimes I saw what you saw, other times I
> started it and it ran ok, albeit very slot
>
> If I did not use the OpenGL widget it ran a lot better, but still very
> bad for only 100 objects, then looked at Chips example n qt/demos which
> has probable a 1000 items I think. I used there settings for
> QGraphicsView and also switched to QGraphicsRectItem and things ran very
> smooth.
>
> By the way, your code ran just as bad under Qt 4.6-tp1.
>
> The code below ran very well. Maybe someone else can comment on how to
> tweek Messa or OpenGL, but heck if it this sensitive to the openGL
> driver might as well let Qt do the rendering and know it run adequately
> on any machine. I hope someone can diagnose the opengl issue here
>
David -
Thanks for your confirmation that its not all just in my head. I agree,
this seems to be a serious issue with opengl/Qt interaction. I applied
your QGraphicsView optimizations below and it does indeed seem to
improve performance to some degree.
However, my app's demands on the system seem to cry out for OpenGL's
acceleration - can anyone at trolltech confirm this problem? Any leads
on how to get this fixed or looked at?
Thanks!
-josiah
>
> class BoxItem : public QGraphicsRectItem
> {
> public:
>
> QRectF m_contentsRect;
> QPen pen;
> QBrush brush;
>
>
> BoxItem(QGraphicsScene * scene, QGraphicsItem * parent) :
> QGraphicsRectItem(0,0,500,500,parent)
> {
> setFlags(QGraphicsItem::ItemIsMovable);
> setBrush(QColor(255,0,0,255));
> pen.setWidthF(3);
> pen.setColor(QColor(0,0,0,255));
> }
> };
>
> int main(int argc, char **argv)
> {
> QApplication app(argc, argv);
>
> QGraphicsView *graphicsView = new QGraphicsView();
> //graphicsView->setViewport(new
> QGLWidget(QGLFormat(QGL::SampleBuffers)));
>
> graphicsView->setCacheMode(QGraphicsView::CacheBackground);
>
> graphicsView->setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate);
>
> graphicsView->setInteractive(true);
> QGraphicsScene * scene = new QGraphicsScene();
> scene->setBackgroundBrush(QColor(100,100,100));
> graphicsView->setScene(scene);
> scene->setSceneRect(0,0,800,600);
> graphicsView->resize(800,600);
> graphicsView->setWindowTitle("Test");
> graphicsView->setRenderHint(QPainter::Antialiasing, false);
> graphicsView->setDragMode(QGraphicsView::RubberBandDrag);
> graphicsView->setOptimizationFlags(QGraphicsView::DontSavePainterState);
> graphicsView->setViewportUpdateMode(QGraphicsView::SmartViewportUpdate);
>
> for(int i=0;i<100;i++)
> {
> BoxItem *x = new BoxItem(scene,0);
> x->show();
> x->setBrush(Qt::red);
> x->setPos(qrand() % 800, qrand() % 600);
> scene->addItem(x);
> }
>
> graphicsView->show();
>
> return app.exec();
> }
>
> On Fri, Sep 18, 2009 at 5:24 PM, Josiah Bryan
> <jbryan at productiveconcepts.com <mailto:jbryan at productiveconcepts.com>>
> wrote:
>
> Josiah Bryan wrote:
> ...
>
> Its a rather extreem freeze - in fact, even the system mouse
> freezes (under gdb, when not running in gdb, mouse doesn't
> freeze but unrelated apps still do, like the charts in gkrellm.)
>
> ...
>
> Alright, it took 4+ hours, but I narrowed it down to the attached
> test case.
>
> To reproduce:
>
> - Build and run
> - Attempt to drag any rectangle, even by a small amount.
> - Repeat until system becomes unresponsive (mouse freezes, other
> programs freeze.)
>
> On my system (specs below), the program freezes within 1 - 5 mouse
> interactions (drags.) This is with the both cores hovering around 5
> - 10% load before mouse interaction following program launch. RAM is
> around 1.5GB free at time of tests, disk usage minimal (~64K/sec
> xfer load.) No other graphic intensive programs running - email,
> terminals, KWrite, etc. No other opengl programs (that I know of) -
> certainly no 3D programs.
>
> System info:
>
> Running with 4GB RAM on an Intel(R) Core(TM)2 Duo CPU, both cores
> running at 3.00GHz. Graphics card is a Quadro NVS 290 (PCIe card)
> with 256 MB RAM.
>
> X -version reports:
>
> X Window System Version 1.3.0
> Release Date: 19 April 2007
> X Protocol Version 11, Revision 0, Release 1.3
> Build Operating System: Fedora Core 7 Red Hat, Inc.
> Current Operating System: Linux josiah-desktop.pci.local
> 2.6.23.9-85.fc8 #1 SMP Fri Dec 7 15:49:59 EST 2007 i686
> Build Date: 17 October 2007
> Build ID: xorg-x11-server 1.3.0.0-33.fc8
>
> NVidia control center reports under "OpenGL/GLX Information",
> heading "Server GLX Information", that the vendor is NVIDIA, version
> 1.4, with the following extensions:
>
> GLX_EXT_visual_info
> GLX_EXT_visual_rating
> GLX_SGIX_fbconfig
> GLX_SGIX_pbuffer
> GLX_SGI_video_sync
> GLX_SGI_swap_control
> GLX_EXT_texture_from_pixmap
> GLX_ARB_multisample
> GLX_NV_float_buffer
> GLX_ARB_fbconfig_float
> GLX_EXT_framebuffer_sRGB
>
>
> Tested on XP - not able to reproduce there. No other linux machines
> tested yet. Will test my home system this evening (CentOS 5.2, dual
> head, etc.)
>
> Anyone able to reproduce or offer tips on fixing? Anyone at
> trolltech able to comment?
>
> Thanks in advance.
> -josiah
More information about the Qt-interest-old
mailing list