> On 2008-11-08 12:07:21, Aaron Seigo wrote: > > a much easier, straightforward and foolproof way of doing this is to have a > > QTime and a QTimer, and at the start of the paintEvent method have sth like: > > > > if (time.elapsed() < MIN_REFRESH_TIME) { > > timer->start(MIN_REFRESH_TIME - time.elapsed() + 10); > > return; > > } > > > > time.restart(); > > > > timer would be connected to a method that calls update. the rest of the > > paint event would remain the same, and this should compress paints to be no > > more than once every 1000/MIN_REFRESH_TIME (so 1/10th of a second if the > > min time is 100, 1/4th of a second at 250, etc..). > > > > with your patch it will do 10 paints in rapid succession and just stall for > > the remainder of the second. this would probably break overly-agressively > > animated icons. > > > > the use of single shot timers in your patch also provides no way of > > resetting the time to wait.
The 10 paints in rapid succession was half intentional in order to make it obvious that there's a painting problem somewhere else. I have redone the patch in line what you've said above though and it does simplify it a fair bit. > On 2008-11-08 12:07:21, Aaron Seigo wrote: > > trunk/KDE/kdebase/workspace/plasma/applets/systemtray/protocols/fdo/x11embedcontainer.cpp, > > line 191 > > <http://reviewboard.vidsolbach.de/r/264/diff/1/?file=1466#file1466line191> > > > > this causes a repaint in one second whether it needs it or not, as > > restorePaintTokens called update() Only if all tokens were depleted... > On 2008-11-08 12:07:21, Aaron Seigo wrote: > > trunk/KDE/kdebase/workspace/plasma/applets/systemtray/protocols/fdo/x11embedcontainer.cpp, > > line 189 > > <http://reviewboard.vidsolbach.de/r/264/diff/1/?file=1466#file1466line189> > > > > updateBackgroundImage will still get called 10 times. Nope, only once. A guard was already in place so I didn't need to add one. - Jason ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: http://reviewboard.vidsolbach.de/r/264/#review255 ----------------------------------------------------------- On 2008-11-08 19:40:24, Jason Stubbs wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > http://reviewboard.vidsolbach.de/r/264/ > ----------------------------------------------------------- > > (Updated 2008-11-08 19:40:24) > > > Review request for Plasma. > > > Summary > ------- > > There are some situations - such as overlapping sibling widgets - that can > cause a painting loop that can make plasma severely unresponsive. While those > issues should be fixed as they arise, I think that it is better that the > system tray be a little more robust as well. > > This patch limits paints to 10 per second. This number is arbitrary and > essentially limits the number of frames per second for animations, but can't > be too high as updates are fairly expensive. > > Also, is this method of using tokens ok? Is there a better way? > > > Diffs > ----- > > > trunk/KDE/kdebase/workspace/plasma/applets/systemtray/protocols/fdo/x11embedcontainer.h > > trunk/KDE/kdebase/workspace/plasma/applets/systemtray/protocols/fdo/x11embedcontainer.cpp > > Diff: http://reviewboard.vidsolbach.de/r/264/diff > > > Testing > ------- > > Resizing the panel to around 10 pixels will trigger excessive repainting. > With the patch, the paints being prevented is clearly visible and plasma > remains responsive. Resizing it too small will cause the icons to disappear > altogether and will cause things to become unresponsive, but kDebug()s > revealed that this was not due to painting. > > > Thanks, > > Jason > > _______________________________________________ Plasma-devel mailing list Plasma-devel@kde.org https://mail.kde.org/mailman/listinfo/plasma-devel