aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/util/qquickanimatorjob_p.h
Commit message (Collapse)AuthorAgeFilesLines
* use nullptr consistently (clang-tidy)Shawn Rutledge2018-02-261-1/+1
| | | | | | | | | | | | | From now on we prefer nullptr instead of 0 to clarify cases where we are assigning or testing a pointer rather than a numeric zero. Also, replaced cases where 0 was passed as Qt::KeyboardModifiers with Qt::NoModifier (clang-tidy replaced them with nullptr, which waas wrong, so it was just as well to make the tests more readable rather than to revert those lines). Change-Id: I4735d35e4d9f42db5216862ce091429eadc6e65d Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* Fix performance regression in animators since 5.6Gunnar Sletta2017-04-221-1/+0
| | | | | | | | | | The costly addition is down to that we're performing TransformJob::postSync() which we did not do before. This is superfluous though, as we do the same bit of code in preSync() and there is no way the pointers we're checking for can change between pre and post. Only missing bit is to move the invalidate(). Change-Id: I96420c14e11a5a33997ed6fac6a78695a917a8f2 Reviewed-by: Robin Burchell <robin.burchell@crimson.no>
* Merge remote-tracking branch 'origin/5.8' into devLiang Qi2016-12-141-1/+1
|\ | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/plugins/qmltooling/qmldbg_debugger/qv4debugjob.cpp src/plugins/qmltooling/qmldbg_inspector/globalinspector.cpp src/plugins/qmltooling/qmldbg_nativedebugger/qqmlnativedebugservice.cpp src/qml/qml/qqmlimport.cpp src/quick/items/context2d/qquickcontext2dtexture_p.h tools/qmleasing/splineeditor.h Change-Id: I8f6630fcac243824350986c8e9f4bd6483bf20b5
| * Get rid of most QT_NO_FOO usagesLars Knoll2016-11-291-1/+1
| | | | | | | | | | | | | | | | Instead use QT_CONFIG(foo). This change actually detected a few mis-spelled macros and invalid usages. Change-Id: I06ac327098dd1a458e6bc379d637b8e2dac52f85 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | Revert "Revert "Redo animator internals""Gunnar Sletta2016-10-201-44/+58
| | | | | | | | | | | | | | | | | | This reverts commit ac765c4eca202e60f3e28d731f7ba3a77401fef5. Fix for problem in next commit. Change-Id: Ie6b0cb09e38e5063d943662be51952dc6da9a533 Reviewed-by: J-P Nurmi <jpnurmi@qt.io>
* | Revert "Redo animator internals"Jędrzej Nowacki2016-10-171-58/+44
| | | | | | | | | | | | | | | | | | | | The change broke qt/qtquickcontrols2. This reverts commit ae80962806f44fc9f58de14d62229771b836cb93. Change-Id: I2313413d7b145594d434bfabf7426b79aaa98f14 Reviewed-by: J-P Nurmi <jpnurmi@qt.io> Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
* | Redo animator internalsGunnar Sletta2016-10-121-44/+58
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | The animators have suffered from crashes at runtime and instability during testing which have led them to not live up to their potential. This change brings some new concepts to try to make the situation a bit better: Firstly, the ownership of the render thread animation job is maintained using a QSharedPointer, greatly simplifying the management of that object. For the most part it will be deleted on the render thread, but if not, then that is ok too. Secondly, the proxy job is no longer tied to the animation controller. It simply starts the job on the render thread and polls to see if it has completed and only then performs the write back into the source item. Thirdly, the transform helper object which unifies x, y, scale and rotation animators into one matrix has been moved out of the controller and is striclty managed by the transform jobs. Finally, the qmlbench testcase indicates this new implementation is almost 10% faster than the old one, so the addition of shared pointers have not caused any significant performance additions. Change-Id: I51bbc43f716f8635fea97a08f2367e10cde95499 Reviewed-by: Michael Brasser <michael.brasser@live.com> Reviewed-by: Anton Kudryavtsev <a.kudryavtsev@netris.ru>
* Prefix GL-specific shader effect codeLaszlo Agocs2016-04-131-2/+2
| | | | | | | | | | | | | | | | | | | | Rename the C++ sources and classes. The QML type name remains the same. No changes in functionality. The shader effect, node, material (and uniform animator and particles and bits and pieces here and there...) are highly interconnected and do not follow the usual design practices for Quick and the scenegraph and the adaptation layer. Therefore while we aim for keeping full compatibility for GL apps, other backends will likely get a different ShaderEffect item implementation. The C++ class QQuickShaderEffect itself is currently a dummy with an unchanged API. It is not in use for now but forms the basis for the implementation for other backends. This will be covered in future commits. Change-Id: Ia39ce4b303f8f33e2f241d11e35fa62423e43127 Reviewed-by: Andy Nichols <andy.nichols@theqtcompany.com>
* Merge remote-tracking branch 'origin/dev' into wip/scenegraphngLaszlo Agocs2016-04-131-0/+2
|\ | | | | | | Change-Id: If33197b616de3476811f0161d4ecd8e7d004756c
| * Merge remote-tracking branch 'origin/5.6' into 5.7Liang Qi2016-04-081-0/+2
| |\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This change also fixes the build of two benchmarks, tst_affectors and tst_emission. Conflicts: src/plugins/qmltooling/qmldbg_native/qmldbg_native.pro src/qml/qml/ftw/qhashfield_p.h tests/benchmarks/particles/affectors/tst_affectors.cpp tests/benchmarks/particles/emission/tst_emission.cpp tests/benchmarks/qml/pointers/pointers.pro tests/benchmarks/qml/pointers/tst_pointers.cpp tests/benchmarks/qml/qmltime/qmltime.pro tests/benchmarks/qml/qquickwindow/qquickwindow.pro Change-Id: I595309d1e183c18371cb9b07af6e4681059de3b2
| | * Handle duration of zero in QML animatorsDavid Edmundson2016-03-171-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | Handle a duration of zero in animators using the same approach as animations. Task-number: QTBUG-39766 Change-Id: I1628292ad259ec5ec5d3bb0770440efa5fa6dad0 Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
* | | Enable building Qt Quick module with QT_NO_OPENGL definedAndy Nichols2016-03-221-1/+2
|/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently the Qt Quick module depends on either the OpenGL or OpenGLES headers being available at build time. Since we are adding support for adaptations that do not depend on OpenGL, it should be possible to build Qt Quick in environments that do not have OpenGL development headers. This does present many challenges though because in some cases GL types, and classes that require OpenGL are part of the public APIs. However since these classes were never available when QT_NO_OPENGL was defined, it should be possible to redefine the function signatures under this scenario, since it's not possible to break binary compatibility if there never were any binaries to break compatibility with. One of the bigger changes that was necessary to facilitate this change is creating interfaces out of QSGContext and QSGRenderContext. Here the default behavior was usage of OpenGL directly, even though subclasses could override all OpenGL usage. Making them interfaces should bring QSGContext and QSGRenderContext more in line with the other classes present in the adaptation layer. Change-Id: Iaa54dc0f6cfd18d2da1d059548abf509bd71f200 Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
* / Updated license headersJani Heikkinen2016-01-191-14/+20
|/ | | | | | | | | | | From Qt 5.7 -> LGPL v2.1 isn't an option anymore, see http://blog.qt.io/blog/2016/01/13/new-agreement-with-the-kde-free-qt-foundation/ Updated license headers to use new LGPL header instead of LGPL21 one (in those files which will be under LGPL v3) Change-Id: Ic36f1a0a1436fe6ac6eeca8c2375a79857e9cb12 Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
* QQuickAnimatorJob: store the target with a QPointerPaul Lemire2015-12-071-1/+1
| | | | | | | | | | | | | | | This avoids ending up with invalid pointers when under some circumstances the target (which is not owned by the QQuickAnimatorJob) is destroyed between the time the QQuickAnimatorJob is created and the time it is initialized. This is the case when the target of an Animator is the item loaded by a Loader and that the animator is started just before setting the Loader to inactive. Also added an auto test for that special case. Task-number: QTBUG-49634 Change-Id: Iab9bfe76d13755ba735432c6f97bde175d308814 Reviewed-by: Thomas McGuire <thomas.mcguire@kdab.com> Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
* qquickanimatorjob_p.h: fix inconsistent override warningsJ-P Nurmi2015-11-041-16/+16
| | | | | Change-Id: I0d76e8fc630fa30b54ee56a3227856903d0951a9 Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
* virtual QQuickAnimatorJob::afterNodeSync()J-P Nurmi2015-10-291-1/+2
| | | | | | | | This is a suitable hook for custom animator jobs to access QQuickItemPrivate::containerChildNode(). Change-Id: Ie23fd9d6fe053843dd9ac2e8153fabd36873883a Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
* Add missing "We mean it" comments to private headers.Friedemann Kleint2015-10-061-0/+11
| | | | | | Task-number: QTBUG-48594 Change-Id: Ifc207938de7f0c8995fc712df92665f222612647 Reviewed-by: Alan Alpert <aalpert@blackberry.com>
* Merge remote-tracking branch 'origin/5.5' into 5.6Ulf Hermann2015-08-181-4/+4
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/qml/debugger/qv4debugservice.cpp src/qml/jsruntime/qv4value_inl_p.h src/qml/jsruntime/qv4value_p.h src/qml/memory/qv4mm.cpp src/qml/memory/qv4mm_p.h src/qml/qml/qqmlnotifier_p.h src/qml/qml/qqmlproperty.cpp src/quick/items/qquickflickable.cpp src/quick/items/qquicktextedit.cpp tests/auto/quick/qquickwindow/BLACKLIST The extra changes in qqmlbinding.cpp are ported from changes to qqmlproperty.cpp that occurred in parallel with writeBinding() being moved to qqmlbinding.cpp. Change-Id: I16d1920abf448c29a01822256f52153651a56356
| * Consistently use the override keywordThiago Macieira2015-07-191-4/+4
| | | | | | | | | | | | | | Clang doesn't like when it's inconsistent. Change-Id: Ib306f8f647014b399b87ffff13f23eebda07757b Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
* | Merge remote-tracking branch 'origin/5.5' into devLiang Qi2015-04-131-0/+2
|\| | | | | | | | | | | | | | | Conflicts: src/quick/util/qquickpixmapcache.cpp tests/auto/quick/qquickwindow/BLACKLIST Change-Id: Ie81612f2884f8ea508c48ba2735ec54ea1c2eca5
| * Improve debug formatting of QAbstractAnimationJob and related classes.Friedemann Kleint2015-04-021-0/+2
| | | | | | | | | | | | | | | | | | | | | | - Output the state. - Add output to QQuickAnimatorJob. - Add a private export to the debug operator for use by QQuickAnimatorProxyJob to format its contained job. Task-number: QTBUG-45220 Change-Id: Ic64bb5d949864de1c4fb322d53acc3e253977e5d Reviewed-by: Alan Alpert (Personal) <416365416c@gmail.com>
* | Address uninitialized scalar fieldsHolger Hans Peter Freyther2015-04-031-1/+0
|/ | | | | | | Fixes Coverity CID 10732, 10734, 10735, 10736, 10739, 10740 Change-Id: Idebb0bdaf42ceb06cd86c73592138e758a8a87c9 Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
* Fix inconsistent overrides. [-Winconsistent-missing-override]Sérgio Martins2015-03-221-2/+2
| | | | | Change-Id: Ia0f3b50fd14f846c4e36cdaa12d5579902137f1b Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
* Update copyright headersJani Heikkinen2015-02-121-7/+7
| | | | | | | | | Qt copyrights are now in The Qt Company, so we could update the source code headers accordingly. In the same go we should also fix the links to point to qt.io. Change-Id: I61120571787870c0ed17066afb31779b1e6e30e9 Reviewed-by: Iikka Eklund <iikka.eklund@theqtcompany.com>
* Improve performance of animators.v5.4.0-beta1Gunnar Sletta2014-10-101-2/+0
| | | | | | | | | | | | | | | The use of one QCoreApp::postEvent() per completed animation added up to a very large overhead when 1000+ animators were used at the same time. This is very relevant for sprite games and similar and deserves to work at least as good as normal animations. Instead, store the animations to stop and stop then on the gui thread later as a result of frameSwapped. For the benchmark in question this allows for roughly double the amount of animators being started and stopped. Change-Id: Iae3d1ec1502ee1908fdbba708fa9f976aa230064 Reviewed-by: Michael Brasser <michael.brasser@live.com>
* Fix memory leak and crash with transform animators.Gunnar Sletta2014-10-091-1/+2
| | | | | | | | | | | | | | | | | | Every time initialize() was called, we would increment the ref on an item. However, initialize is called every time the job is started, so the ref would increase and only decrease once, leading to a leaked helper. Change it to only increment the first time. A different problem was that when an item was destroyed, we could run the risk of the QQuickTransformAnimatorJob destructor being called with the helper's item being null. This would lead to the helper not being removed from the cache and a dangling helper would remain in the transforms cache. Now change it so that when a target is destroyed, we explicitly destroy the helper as well (as no animation can happen then anyway) and reset all pointers in the job. Change-Id: I1ce76db134bbc1871d32f1224ba5b68a4a4eeafa Reviewed-by: Michael Brasser <michael.brasser@live.com>
* Merge remote-tracking branch 'origin/5.3' into 5.4Simon Hausmann2014-09-081-1/+3
|\ | | | | | | | | | | | | | | | | Conflicts: .qmake.conf src/qml/jsruntime/qv4arraydata.cpp src/quick/scenegraph/util/qsgatlastexture.cpp Change-Id: Ic4c96066d5c37dcf0d5446baed590ea005d445ce
| * Fix crash with cleanup of animators.Gunnar Sletta2014-08-301-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We had several separate issues relating to how the jobs were cleaned up. The first was that upon getting setWindow(0), the animator did not reset m_controller to 0, leading to the starts() coming after that to post null jobs to the controller. This would later crash in beforeNodeSync as the starting job was null. The second issue was that during shutdown, QQuickAnimatorProxy would try to delete jobs on the controller which was already deleted. The controller is deleted on the GUI thread regardless of render loop, so this was solved with a QPointer. The third was that we were a bit too aggressive in trying to clean up jobs on the GUI thread, so we introduced a new bool which gets set to true in startJob() so that Proxy::deleteJob() knows who owns the job. Task-number: QTBUG-37833 Change-Id: I1b6221a2c1ce2bfd0758801b950cda00ff6899d0 Reviewed-by: Michael Brasser <michael.brasser@live.com>
* | Update license headers and add new licensesJani Heikkinen2014-08-251-19/+11
|/ | | | | | | | | - Renamed LICENSE.LGPL to LICENSE.LGPLv21 - Added LICENSE.LGPLv3 & LICENSE.GPLv2 - Removed LICENSE.GPL Change-Id: I84a565e2e0caa3b76bf291a7d188a57a4b00e1b0 Reviewed-by: Jani Heikkinen <jani.heikkinen@digia.com>
* Fix crash with running animators on re-shown windows.Gunnar Sletta2014-05-191-0/+4
| | | | | | | | | | | | | | | | | The non-threaded render loops would clean up the nodes for a window when it was hidden, but the animators kept running and had a reference to the deleted nodes. This was not a problem for the threaded render loop as it would wipe the animator controller as well which would clean the jobs. Fix it by triggering a reset of all nodes in the animators when the window is told to clean up. If an animator is ticked when it doesn't have a node, it will simply do nothing. When the window is made visible again, we call initialize on all animators to find the new node. Task-number: QTBUG-37995 Change-Id: Ie5609d95db29f4b2b30ca5bf641dce901e528389 Reviewed-by: Michael Brasser <michael.brasser@live.com>
* Refactored Animator internalsGunnar Sletta2013-11-061-6/+6
| | | | | | | | | | | | Change the design from posting events for starting and stopping to use the scene graph's existing 'sync' point. This gives much higher predictability and makes both ownership and cleanup cleaner and also reduces intermediate states while events are waiting to be delivered. Task-number: QTBUG-34137 Change-Id: I069ac22acbddaa47925b8172ba98ac340fe9bf8d Reviewed-by: Michael Brasser <michael.brasser@live.com>
* Several smaller fixes to Animators.Gunnar Sletta2013-10-081-0/+3
| | | | | | | | | | | | | | Backwards animations are not supported for animators as the animation system cannot handle uncontrolled backwards animations. Make sure we write back values only for the animators that have run at all. Clockwise rotation to 0 can easily end up on 360 as a result the _q_interpolateClockwise function not being entirely correct. Change-Id: If69b8555a1361f46600a40e80419b65438c18097 Reviewed-by: Michael Brasser <michael.brasser@live.com>
* Allow animators to work properly with multiple windowsGunnar Sletta2013-09-261-2/+4
| | | | | Change-Id: I5ba663ba0fa089ea786cf43cb4dfa40cbc955342 Reviewed-by: Alan Alpert (Personal) <416365416c@gmail.com>
* Animators - Render thread animation systemGunnar Sletta2013-09-211-0/+284
This introduces 6 new QML types for animating state in the scene graph when the UI thread is blocked. The QObject property being animated is updated after the animation completes. It works also with the "windows" and "basic" render loops, but offer litte benefit then compared to in the "threaded" case. Change-Id: Ic19e47c898c0b8bd53e457db922b3c9c457c8147 Reviewed-by: Lars Knoll <lars.knoll@digia.com>