aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqmlvme.cpp
Commit message (Collapse)AuthorAgeFilesLines
* Put calls to QQmlVmeProfiler behind "if (enabled)" macrosUlf Hermann2014-01-221-9/+15
| | | | | | | | | | The construction of arguments to those calls may be expensive and should be avoided if we're not really profiling. Task-number: QTBUG-35315 Change-Id: I558fa4cae6cf532d22193283f1ee2a3b680e2eee Reviewed-by: Michael Brasser <michael.brasser@live.com> Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Put multiple QML profiling messages into one object where possibleUlf Hermann2014-01-221-14/+4
| | | | | | | | | | | | | | | | | | As most of the QML profiling messages only use a small subset of the available fields in QQmlProfilerData we can a, reduce the size of QQmlProfilerData by using unions b, put multiple messages into one object where their data doesn't overlap Furthermore we can add another field for saving QUrl members in QQmlProfilerData so that we can combine more different messages and don't have to convert from QUrl to QString while profiling. This should reduce the impact of the profiling code on the performance of the application being profiled. Task-number: QTBUG-35315 Change-Id: Iecd61e90cc8490d2efbbb381391d98dfee61d3cd Reviewed-by: Michael Brasser <michael.brasser@live.com> Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Remove redundant copies of enabled flag in QML profilerUlf Hermann2014-01-091-19/+15
| | | | | | Task-number: QTBUG-35315 Change-Id: Idd35a330531722cb3d4e0d3e95cb3be6e5697688 Reviewed-by: Michael Brasser <michael.brasser@live.com>
* Use the new object creation profiler in qqmlvmeUlf Hermann2013-11-291-1/+26
| | | | | | | | | | | | | | There are 3 ways to create objects: "Simple", "Cpp" and "Qml". This patch starts a new profiler whenever a new object is created. It's assumed that everything the interpreter main loop does between two creation instructions is related to the object just created. The componentComplete calls are profiled by restoring saved states of the profilers used during the creation of the respective objects. Task-number: QTCREATORBUG-10631 Change-Id: I2645eab7ba32dfb8749cb51ec888d0f0e8fef188 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Fix a few more compiler warnings in release buildsLars Knoll2013-11-091-2/+2
| | | | | Change-Id: I826226b7ddd4a74037b5bbe9a4a7322d404f53a9 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Fix various compiler warnings in order to remove warn_off in the near futureErik Verbruggen2013-11-041-1/+1
| | | | | Change-Id: Ic0492fbe31a1e134674bc6c20381f735dd6d5b7a Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Speed up lookups of imported scriptsSimon Hausmann2013-10-311-1/+7
| | | | | | | | | | The QQmlContextData stores the JS objects of imported scripts in a QList<PersistentValue>. Instead of indexing into that list, this patch changes ctxt->importedScripts to be a JavaScript array, that in the IR we can index via subscript. Change-Id: Ie2c35fb5294a20a0b7084bb51d19671a27195fec Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Compile signal handler expressions in the loader threadSimon Hausmann2013-10-111-4/+7
| | | | | | | | | Handle them similar to function declarations, except that we need to synthesize the expression into a function declaration that includes the signal parameter names. This is done quite similar to the code path in the new compiler. Change-Id: I751081f7f1052692da6e2ed60c7f5c017372d829 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Compile JS functions as part of the QQmlCompiler run in the loader threadSimon Hausmann2013-10-111-1/+2
| | | | | | | | ...instead of extracting the function body as a string and compiling it in the GUI thread. Change-Id: I3c3108f6e35464b5581a2d8b5799e7285858ce4d Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Compile binding expressions in the QQmlCompilerSimon Hausmann2013-10-111-3/+28
| | | | | | | | | | | | | | | | | | | | | | | | This is done by re-using the JS code generator from the new compiler. A few bugs were fixed on the way: * The index into the compiledData->runtimeFunctions array is not the same as the function index when they are collected (from the AST), as for example binding expressions may create extra V4IR::Function objects that break the 1:1 mapping. Therefore the JS code gen will return a mapping from incoming function index to V4IR::Module::Function (and thus runtimeFunction) * Binding expressions in the old backend get usually unpacked from their ExpressionStatement node. The reference to that node is lost, and instead of trying to preserve it, we simply synthesize it again. This won't be necessary anymore with the new compiler in the future. * Commit 1c29d63d6045cf9d58cbc0f850de8fa50bf75d09 ensured to always look up locals by name, and so we have to do the same when initializing the closures of nested functions inside binding expressions (in qv4codegen.cpp) * Had to change the Qml debugger service auto-test, which does toString() on a function that is now compiled. Even if we implemented FunctionPrototype::toString() to do what v8 does by extracting the string from the file, it wouldn't help in this test, because it feeds the input from a string instead of a file. * In tst_parserstress we now end up compiling all JS code, which previously was only parsed. This triggers some bugs in the SSA handling. Those tests are skipped and tracked in QTBUG-34047 Change-Id: I44df51085510da0fd3d99eb5f1c7d4d17bcffdcf Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Don't create a ValueRef to a temporaryLars Knoll2013-10-021-3/+4
| | | | | Change-Id: I6d7fbcee594298517b880e4b0fac9df1f9e54d61 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Fix support for JS imports in QML files in the new compilerSimon Hausmann2013-09-301-105/+1
| | | | | | | | | | | | Remove the v4 value initialization for imported scripts code out of the VME (the method didn't even need any members of the VME class) and into ScriptData, for re-use on the QmlObjectCreator side. Also add the script index setup for the import cache (used by qml context wrapper) to the type loader. Change-Id: Idc3953a48f6fb66d008008e88a2b9b556c775537 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Compile imported scripts in the loader threadSimon Hausmann2013-09-301-29/+3
| | | | | | | | | | | | | | | | | This has the benefit of blocking the GUI thread less and speeding up type creation in the GUI thread (for types that import js libraries). This patch also brings one behavioral change: Due to the parsing at type instantiation type, things like syntax errors for script imports would only generate a run-time warning and the code in the QML file would just see "undefined". Errors in the script now generate real errors at component compilation time, meaning the errors come out earlier and as real errors. This patch implements the separation for the VME only (to keep the size of this patch small). Change-Id: I82f7f3a2d3d4524ea12a7ab62abd8640aba6a47f Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Remove most uses of Value from qml/qmlLars Knoll2013-09-301-4/+7
| | | | | Change-Id: I409a8505a9e01f86d777bc694d24516d1c8f0c4d Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Move Value::fromBool, ... to a new Primitive classLars Knoll2013-09-281-3/+3
| | | | | | | | This will simplify finding the remaining direct usages of QV4::Value that need fixing. Change-Id: I223099727436d5748027c84c53d9dfc4028e38ed Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Fix Persistent/WeakValue APILars Knoll2013-09-261-1/+1
| | | | | | | Don't use unprotected Values in the API anymore. Change-Id: I8851628227fca374de24701bc8ee0908b5ae3923 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Convert most remaining return values from Value to ReturnedValueLars Knoll2013-09-181-3/+5
| | | | | Change-Id: If8b0c3b91be50678693868c10fefc3678008834d Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Get rid of the first half of QQmlGuard usageLars Knoll2013-07-051-1/+1
| | | | | | | | | QQmlGuard was being used as a more performant replacement for QPointer. QPointer got now fixed in Qt 5.0, making this class obsolete. Change-Id: I77eef066c4823af4b074ef32d4d78dbd67c36cd0 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Fix regression in tst_qqmlecmascript::signalAssignmentSimon Hausmann2013-07-051-1/+2
| | | | | | | | | | Detect errors in the signal declaration already at compile time, re-introducing the earlier code in qqmlcompiler.cpp that checked that. This also means that the parameter string construction can be done once for each signal and not for each handler. Change-Id: Icf6242a793939466bbc44d43bf041281164ad1b6 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Get rid of the signal expression rewriterSimon Hausmann2013-07-031-3/+3
| | | | | | | | | | | | | This replaces the entire rewriter with more or less: expressionToEval = "(function(<named params here>) { " + expr + " } )" This also fixes crashes at run-time when the signal rewriter was executed from the loader thread and tried to use a v4 identifier hash with the same engine that's also in the main thread. Change-Id: Ib1e4927d330706a593411fbff64ed3da1e23d0e0 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Merge branch 'dev' of ssh://codereview.qt-project.org/qt/qtdeclarative into ↵Simon Hausmann2013-06-241-11/+39
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | wip/v4 Conflicts: src/imports/qtquick2/plugins.qmltypes src/qml/debugger/qv8debugservice.cpp src/qml/qml/qml.pri src/qml/qml/qqmlcompiler.cpp src/qml/qml/qqmlcomponent.cpp src/qml/qml/qqmlcontext.cpp src/qml/qml/qqmldata_p.h src/qml/qml/qqmlengine_p.h src/qml/qml/qqmljavascriptexpression.cpp src/qml/qml/qqmlxmlhttprequest.cpp src/qml/qml/v4/qv4bindings.cpp src/qml/qml/v4/qv4irbuilder.cpp src/qml/qml/v4/qv4jsonobject_p.h src/qml/qml/v8/qqmlbuiltinfunctions.cpp src/qml/qml/v8/qv8bindings.cpp src/qml/qml/v8/qv8contextwrapper.cpp src/qml/qml/v8/qv8listwrapper.cpp src/qml/qml/v8/qv8qobjectwrapper.cpp src/qml/qml/v8/qv8qobjectwrapper_p.h src/qml/qml/v8/qv8sequencewrapper_p_p.h src/qml/qml/v8/qv8typewrapper.cpp src/qml/qml/v8/qv8valuetypewrapper.cpp src/qml/types/qqmldelegatemodel.cpp src/quick/items/context2d/qquickcanvasitem.cpp src/quick/items/context2d/qquickcontext2d.cpp sync.profile tests/auto/qml/qjsengine/tst_qjsengine.cpp tests/benchmarks/qml/animation/animation.pro tools/qmlprofiler/qmlprofiler.pro Change-Id: I18a76b8a81d87523247fa03a44ca334b1a2360c9
| * Partial fix for deferred properties when combined with componentsAlan Alpert2013-05-221-8/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Current deferred properties implementation did not store context or compiled data pointers correctly. Those pointers are now stored when the defer is reached, so as to avoid confusion (confusion leads to asserts or crashes). Does not extend the deferred property support to allow multiple deferred blocks per item. This now prints and error and the side effect is only that one of the deferred blocks is lost. This use case is sufficiently rare that it may not be worth the cost. Task-number: QTBUG-30325 Change-Id: I80cb074ed4452e95020208a0142a91e721bced7d Reviewed-by: Matthew Vogt <matthew.vogt@qinetic.com.au> Reviewed-by: Lars Knoll <lars.knoll@digia.com>
| * QQmlVMEGuard is not ok if one of the context engines is goneAlbert Astals Cid2013-04-291-1/+1
| | | | | | | | | | | | | | Task-number: QTBUG-30632 Change-Id: Idff323f5b29688477e31030111d4f49f644115cd Reviewed-by: Alan Alpert <aalpert@blackberry.com>
| * Allow disabling of component complete signal for the designerThomas Hartmann2013-04-201-1/+2
| | | | | | | | | | | | | | | | We emit the signal later in the designer. Change-Id: I5da4a2234467444446f168888a3ad3682f4ccc22 Reviewed-by: Marco Bubke <marco.bubke@digia.com> Reviewed-by: Alan Alpert <aalpert@blackberry.com>
| * DesignerSupport: Adding separate flag for component completionThomas Hartmann2013-04-111-1/+18
| | | | | | | | | | | | | | | | The designer should only disable completion of components if the component is created directly by the designer. Change-Id: Id86d2b2f2e61355240bdbbb7875db3e97fb0da17 Reviewed-by: Marco Bubke <marco.bubke@digia.com>
* | Fix failing tst_qqmlecmascript::qtbug_22843:"with .pragma library"Simon Hausmann2013-06-231-1/+4
| | | | | | | | | | | | | | | | Try to to load a .pragma library type of script only once, even if it has a syntax error. Change-Id: I32d7fb71647f413dc75e339e7bff8d74f7754c87 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* | Fix syntax error propagationSimon Hausmann2013-06-131-6/+14
| | | | | | | | | | | | | | | | | | For syntax errors we use the DiagnosticMessage type in qv4context.cpp, that contains detailed information about the error. We must catch that error correctly in QQmlVME::run and report it to the engine. Change-Id: I8f53c7db8dbdc6afa72396f3c25537690a6f5841 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* | Move QV8QObjectWrapper::newQObject into QV4::QObjectWrapperSimon Hausmann2013-06-051-1/+1
| | | | | | | | | | | | | | | | ...where it is just called wrap(), because it doesn't always create a new JS wrapper for the QObject. Change-Id: Ieed0fc97174eb51cd04df0149e715c234a5822bd Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* | Fix missing object markings in QV4::ScriptSimon Hausmann2013-06-021-1/+1
| | | | | | | | | | | | | | | | | | Store the qml activation object as Persistent value, as the script object is often stored on the heap. Also make sure to mark it in QmlBindingWrapper. Fixes various valgrind errors in tst_qqmlecmascript. Change-Id: I7edf1e18db0e6a5ab9dcbfd57e258d72fe62cd77 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* | Cleanup the context wrapper codeLars Knoll2013-05-301-2/+3
| | | | | | | | | | | | | | | | Remove the QV8ContextWrapper class and move the code out of the v8 directory. Change-Id: I00c02f7310a3e43bd105c5bc5af034ce652cfd49 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* | Get rid of Get/SetHiddenValue in the v8 APILars Knoll2013-05-241-3/+3
| | | | | | | | | | | | | | | | | | | | It was only used to mark an object as something to be used as a binding. Simply use one of the free bits in QV4::Managed for that. Also changed a bit more code over from v8 to v4. Change-Id: I6e787e611041e058fe109df1d7a13598655f8eba Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* | Get rid of some v8 based codeLars Knoll2013-05-241-2/+2
| | | | | | | | | | Change-Id: Iee910dcc1d3148922d2f92055eb06cdb0b889502 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* | Remove the remaining dependencies onto the binding rewriterLars Knoll2013-05-241-1/+1
| | | | | | | | | | | | | | | | Remove the remaining places that were rewriting bindings. Remove the binding rewriter class. Change-Id: Ib1e9121dc10f4526ddb7cf0ae32fecd8ce2d4993 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* | Remove QV8Bindings classLars Knoll2013-05-241-46/+1
| | | | | | | | | | | | | | | | | | This class tries to optimise binding compilation with v8. With the approach in v4 where we don't rewrite binding expressions anymore, this is not required anymore. Change-Id: I616aeeba85bc17a950d4c7341b3042ed8aa42bff Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* | Remove all references to the old v4 codeLars Knoll2013-05-231-50/+0
| | | | | | | | | | | | | | | | The old v4 files have already been removed, so cleanup all the #ifdef'ed code that still references them. Change-Id: Ifc5c59add5af36a61586a43b13291d7836cccd78 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* | Fix crash in tst_qqmlecmascript::qtbug_22843()Simon Hausmann2013-05-231-2/+4
| | | | | | | | | | | | | | | | | | Parse errors throw exceptions, which we must catch here. The caller will check !m_program and return accordingly. This restores the previous behavior also found in stable/dev. Change-Id: Iecff94858ba12f13e581ec1664a092b3e9cd963d Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* | Replace usage of v8::Script and qmlModeCompile with QV4::ScriptLars Knoll2013-05-221-6/+15
| | | | | | | | | | Change-Id: I114a0b7faed39be313cde5617a0ce4a06dece7e2 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* | Get rid of v8::BooleanLars Knoll2013-05-211-1/+1
| | | | | | | | | | Change-Id: I10b4240db78532dfdf972bb0a6f191462d81caaa Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* | Get rid of v8::NumberLars Knoll2013-05-211-1/+1
| | | | | | | | | | Change-Id: I38bdf8fe4dd73c61317912ec6308a9a1e870ad99 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* | Get rid of v8::IntegerLars Knoll2013-05-211-1/+1
| | | | | | | | | | Change-Id: I6b9ab830c4ff3cbf986dbcf7c056648b5a16a222 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* | Small exception handling fixesSimon Hausmann2013-05-211-0/+1
| | | | | | | | | | | | | | | | | | * Don't accept the exception if we're going to re-throw it (partial unwind is not necessary as we don't have a stack-based context to clean up) * However do accept() it if we decided to handle it (in qqmlvme.cpp) Change-Id: I63bfa34f30fe19ad36de746b1f15fc6b641e563b Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* | Convert the remaining TryCatch statements to use QV4::ExceptionLars Knoll2013-05-211-14/+7
| | | | | | | | | | | | | | | | v8::Script::Run doesn't catch the exception anymore. Instead we handle this on the calling side, removing all needs for v8::TryCatch. Change-Id: I946269a6734f50c728c4f153c00cd19db48f1a6a Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* | Convert qqmltypeloader to use QV4::PersistentValueLars Knoll2013-05-081-5/+5
| | | | | | | | | | Change-Id: Ifc4e2aea870a3a8ab37cd4d0674c672f0850f98f Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* | Remove more v8::Persistent usagesLars Knoll2013-05-071-8/+4
| | | | | | | | | | Change-Id: Ifa1706e2e609ded86a8bc1a840ca2ed36b869098 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* | Get rid of v8::LocalLars Knoll2013-05-061-3/+3
| | | | | | | | | | | | | | | | | | The class was doing exactly the same thing as v8::Handle in our implementation. Removing it cleans up quite a bit of code. Change-Id: I37a3dcdef062fc388751e9ef0a158b5926ba2efb Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* | Remove v8::HandleScopeLars Knoll2013-05-031-5/+0
| | | | | | | | | | | | | | This class never made sense with v4... :) Change-Id: Id597d791d1adf52cc821d6d46f57cb24d1acd343 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* | Cleanup v8 Context handlingLars Knoll2013-05-031-2/+0
| | | | | | | | | | | | | | | | | | We don't need or use v8 Context objects, so it's sufficient to have one global context for now. Remove all code related to entering or leaving Context's. Change-Id: I4f7ddaa4907e59de5713368fa13bbc40e5830542 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* | Disable the old v4 engine by defaultLars Knoll2013-04-201-2/+8
|/ | | | | | | | Left the code in there, as a reference for how we might want to build up binding evaluation in the new v4. Change-Id: I5c81ea986d642b524fb02087d819b39c4e3fb257 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Merge branch 'stable' into devGunnar Sletta2013-01-171-1/+1
|\ | | | | | | | | | | | | | | Conflicts: src/qml/doc/qtqml.qdocconf src/quick/doc/qtquick.qdocconf Change-Id: I087fa14720995a5e53c43567dc4a3c29eb9992a9
| * 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>