Set incubation controller when a Window{} is loaded via QQmlApplicationEngine
authorAlan Alpert <aalpert@blackberry.com>
Fri, 31 May 2013 17:38:33 +0000 (10:38 -0700)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Fri, 7 Jun 2013 17:09:33 +0000 (19:09 +0200)
commit9d75626b1073113d77988bcb52e99215d5af4787
treeb42ad298daaae258a405367da1c9fd0d56d3013c
parentcfd4bf9d6cb8a932eab5ac99bae8973b9cedc803
Set incubation controller when a Window{} is loaded via QQmlApplicationEngine

This was the one convenience that was lost when transitioning templates
from QQuickView + Item{} to QQmlApplicationEngine + Window{}.

As the default window incubation controller was tied to the first
window's frameSwapped, we could easily run into a situation where
a secondary window required incubation while the first window
was idle. This would then starve the incubation controller. Instead
make it so that the renderloop emits "timeToIncubate" once it
is done with a renderpass over all windows, so the incubator
gets to run once and exactly once per vsync when animating.

The incubator logic was also flawed in that it could post
a lot of events to itself as a result of incubatingObjectCountChanged
and thus starve system events while processing incubation requests.
Now we start a timer and don't start it again until we have
completed an incubation pass.

Task-number: QTBUG-31203
Change-Id: Iea9e2c81efb46bb7875c70ccda0cdc4b3b3e58e7
Reviewed-by: Alan Alpert <aalpert@blackberry.com>
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
12 files changed:
examples/quick/customitems/painteditem/painteditem.pro
src/qml/qml/qqmlapplicationengine.cpp
src/quick/designer/designerwindowmanager_p.h
src/quick/items/qquickwindow.cpp
src/quick/items/qquickwindow_p.h
src/quick/items/qquickwindowmodule.cpp
src/quick/scenegraph/qsgrenderloop.cpp
src/quick/scenegraph/qsgrenderloop_p.h
src/quick/scenegraph/qsgthreadedrenderloop.cpp
src/quick/scenegraph/qsgthreadedrenderloop_p.h
src/quick/scenegraph/qsgwindowsrenderloop.cpp
src/quick/scenegraph/qsgwindowsrenderloop_p.h