aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items/qquickwindowmanager.cpp
Commit message (Collapse)AuthorAgeFilesLines
* Complete rewrite of threaded render loop.Gunnar Sletta2013-01-181-363/+0
| | | | | | | | | | | | | | | | This change starts using the superior implementation of the scene graph render loop which has been worked on in the scenegraph-playground project for a while. It uses a far more straightforward locking/sync paradigm compared to the existing one and is less deadlock and error prone. It also enables the scene graph thread to run on its own when the GUI thread is blocked, enabling threaded animations. This changes also introduces a naming change inside Qt Quick from "Window Manager" -> "Render Loop" as that fits better to what the code does. Change-Id: I1c2170ee04fcbef79660bd7dae6cace647cdb276 Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
* Update copyright year in Digia's license headersSergio Ahumada2013-01-101-1/+1
| | | | | | Change-Id: I6c3bd7bebe3d62d1cfd0fa6334544c9db8398c76 Reviewed-by: Akseli Salovaara <akseli.salovaara@digia.com> Reviewed-by: Sergio Ahumada <sergio.ahumada@digia.com>
* Fix other warnings in qtdeclarative found by GCC 4.7Thiago Macieira2012-12-231-1/+1
| | | | | | | | | | | | | qml/qml/qqmlimport.cpp:982:30: error: unused parameter 'errors' [-Werror=unused-parameter] quick/util/qquickanimationcontroller.cpp:66:6: error: unused parameter 'job' [-Werror=unused-parameter]' quick/items/qquickshadereffectnode.cpp:160:17: error: case value '38' not in enumerated type 'QVariant::Type' [-Werror=switch] quick/items/qquickwindowmanager.cpp:286:60: error: 'renderTime' may be used uninitialized in this function [-Werror=maybe-uninitialized] quick/items/qquickitem.cpp:5267:67: error: comparison between signed and unsigned integer expressions [-Werror=sign-compare] and a few more repeated from the above Change-Id: Id1950c6ba98f7f8475975716b21bd795ecb4bd20 Reviewed-by: Alan Alpert <aalpert@rim.com>
* Use threaded renderer even without BufferQueueingOpenGL.Samuel Rødal2012-11-161-2/+5
| | | | | | | | | | | | Without threaded rendering QML 2 often ends up running at half the screen refresh rate on X11. Not having BufferQueuingOpenGL shouldn't prevent us from using threaded rendering, since the issue of four animating windows running at 1/4th of the screen refresh rate will happen regardless of whether rendering happens on the main thread or in a separate rendering thread. Change-Id: I0edc818e6d762fa1faf13e7f2f47dfda132b6fdf Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
* Change Q_ASSERTs in qquick[threaded]windowmanager.cpp to qWarning().Friedemann Kleint2012-10-201-1/+7
| | | | | | | | | As they also triggers when a non-existing file is loaded into QML2 or windows have invalid sizes. Change-Id: Iab1ce6c99f2bc2cb360ddaccce539cb97979ad5a Reviewed-by: Kai Koehne <kai.koehne@digia.com> Reviewed-by: Christiaan Janssen <christiaan.janssen@digia.com>
* Adding DesignerWindowManager for Qt Quick DesignerMarco Bubke2012-10-151-7/+13
| | | | | | | | | DesignerWindowManager implements a render path just for Qt Quick Designer, which is single threaded and does not open visible windows. Change-Id: I02b0d1b819a7a5391b9bb14ee6efa1a32e0c8ad7 Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
* Allow grabbing windows rendered without showing for testing.Balazs Kelemen2012-09-281-2/+5
| | | | | | | | | | | To make QQuickWindowPrivate::setRenderWithoutShowing more useful for autotesting we can allow grabbing such windows. This is safe if the platform window have been created and the window has a valid size. Change-Id: I8b9a2aaeb93935f662b75ef29651730b890441d5 Reviewed-by: Samuel Rødal <samuel.rodal@digia.com> Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
* Change copyrights from Nokia to DigiaIikka Eklund2012-09-231-24/+24
| | | | | | | Change copyrights and license headers from Nokia to Digia Change-Id: Ie7f5d49ed8235d7a7845ab68f99ad1c220e64d5c Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Fix calculation of QML_RENDER_TIMING valuesThomas McGuire2012-09-101-2/+2
| | | | | | | | The sync time was not taken into account Change-Id: I3d8adb637572c72438e20729a80513850a80d17e Reviewed-by: Sean Harmer <sean.harmer@kdab.com> Reviewed-by: Alan Alpert <416365416c@gmail.com>
* QML_RENDER_TIMING: Add time since last frame to outputThomas McGuire2012-09-101-1/+5
| | | | | | | | | This is quite useful to see how much time the rest of the app takes. The same information has been available in QtQuick1. Change-Id: I31ae91bfa764a4d8013af80de9459514ed72314f Reviewed-by: Gunnar Sletta <gunnar.sletta@nokia.com> Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
* Add QML_RENDER_TIMING output for the single-threaded caseThomas McGuire2012-09-101-0/+22
| | | | | | Change-Id: Ia3958c7c26bf2fd9dd72a07fc6f5ff3a28b0a349 Reviewed-by: Gunnar Sletta <gunnar.sletta@nokia.com> Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
* Remove windowmanager hacks form the incubation controller.Gunnar Sletta2012-09-041-11/+1
| | | | | | | | | | Tie incubation directly to wether animations are running or not. When animations are running, we incubate for a third of a frame only. When animations are not running we incubate whatever is left as the scene is anyway idle. Change-Id: I88c9248e9d7b3b35c99fca52aeb9c681d1b4a306 Reviewed-by: Martin Jones <martin.jones@nokia.com>
* QQuickRenderThreadSingleContextWindowManager in separate filesAlan Alpert2012-07-241-988/+2
| | | | | Change-Id: I90364c3e96e5bcbff84d8da574af5695a0fd7993 Reviewed-by: Glenn Watson <glenn.watson@nokia.com>
* Call handleRemovedWindows() before canvas renderingCharles Yin2012-07-171-2/+2
| | | | | | Change-Id: I599ec0347a55422a3c85c89e0f6817b7f2d1343e Reviewed-by: Gunnar Sletta <gunnar.sletta@nokia.com> Reviewed-by: Chris Adams <christopher.adams@nokia.com>
* QQuickCanvas renamesAlan Alpert2012-07-171-192/+192
| | | | | | | | | | | | | | | | QQuickCanvas is now called QQuickWindow QQuickCanvas::rootItem is now QQuickWindow::contentItem QQuickItem::canvas is now QQuickItem::window QQuickItem::ItemChangeData::canvas is also renamed window QQuickCanvas::grabFrameBuffer is now QQuickWindow::grabWindow The functions related to the color property have dropped the clear from their names. The first three changes have interim compatibility measures in place to ease the transition. Change-Id: Id34e29546a22a74a7ae2ad90ee3a8def6fc541d2 Reviewed-by: Martin Jones <martin.jones@nokia.com>
* Don't swap buffers before the window is exposed.Morten Johan Sorvig2012-06-011-1/+1
| | | | | | | | | | | | | At app startup there is often a delay between setting a window visible and the window being exposed by the window manager. Add check to canvas->isExposed() before calling swapbuffers. Change-Id: I5e588ab334a72c4fe817da44eff4c3dc785d6b1f Reviewed-by: Robin Burchell <robin+qt@viroteck.net> Reviewed-by: Gunnar Sletta <gunnar.sletta@nokia.com>
* Enable QML_FIXED_ANIMATION_STEP by default with buffer queueing.Gunnar Sletta2012-05-291-3/+10
| | | | | | | | | | | | | | | | | | | On Mac OS X and other systems with buffer queueing GL, we have very jerky animations as the pipeline does not block at regular intervals, causing the current-time based animations to come out very jerky despite us rendering at 60 FPS with a very good margin. To remedy this, we switch the default so that we by default advance with a fixed increment, making the uneven frames not a problem. This then comes at the cost of that animations will slow down if the application does not manage to render within 16 ms, but this is an acceptible compromise. Aka, now it will occationally look bad, as opposed to always bad which it currently does. Change-Id: I44a6c3e51f434e4235e49485182380ea531876d9 Reviewed-by: Michael Brasser <michael.brasser@nokia.com>
* Check ThreadedOpenGL support before enabling threaded renderer.Samuel Rødal2012-05-241-1/+2
| | | | | | | BufferQueuedOpenGL doesn't necessarily imply threading support. Change-Id: I4ba8e3b9acfd3eb12bb41aa6b644c852ae5fa1c6 Reviewed-by: Gunnar Sletta <gunnar.sletta@nokia.com>
* Add QQuickCanvas::update()Gunnar Sletta2012-05-221-0/+2
| | | | | | | | | | | | | | | We would like to make a distinction between QQuickItem::update() which triggers updatePaintNode() to synchronize the scene graph and requesting the toplevel QQuickCanvas to be repainted. If we have this distinction in place it is possible for the scene graph to detect that the scene is unchanged and avoid rendering unless the user has explicitely asked for the canvas to be repainted, which is often the case when hooking into QQuickCanvas::beforeRender(). Change-Id: Ibe77f58423593deb217ef9f8082fa12009f45daf Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
* Fixed missing repaints with threaded renderer.Samuel Rødal2012-05-211-0/+3
| | | | | | | Update when we get an expose event, like the trivial renderer does. Change-Id: Ib95559da35b94d84c0935c6abb24fdfb1e05fa1c Reviewed-by: Gunnar Sletta <gunnar.sletta@nokia.com>
* Make sure there is a proper update when exposing with trivialLaszlo Agocs2012-05-101-1/+1
| | | | | | | | | | We need to have updatePending set otherwise there will be no swapBuffers() which looks quite bad when minimizing and restoring a window on xcb for instance. (we end up with having no window content shown until there is a proper update triggered for whatever reason) Change-Id: Ia58bbe92dbb7fb7e184828dc9ffbf0ddce0131e1 Reviewed-by: Gunnar Sletta <gunnar.sletta@nokia.com>
* Added environment variable for enforcing the threaded renderer.Samuel Rødal2012-05-091-0/+3
| | | | | | | | | | | On a 120 Hz display for example, the threaded renderer makes the animations go from rubber to velvet. Change-Id: I28175b4a063dbf5d92ec128797e811c90891b3d5 Reviewed-by: Gunnar Sletta <gunnar.sletta@nokia.com> Reviewed-by: Girish Ramakrishnan <girish.1.ramakrishnan@nokia.com> Reviewed-by: Sean Harmer <sean.harmer@kdab.com> Reviewed-by: Donald Carr <donald.carr@nokia.com>
* Adapt to _qpa file rename in qtbase.Girish Ramakrishnan2012-05-081-1/+1
| | | | | | | | | qtbase change 36547f4eff44361f7a6acd0cff107c0e47561f93 renamed qpa headers. Change-Id: I903b48d145837557d305366e2eb4eedd0ad32c14 Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com> Reviewed-by: Gunnar Sletta <gunnar.sletta@nokia.com>
* Delay rendering until canvas is exposed.Samuel Rødal2012-04-191-2/+4
| | | | | | | | Prevents warnings about swapBuffers() being called with non-exposed window on xcb. Change-Id: Ib43fd588a7b62e7aaf14f2caddfa498fdced283a Reviewed-by: Gunnar Sletta <gunnar.sletta@nokia.com>
* Don't use QWindow::visible() since it's deprecatedGirish Ramakrishnan2012-04-131-5/+5
| | | | | | | | Use QWindow::isVisible() instead. Change-Id: I7dcd70e69a070d66f97f300cc292c1bfc51cf09c Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com> Reviewed-by: Gunnar Sletta <gunnar.sletta@nokia.com>
* Fix broken wakeup() in threaded renderloop.Gunnar Sletta2012-04-131-1/+1
| | | | | | | | | | | | It is cruicial that the sync handshake between GUI and render does not get interrupted. If it does, the sync will happen with the GUI unlocked which leads to crashes. When the sync event comes through to the GUI afterwards the GUI will block waiting while the renderer is most likely already done with the sync, causing GUI to wait indefinitely. Change-Id: I00bf0c36088510609a9e6f4d0649b9aaeefcd241 Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
* Fix warnings in qtdeclarative.Friedemann Kleint2012-03-301-1/+1
| | | | | | | | | | - QString from ASCII conversions - Unused variables - Pointer mismatches Change-Id: I5f76dce4f2ba481c2c2bce8681cf8107bd629566 Reviewed-by: Andrew den Exter <andrew.den-exter@nokia.com> Reviewed-by: Michael Brasser <michael.brasser@nokia.com>
* Make sure window manager wakeup() can always wake upCharles Yin2012-03-261-1/+2
| | | | | | | | | 1. Change isExternalUpdatePending to true to avoid window manager sleep again immediately without processing any events 2. Also wake up the window manager if wait at posting sync event Change-Id: I184dba32a66379b688b585c27c4d01799c233e84 Reviewed-by: Martin Jones <martin.jones@nokia.com>
* Fix possible crash in QSGContext::invalidate()Yoann Lopes2012-03-191-4/+4
| | | | | | | | In some cases QSGContext::invalidate() was called without any current GL context when the render thread was terminated. Change-Id: Ia5295c89fe13f2473115c736e328e386d6d4d183 Reviewed-by: Gunnar Sletta <gunnar.sletta@nokia.com>
* Fix grabbing to wait until the image has actually been grabbed.Michael Brasser2012-03-191-11/+1
| | | | | Change-Id: I3535c57b5d8dd99c8a6cf24ccb1b56af298fcfe6 Reviewed-by: Martin Jones <martin.jones@nokia.com>
* Made QQuickWindowManager pluggable via QSGContext.Gunnar Sletta2012-03-051-26/+17
| | | | | | | | | | Also rename paint() to exposureChanged() as that is what the function actually means. The implementation of paint() has been removed in both trivial and threaded version as it is superflous as show() already triggers rendering. Change-Id: I7e53f42786efaf961921f10a39977de511965d71 Reviewed-by: Jørgen Lind <jorgen.lind@nokia.com>
* Merge master <-> api_changesMatthew Vogt2012-03-051-122/+54
|\ | | | | | | Change-Id: Iad2f07b989b25349fd2d4fff010e24dcd5a1688f
| * Incubators are not async with the threaded renderer.Martin Jones2012-02-281-5/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | The threaded incubator relies on the event loop spinning to signal item updates. This change ensures that the event loop is processed while items are being created and that the render loop is woken if it is sleeping. Also cancel delegate incubation correctly during destruction. Change-Id: Ib5bb55c788411490e0959c75933da587fdfd4b8c Reviewed-by: Yunqiao Yin <charles.yin@nokia.com> Reviewed-by: Michael Brasser <michael.brasser@nokia.com>
| * Revert resource releasing logic inside window managers.Gunnar Sletta2012-02-241-117/+37
| | | | | | | | | | | | | | | | | | | | | | | | | | This was based on the assumption that exposure and visibility would take similar code paths, but this is not the case and the fallout of this change (like not releasing resources at all) is not worth it. This reverts ef6318ae38322b5a4a0619b581924290f114fa74 and most of 5f0013ee76605b9c7ceab168702b57e797b698e0 Change-Id: Ib2e29972502a8ec956cd6bd294a2a2bb50d8e76e Reviewed-by: Alan Alpert <alan.alpert@nokia.com>
* | Rename QDeclarative symbols to QQuick and QQmlMatthew Vogt2012-02-241-2/+2
|/ | | | | | | | | | | | | Symbols beginning with QDeclarative are already exported by the quick1 module. Users can apply the bin/rename-qtdeclarative-symbols.sh script to modify client code using the previous names of the renamed symbols. Task-number: QTBUG-23737 Change-Id: Ifaa482663767634931e8711a8e9bf6e404859e66 Reviewed-by: Martin Jones <martin.jones@nokia.com>
* Release resources on shutdown..Gunnar Sletta2012-02-211-3/+11
| | | | | Change-Id: I7758f5ba1f58e19d92e394133cccd449ce5a1756 Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
* Make compile.Michael Brasser2012-02-211-0/+1
| | | | | | | Fix compile after 054114a459580b71e170dc6bf356e8943d0ed068 in qtbase. Change-Id: Ibeea6b4b2e3c5f420446b15edd1df7bf88535dcd Reviewed-by: Martin Jones <martin.jones@nokia.com>
* Introduced QQuickCanvas::releaseResources().Gunnar Sletta2012-02-151-27/+107
| | | | | | | | This function can be used in certain situations to purge the texture cache and triggers more lazily to take down the scene graph and GL context Change-Id: Icd9360ff50fda0e721ba0f1b520cda678e457a35 Reviewed-by: Aaron Kennedy <aaron.kennedy@nokia.com>
* Track the animationRunning flag correctly in ↵Charles Yin2012-02-111-0/+1
| | | | | | | | | | | | | | QQuickRenderThreadSingleContextWindowManager The animationRunning value in QQuickRenderThreadSingleContextWindowManager should always match the animation driver's running state. When the renderer starts rendering, should check and update the animationRunning to the current animation driver's isRunning() value after killing the animation timer. Change-Id: I30b55872ae1fc69b8db47ead7f1f2ee86de966c8 Reviewed-by: Andrew den Exter <andrew.den-exter@nokia.com> Reviewed-by: Gunnar Sletta <gunnar.sletta@nokia.com>
* Started implementation of offscreen canvas FBO rendering APIGunnar Sletta2012-02-021-8/+47
| | | | | Change-Id: I15b1799982d20d16c9c5e08eee7095cf087b49e1 Reviewed-by: Kim M. Kalland <kim.kalland@nokia.com>
* Remove "All rights reserved" line from license headers.Jason McDonald2012-01-301-1/+1
| | | | | | | | | | As in the past, to avoid rewriting various autotests that contain line-number information, an extra blank line has been inserted at the end of the license text to ensure that this commit does not change the total number of lines in the license header. Change-Id: If39bd256b0fa85eba17ea30f8ab87ea27d758908 Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com>
* Output a friendly warning when makeCurrent failsGunnar Sletta2012-01-271-2/+4
| | | | | Change-Id: Ife582717b4abc657120b98366fe6e6dc5efc7586 Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
* Update obsolete contact address.Jason McDonald2012-01-231-1/+1
| | | | | | | | Replace Nokia contact email address with Qt Project website. Change-Id: I6a730abc0c396fb545a48b2d6938abedac2e3f1c Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com> Reviewed-by: Alan Alpert <alan.alpert@nokia.com>
* Update copyright year in Nokia copyright headers.Jason McDonald2012-01-171-1/+1
| | | | | | | | Update copyright headers from before 2011, and a couple of new ones that were merged after the previous change to copyright headers. Change-Id: Ia76e08e2734afa4ef3f1207dbcda5ff3bc81b366 Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com>
* initialize variableGunnar Sletta2012-01-121-0/+1
| | | | | Change-Id: I4841dce8e85df608fd0e38f661301797a3857176 Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
* Fix tst_qdeclarativestates::anchorsRewindBug failureGunnar Sletta2012-01-091-33/+35
| | | | | | | | | | | | | | | | | | | | maybeUpdate() has an optimization to void locking the Gui thread on every QQuickItem::update() call, which was faulty. When the render thread was done rendering the flag should have been reset which would have meant another locked sync between render and GUI. Solve it slightly differently by posting an event to ourselves in GUI and resetting the state once the event is processed. This batches all update calls made until the GUI thread returns to the event loop, aka all animation updates, all responds to one touch event, etc. The isExternalUpdatePending variable, written from maybeUpdate, was accumulated per canvas, but is used per render thread only, so this change simplifies the variable to be per render thread only. Task-number: QTBUG-23478 Change-Id: I067a9918383e3e05e2feebcc6dfa3163b032eb5b Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
* Emit the QQuickCanvas::frameSwapped signal again.Gunnar Sletta2011-12-201-1/+4
| | | | | | | This got lost in the window manager rewrite Change-Id: Ibaed76814ae676ce4ce3f50def196b8d67fd3df0 Reviewed-by: Laszlo Agocs <laszlo.p.agocs@nokia.com>
* Implement "headless mode" for hidden QQuickCanvasesGunnar Sletta2011-12-191-7/+11
| | | | | | | | | | When all views are hidden, we stop the rendering thread, kill the OpenGL context and all scene graph content. The entire scenegraph is recreated based on the QML scene when a view is shown again. Change-Id: I734619d9f29263a5cdecbcc9b88c3808d1d64a7f Reviewed-by: Kim M. Kalland <kim.kalland@nokia.com>
* Initialize variableGunnar Sletta2011-12-121-0/+1
| | | | | Change-Id: Ie88f21c4e4c53a023f03f906d2fae7540fbc668d Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
* QtQuick: Fix compiler warnings.Friedemann Kleint2011-12-121-1/+0
| | | | | | | Mostly introduced by fdd14a1a10a0a2f42015b30071771bd95215cc1a. Change-Id: Ief4c33412ef80923de2f91e62bb89c18267a14f3 Reviewed-by: Gunnar Sletta <gunnar.sletta@nokia.com>