Details
-
Bug
-
Resolution: Done
-
P1: Critical
-
5.14
-
None
-
81408c0e76616b127c46779dc14bbcf084a3d87b
Description
In dev running a constantly animated Qt Quick application and then dragging the window around on the screen exhibits a serious blocking behavior. It looks like the system event processing is stalled (starved by timer events which work as expected), or something like that. Occasionally you can end up in a Window Not Responding dialog as well.
This is not the case with 5.13.
Triggering rendering is done via requestUpdate() in Qt Quick. On Windows this is simply an 5 ms timer (PreciseTimer). This is then started again and again, after firing. (and note that the operations done upon firing are heavy since it throttles the thread to vsync) While the timer itself seems to work (as there is no problem with the rendering), some changes somewhere (event dispatcher?) seem to defer the handling of other (system?) events.
The issue is more visible with the 'basic' render loop, but is there with 'threaded' as well, albeit less easy to trigger.
The problem can be mitigated, apparently, by putting the requestUpdate() call behind a posted event. See https://codereview.qt-project.org/c/qt/qtdeclarative/+/270416
Such a patch should not be necessary however as this looks like a regression from 5.13
To reproduce, try examples/quick/rendercontrol. There the problem is easily visible even with the default threaded render loop.
Or get a reasonably complex Qt Quick application, like https://github.com/alpqr/qt5-cinematic-experience
then do
set QSG_RENDER_LOOP=basic
then run it and drag the window around with the mouse.
Update: this seems to be caused by 6a7cea64d20759ee4ff1e0c2f682868e2907661f from https://codereview.qt-project.org/c/qt/qtbase/+/257000
Attachments
Issue Links
- relates to
-
QTBUG-82701 Windows 7: Strange processing pause when QToolTip is first shown
- Closed
- resulted from
-
QTBUG-74564 [REG: 5.9->5.10]: When using nested event loops with SSL based websockets there will be a performance degregation
- Closed