platform/upstream/qtdeclarative.git
9 years agoCheck for "c" being a nullptr in all places
Holger Hans Peter Freyther [Sun, 11 Jan 2015 07:56:56 +0000 (08:56 +0100)]
Check for "c" being a nullptr in all places

So either c is never a nullptr or there is a potential crash in
the grab code. Replicate the check from above.

Change-Id: I2c93502c026cdd92dc5d20e3d6d59e6f6f92a6ce
Fixes: Coverity CID 10628
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoAdd null check for target as well
Holger Hans Peter Freyther [Sun, 11 Jan 2015 07:53:58 +0000 (08:53 +0100)]
Add null check for target as well

I couldn't see any documentation for the implication that if
stackBefore is set then target must not be null. Coverity didn't
find that implication either.

Change-Id: Ifb93aa4c1e40f417033057b9a403d368dfdf0ba8
Fixes: Coverity CID 10627
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoRemove side-effect in assert
Holger Hans Peter Freyther [Sun, 11 Jan 2015 07:43:29 +0000 (08:43 +0100)]
Remove side-effect in assert

Fixes: Coverity CID 10587

Change-Id: I5101d209a54751532f48094f443afe35c6111e29
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoNo need to include qsgbatchrenderer_p.h from qquickwindow_p.h
Gunnar Sletta [Mon, 12 Jan 2015 13:35:24 +0000 (14:35 +0100)]
No need to include qsgbatchrenderer_p.h from qquickwindow_p.h

Change-Id: Iba97717ae8d485c217613475524a762949ea1dae
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
9 years agoMake sure we always have an engine when assigning to a Persistent
Lars Knoll [Tue, 13 Jan 2015 08:01:29 +0000 (09:01 +0100)]
Make sure we always have an engine when assigning to a Persistent

This prepares things for a rewrite of the internals of Persistent.

Change-Id: Ib93ec5911984d1bfce87ffdc3f86bc75f6ecafe9
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoFix flick() with ListView.SnapToItem at bounds.
Michael Brasser [Thu, 18 Dec 2014 16:20:37 +0000 (10:20 -0600)]
Fix flick() with ListView.SnapToItem at bounds.

Previously flick() would not always allow flicking to the very end of
a ListView if ListView.SnapToItem were set. Stop ListView from adding
overshoot, and then incorrectly correcting, if we are flicking exactly
to the end of a list.

Change-Id: Iad56e433bc1ba7d62f0553c4355469c9861df919
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
9 years agoUse a list of lists for free chunks instead of merging in one list
Jocelyn Turcotte [Fri, 9 Jan 2015 17:52:56 +0000 (18:52 +0100)]
Use a list of lists for free chunks instead of merging in one list

This remove the tedious merging of free heap slots into one big list
after sweeping. It now lets each chunk keep its 0-terminated list of
free items and by then linking chunks together in a list for those
containing at least one free item.

The chunk metadata is moved at the beginning of the allocated VM
region to avoid moving it all around while sorting
MemoryManager::Data::heapChunks.

Change-Id: Ia93c2eb7feca0779a28aea5149dd066dacbfa494
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoFix a harmless valgrind warning in RegExpObject
Jocelyn Turcotte [Fri, 9 Jan 2015 17:53:37 +0000 (18:53 +0100)]
Fix a harmless valgrind warning in RegExpObject

Only even values are initialized by the RegExp engine and the
compiler might reorder end to be tested before start, which would
let valgrind complain about branching on an uninitialized value.

Fix the issue by only checking if start is offsetNoMatch since it is
implied in the implementation that start == -1 => end == -1.
This matches the behavior of RegExpMatchesArray::reifyAllProperties in WebKit

Change-Id: Ifde1c5bc99da2a7929cd096bf477cae8799e4fed
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoImprove startup of bindings using QQuickScreen
Simon Hausmann [Wed, 29 Oct 2014 08:58:03 +0000 (09:58 +0100)]
Improve startup of bindings using QQuickScreen

We can optimistically initialize the underlying QScreen to the primary
screen and this way ensure that in the common case the evaluation of
bindings using the screen's attached properties results in correct calculations
on startup. This way we can avoid re-evaluating the bindings again later.

Previously on startup all the returned values were zero and the bindings got
evaluated again once a window was assigned.

Change-Id: I98ba5905953f0b5054d924919239d178570250d3
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
Reviewed-by: J-P Nurmi <jpnurmi@theqtcompany.com>
Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
9 years agoRename QML debug macro to Qt naming style
Pasi Petäjäjärvi [Wed, 17 Dec 2014 10:00:41 +0000 (12:00 +0200)]
Rename QML debug macro to Qt naming style

With this change the macro is in line with QT_NO_<feature> style
of naming macros. This way it will also be automatically added to
the file mkspecs/qmodule.pri in QT_NO_DEFINES value.

Change-Id: I96041438ef68bbcbc4e66301b0f5fe1212129c1a
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Reviewed-by: Ulf Hermann <ulf.hermann@theqtcompany.com>
9 years agoV4 IR: move the MemberResolver out of IR::Temp.
Erik Verbruggen [Fri, 9 Jan 2015 13:17:31 +0000 (14:17 +0100)]
V4 IR: move the MemberResolver out of IR::Temp.

Temps are copied around a lot. This patch reduces the size by storing a
single pointer to the resolver.

Change-Id: I074b8b729fce310542cf4697ef42107085b304b3
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
9 years agoAdd ability to retrieve QJSEngine for a given QObject
Simon Hausmann [Mon, 12 Jan 2015 12:07:38 +0000 (13:07 +0100)]
Add ability to retrieve QJSEngine for a given QObject

[ChangeLog][QtQml] Added qjsEngine(QObject*) getter similar to qmlEngine(object)
that allows retrieving the engine for an exposed object.

Change-Id: Id14adec58d45fe58133f65bab773b07d6bc18569
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
9 years agoClean up renderer visualization a bit.
Gunnar Sletta [Mon, 12 Jan 2015 13:50:36 +0000 (14:50 +0100)]
Clean up renderer visualization a bit.

viewport was currently unused and adreno 305 was confused by
the tweak.w > 0.0 when the input was 0.0f, so write it
in a slightly more straightforward manner.

Change-Id: I101ff71dcb04ca531e91cc5522876d71f368cdc8
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
9 years agoQV4::String is not an Object
Lars Knoll [Mon, 12 Jan 2015 12:48:47 +0000 (13:48 +0100)]
QV4::String is not an Object

Remove all the code related to Object vtable's in here. This code
never got called anyway, as it would require casting to an Object
to call it (which would of course fail for Strings).

Change-Id: Ib62bb1b10999304cb65f6030d805698b9f60700d
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoGet rid of Value::engine()
Lars Knoll [Sat, 10 Jan 2015 21:04:54 +0000 (22:04 +0100)]
Get rid of Value::engine()

This method is not guaranteed to return an engine. We're safer
checking for the value being an object first and then getting
the engine from there.

Change-Id: I5c95e675337e545f2421613bd31c42d1e58d6f9a
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoV4 JIT: ARM: move registers around.
Erik Verbruggen [Thu, 18 Dec 2014 13:59:49 +0000 (14:59 +0100)]
V4 JIT: ARM: move registers around.

In 6572d4e50d73ac60a8974d07de74c27a7f99ebef we moved the
addressTempRegister to r10, and in
d8b276a59402cbbe6d070ba38805350e7f3dd8a1 we made sure that the YarrJIT
saves it too. JSC solved this by moving it to r6, which is already
saved by the YarrJIT. To make a future update of the assembler easier,
we also move it to r6.

This requires that we move our scratch register too. But, because it is
used a lot, we don't want it above r7 for Thumb2 reasons. Therefore, we
move the engine to r10, and the scratch register to r5.

Change-Id: I35be539940d9fe80971973cfa7f3a8dab2196a1e
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoDisallow QQmlDebugServer::enable for QT_QML_NO_DEBUGGER
Ulf Hermann [Fri, 12 Dec 2014 13:53:09 +0000 (14:53 +0100)]
Disallow QQmlDebugServer::enable for QT_QML_NO_DEBUGGER

This mirrors the behavior of the QQmlDebugServer constructor.
Unfortunately we have two #defines to disable the debug server,
QT_QML_NO_DEBUGGER and QQML_NO_DEBUG_PROTOCOL. We should honor both of
them as people might rely on either of them to effectively prevent the
debug server from working.

Change-Id: I0bc0d48632eaa05c471d0afed6fc48436116746a
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoDefine vtable for CatchContext
Lars Knoll [Sat, 10 Jan 2015 16:16:10 +0000 (17:16 +0100)]
Define vtable for CatchContext

Change-Id: I987e38f843881137b4e3241f68ecdf5516f95515
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoMove extensible into the internal class
Lars Knoll [Fri, 9 Jan 2015 22:36:57 +0000 (23:36 +0100)]
Move extensible into the internal class

With this, we can now save one pointer per Heap
object.

Change-Id: I7f69193ff51c9fd9c5dbfba90aa1ebb3f93da2e6
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoFold the markBit into the internalClass pointer
Lars Knoll [Fri, 9 Jan 2015 21:02:40 +0000 (22:02 +0100)]
Fold the markBit into the internalClass pointer

Change-Id: I79f9286275f833dd01a3193042976d1f86ed5019
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoFold the inUse flag into the internalClass pointer
Lars Knoll [Fri, 9 Jan 2015 18:48:56 +0000 (19:48 +0100)]
Fold the inUse flag into the internalClass pointer

Revert the flag (ie. flag == 0 means the item is used), and fold it
into the second lowest bit of the internalClass/nextFree field.

Change-Id: I7b690fdce00d16aa538fa70a269a755511477c5c
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoMove subType from Heap::Base into Heap::String
Lars Knoll [Fri, 9 Jan 2015 14:10:52 +0000 (15:10 +0100)]
Move subType from Heap::Base into Heap::String

This is the only place it's still being used

Change-Id: I7341986278b1ae47d898cae3df605a23b34eebe2
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoRemove subtype usage in ErrorObject
Lars Knoll [Fri, 9 Jan 2015 13:32:57 +0000 (14:32 +0100)]
Remove subtype usage in ErrorObject

Change-Id: I77e23516270a2330ec22215aef6782a38d7fca09
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoRemove the StringType_UInt subtype
Lars Knoll [Fri, 9 Jan 2015 12:56:47 +0000 (13:56 +0100)]
Remove the StringType_UInt subtype

It's not really used, and doesn't optimise anything really.
Additionally get rid of some code duplication.

Change-Id: I6502512e6df58db2c0264ea43d91a23c7585427c
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoGet rid of subtype usage in Function objects
Lars Knoll [Fri, 9 Jan 2015 12:28:40 +0000 (13:28 +0100)]
Get rid of subtype usage in Function objects

Change-Id: Ic84ddab292cb69e79dac0f2b8a87b96b096360d8
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoGet rid of hasAccessorProperty in Heap::Base
Lars Knoll [Fri, 9 Jan 2015 12:13:04 +0000 (13:13 +0100)]
Get rid of hasAccessorProperty in Heap::Base

This shouldn't affect performance as we can just as well
check for cases where we need to take the slow path
differently.

Change-Id: I4b9f69c39e9e64b437820ca3a6ea43e8877f2cf3
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoGet rid of the needsActivation flag in Heap::Base
Lars Knoll [Fri, 9 Jan 2015 11:30:01 +0000 (12:30 +0100)]
Get rid of the needsActivation flag in Heap::Base

Change-Id: Idcec374cb6d16aabf919c23d7236b76d9d047527
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoGet rid of the bindingKeyFlag
Lars Knoll [Fri, 9 Jan 2015 11:11:09 +0000 (12:11 +0100)]
Get rid of the bindingKeyFlag

Instead use the vtable to identify that we have a
binding function.

Change-Id: I794aebb6fb83f648ba36f2f15cad94d2af3cae91
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoStart cleaning up flags in Heap::Base
Lars Knoll [Fri, 9 Jan 2015 11:01:06 +0000 (12:01 +0100)]
Start cleaning up flags in Heap::Base

The goal is to get rid of the flags here and reduce
the size of each GC'ed object with a pointer.

Change-Id: I8c876810037756b85a646348cc5992a688588ea5
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoQML 3rdparty: revert unnecessary change.
Erik Verbruggen [Wed, 17 Dec 2014 12:25:22 +0000 (13:25 +0100)]
QML 3rdparty: revert unnecessary change.

It is the change to DataLog.h, which in turn forces the other changes in
order to match types.

Change-Id: Ie17e7efbd6a4d380a3b7383b0fd0243c6f68d0d5
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoQV4: Use QVarLengthArray in cleanupBasicBlocks.
Robin Burchell [Sun, 21 Dec 2014 23:00:26 +0000 (00:00 +0100)]
QV4: Use QVarLengthArray in cleanupBasicBlocks.

Avoids heap allocations, drops around ~60ms off my morbid testcase in doing so.
QBitArray is still allocating, meaning this function isn't "free", but it's now
at 0.9% of runtime vs the 1.3% it was before, so something for another day.

Change-Id: Ie0db8e0312bde5f67b37250d04b4d65e1f0b034d
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoFix compiler warning about use of uninitialized variable
Lars Knoll [Fri, 9 Jan 2015 10:51:03 +0000 (11:51 +0100)]
Fix compiler warning about use of uninitialized variable

Change-Id: Ic9218d82c5f47d464a6536759cfe2c6dbfc9f985
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
9 years agoAdd Window.width and Window.height attached properties
J-P Nurmi [Mon, 5 Jan 2015 20:00:40 +0000 (21:00 +0100)]
Add Window.width and Window.height attached properties

[ChangeLog][QtQuick] Added Window.width and Window.height attached
properties

Change-Id: I3ef590a0d3e6fa660ed88992d5ae843deb09c7bc
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
9 years agoTest: make mouse press, release, click and double click default to the center of...
Albert Astals Cid [Fri, 9 Jan 2015 09:49:47 +0000 (10:49 +0100)]
Test: make mouse press, release, click and double click default to the center of the item

Most of the times you just want to act on the item not caring the position.
This helps for cleaner test code

Change-Id: I0e8a4919c503e3fd6dee60e1bd937ac57622279f
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Reviewed-by: Christopher Adams <chris.adams@jollamobile.com>
Reviewed-by: Michael Brasser <michael.brasser@live.com>
9 years agoQQuickGridMesh: Avoid a signal connection per mesh instance by just calling the signa...
Robin Burchell [Wed, 7 Jan 2015 21:00:00 +0000 (22:00 +0100)]
QQuickGridMesh: Avoid a signal connection per mesh instance by just calling the signal directly.

This can be instantiated a fair number of times, leading to a lot of signal
connections. Since the signal is so simple, just place a function call inline
and avoid unnecessary allocations.

Change-Id: I031245c46bf797898f22ed991d0e97d73728bdf5
Reviewed-by: Michael Brasser <michael.brasser@live.com>
Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
9 years agoV4 JIT: Hoist QVector allocation out of a loop.
Robin Burchell [Mon, 22 Dec 2014 14:32:06 +0000 (15:32 +0100)]
V4 JIT: Hoist QVector allocation out of a loop.

Use erase() each loop iteration, but preserve the underlying allocation.

Change-Id: I673766f5567794215465daa597a4839a4900450b
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoQV4: Don't heap allocate blockNumbers.
Robin Burchell [Sun, 21 Dec 2014 21:55:24 +0000 (22:55 +0100)]
QV4: Don't heap allocate blockNumbers.

Analysis of the allocations in BasicBlockSet show a huge amount of time spent in
allocating and freeing BasicBlockSet, which involves heap allocations. Most of
the time, blockNumbers is tiny (at least in my testing) - 0 to 1 in size at
deletion time. By inlining the (small) array, we save a nasty penalty.

This shaves around 400ms off the optimizer phase of my morbid QML testcase.

Change-Id: I46319173b5408a0d7a1b9663fdc516c9e5ca410e
Reviewed-by: Erik Verbruggen <erik.verbruggen@theqtcompany.com>
9 years agoQML: Remove unused field from struct.
Erik Verbruggen [Fri, 9 Jan 2015 09:44:31 +0000 (10:44 +0100)]
QML: Remove unused field from struct.

Change-Id: I574dd5de67038ecb2e4d81ed69ed535e3be9ea05
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoQML: fix uninitialized variable use.
Erik Verbruggen [Fri, 9 Jan 2015 09:40:19 +0000 (10:40 +0100)]
QML: fix uninitialized variable use.

/Users/erik/dev/qt5-dev/qtdeclarative/src/qml/qml/qqmlpropertycache.cpp:1539:5: warning: variable 'offset' is used uninitialized whenever switch default is taken [-Wsometimes-uninitialized]
    default:
    ^~~~~~~
/Users/erik/dev/qt5-dev/qtdeclarative/src/qml/qml/qqmlpropertycache.cpp:1544:15: note: uninitialized use occurs here
    *index -= offset;
              ^~~~~~

Change-Id: I92538c8a3cf2a192be4c62e29b06b2c940b6def5
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoReplace InternalClass transitions hash with a sorted vector.
Robin Burchell [Thu, 8 Jan 2015 00:28:58 +0000 (01:28 +0100)]
Replace InternalClass transitions hash with a sorted vector.

In a reasonable test application, there were some 1697 transition entries. Out
of these, 1663 of them had only a single item. The remainder, with the exception
of three, had <10 items. Only one of these had a count of >50 items (86).

As can be seen, most of the time, transitions is usually quite sparsely
populated, so using a hash is a large amount of overhead considering there's
just a few elements. For the times when it isn't, the vector being sorted
should help take care of that.

Since transitions are never removed, we can use a similar trick to
ba690fb73864915b4a35bbec5b7dc134ff1dafd0 and use a sorted vector to store them.

Compared to the hash approach, this saved ~412kb according to malloc_stats on a
reasonably comprehensive test application. Coincidentally, this also improved
v8bench for me by ~10%.

Note that this undoes 132cdfa69cae45d0c02ea715ce58722bbcd57e73, but the
expectation is that the fewer allocations done by using a vector will outweigh
the need to reserve any specific allocation initially.

Change-Id: Iec57a7db7e9a60347c9683b1cb1598f6d9c866f7
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
9 years agoStabilize the drag related autotests for higher dpi displays
Lars Knoll [Fri, 9 Jan 2015 09:53:12 +0000 (10:53 +0100)]
Stabilize the drag related autotests for higher dpi displays

Higher DPI displays might have a larger StartDragDistance (at
least on X11), breaking the autotest on these displays.

Change-Id: I9768a245a7654665dd9f718100289e9416d8c855
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoRemove QQmlTrace. We have a real profiler.
Erik Verbruggen [Thu, 18 Dec 2014 09:37:22 +0000 (10:37 +0100)]
Remove QQmlTrace. We have a real profiler.

Change-Id: I50d981b277187327c2c63f8372f64db1300ed9ef
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoCleanup variant conversion code
Lars Knoll [Fri, 2 Jan 2015 14:07:35 +0000 (15:07 +0100)]
Cleanup variant conversion code

Make public methods proper members of the ExecutionEngine, and
move private methods into the .cpp file only.

Change-Id: I3ca49e39bb1c4e559a2c63346e6ae6cfa446147d
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoMove the variant conversion methods from qv8engine to qv4::ExecutionEngine
Lars Knoll [Fri, 2 Jan 2015 13:37:26 +0000 (14:37 +0100)]
Move the variant conversion methods from qv8engine to qv4::ExecutionEngine

Change-Id: Ibd529ae5cc3ba06f46152e9daa9119a4e7a2561c
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoThis method is only used one place, so inline it there
Lars Knoll [Thu, 1 Jan 2015 14:24:33 +0000 (15:24 +0100)]
This method is only used one place, so inline it there

Change-Id: Ia8b75965208c9687163ddaf982c4081c1ee504d4
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoMake the remaining variant conversion methods static
Lars Knoll [Thu, 1 Jan 2015 13:25:08 +0000 (14:25 +0100)]
Make the remaining variant conversion methods static

And make most private as well

Change-Id: If215aba4985a5150aa5a901f2e50e31bf0afa709
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoRemove most v8engine references in xhr
Lars Knoll [Wed, 31 Dec 2014 15:15:42 +0000 (16:15 +0100)]
Remove most v8engine references in xhr

Change-Id: Ibbb38d57782f8566502852a2cb3cfd4a28f9dfc3
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoRemove v8engine from qmlcomponent and canvas2d
Lars Knoll [Wed, 31 Dec 2014 15:03:34 +0000 (16:03 +0100)]
Remove v8engine from qmlcomponent and canvas2d

Change-Id: I575ba208de24ffe90bd02905aba67b0b08c5115e
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoRemove v8engine dependency in localstorage
Lars Knoll [Wed, 31 Dec 2014 14:49:59 +0000 (15:49 +0100)]
Remove v8engine dependency in localstorage

Change-Id: I69616efe6629bcae154ff36f3e1aebd2dfa87aa4
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoRemove v8engine dependency in the builtin functions
Lars Knoll [Wed, 31 Dec 2014 14:49:39 +0000 (15:49 +0100)]
Remove v8engine dependency in the builtin functions

Change-Id: If9d50709548a5295457a20907bdf5e1153f49071
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoRemove v8engine dependency from qqmllocale
Lars Knoll [Wed, 31 Dec 2014 12:26:48 +0000 (13:26 +0100)]
Remove v8engine dependency from qqmllocale

Change-Id: Ib6f51915c5a049592c2958624017eb2f8ad962d8
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoMove extension mechanism over to use the v4 engine
Lars Knoll [Wed, 31 Dec 2014 12:21:39 +0000 (13:21 +0100)]
Move extension mechanism over to use the v4 engine

Change-Id: Ib329fc7bcae3c78d962a116f53b2244a71f81228
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoRemove v8engine usage in the value type provider
Lars Knoll [Tue, 30 Dec 2014 20:47:49 +0000 (21:47 +0100)]
Remove v8engine usage in the value type provider

Change-Id: I6b26a8249175a86c6e15d000b24ba3300e112715
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoClean up JS .import/.pragma directive scanning
Simon Hausmann [Fri, 5 Dec 2014 15:32:56 +0000 (16:32 +0100)]
Clean up JS .import/.pragma directive scanning

There's a scanner in QQmlJS::Lexer::scanDirectives that can parse those, so
let's get rid of extra parser that operates on a string. Instead this way we
can do the scanning all in one shot, avoid detaching a copy of the source code
string and (most importantly) bring the parser closer to the copy in Qt
Creator, which uses the directives approach to extract imports and pragma.

Change-Id: Iff6eb8d91a45d8a70f383f953115692be48259de
Reviewed-by: Fawzi Mohamed <fawzi.mohamed@theqtcompany.com>
9 years agoRemove qv8engine usage in the contextwrapper
Lars Knoll [Tue, 30 Dec 2014 20:36:00 +0000 (21:36 +0100)]
Remove qv8engine usage in the contextwrapper

Change-Id: Iaf807add5d971e96cac57e38e13385e901f9c930
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoGet rid of QV8Engine::toString
Lars Knoll [Tue, 30 Dec 2014 17:29:21 +0000 (18:29 +0100)]
Get rid of QV8Engine::toString

Change-Id: Ib51fa09ae251c1b7b8878ecdf920016f8fcc0067
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoRemove v8engine pointer from QQmlV4Function
Lars Knoll [Tue, 30 Dec 2014 16:06:02 +0000 (17:06 +0100)]
Remove v8engine pointer from QQmlV4Function

Change-Id: I68ddd79b8866ef9b8628a2eab1118d3ee3d72759
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoGet rid of more uses of QV8Engine
Lars Knoll [Tue, 30 Dec 2014 15:38:20 +0000 (16:38 +0100)]
Get rid of more uses of QV8Engine

Change-Id: I763728b1685e8e68bcf815dda4dd8e5757f59dd2
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoReduce v8engine dependency for the list model
Lars Knoll [Tue, 30 Dec 2014 15:26:18 +0000 (16:26 +0100)]
Reduce v8engine dependency for the list model

Change-Id: Ib9e39a886c918a8f6ee1477465895739f90e1a0a
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoFurther reduce v8engine dependencies
Lars Knoll [Tue, 30 Dec 2014 15:04:32 +0000 (16:04 +0100)]
Further reduce v8engine dependencies

Change-Id: I9f50f5ed1928de0c389c9646b308b431b51dae37
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoThe property() calls in the proeprty cache only require a QJSEngine now
Lars Knoll [Tue, 30 Dec 2014 14:54:58 +0000 (15:54 +0100)]
The property() calls in the proeprty cache only require a QJSEngine now

Change-Id: Ic4a944b4f1dd02ad2f0284acad5f3135068f66df
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoAllow importing protected modules with different major versions
J-P Nurmi [Wed, 7 Jan 2015 14:19:29 +0000 (15:19 +0100)]
Allow importing protected modules with different major versions

This allows QtQuick.Controls 1.x and 2.x imports to co-exist even
if they are two different plugins with the same module directive.

Change-Id: Idee302439e3c2fd6813ba2f41b69144fbae7902c
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoMake waitForRendering without item fail instead of crash
Albert Astals Cid [Wed, 7 Jan 2015 15:17:52 +0000 (16:17 +0100)]
Make waitForRendering without item fail instead of crash

Change-Id: Icd276ed19087c2a1cde8c626347c696efb21ceb3
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoQV4: Lower time spent in indirections and allocations.
Robin Burchell [Sun, 21 Dec 2014 19:15:09 +0000 (20:15 +0100)]
QV4: Lower time spent in indirections and allocations.

Change data type for defsUntyped from QList -> QVector & reserve space when
creating the list. Drops ~250ms off a pretty morbid QML testcase, most, but not
all of which was spent in allocations.

Change-Id: I2ed8c62e7d41ab353a0194da268a2b430f079474
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoV4 IR: Change data type used in RemoveSharedExpressions pass.
Robin Burchell [Sun, 21 Dec 2014 18:44:41 +0000 (19:44 +0100)]
V4 IR: Change data type used in RemoveSharedExpressions pass.

Profiling the loading of a pretty morbidly large QML file consistently showed
that this was quite slow, around 1300ms in removeSharedExpressions, of which a
good >600-700ms (I didn't count exactly, but it was a very large amount) was
down to allocating and freeing QHash nodes.

As we don't require removals, leaving insertion and lookup as the only two
remaining options, a sorted vector becomes a viable alternative (credit to João
Abecasis for the idea).

An additional benefit of this change is that the two hash lookups are now
compressed into a single 'hash' lookup (via the lower_bound call) instead of
separately using contains() / insert().

Measuring the exact saving is difficult, but it looks like this saves between
700-1000ms off the runtime RemoveSharedExpressions. After this patch, malloc and
free are dominating the optimizer run, instead of any particular method.

Change-Id: I6c0bb8495eac4dd3613ba0274e8802d7bd609460
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoFix property access and method invocation on value types that use inheritance
Simon Hausmann [Wed, 7 Jan 2015 10:51:37 +0000 (11:51 +0100)]
Fix property access and method invocation on value types that use inheritance

For gadgets/value types we use moc's static_metacall, which doesn't call the
parent class implementation. Therefore before placing a static metacall we
must resolve the indicies and find the right meta-object.

Change-Id: I258e3d9ecfc704498c68772dc42b16134a3bfd83
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
9 years agoUnify QQmlDirParser version parsing and error reporting
J-P Nurmi [Wed, 7 Jan 2015 12:32:33 +0000 (13:32 +0100)]
Unify QQmlDirParser version parsing and error reporting

Add a parseVersion() helper function to avoid duplicating
the same version parsing logic three times.

Change-Id: I4e5b6a8c86ee3a26c4eb91c660a81176ac0346cf
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
9 years agoPrevent windows outside the gui thread in rendercontrol example
Laszlo Agocs [Tue, 16 Dec 2014 11:49:08 +0000 (12:49 +0100)]
Prevent windows outside the gui thread in rendercontrol example

In the multithreaded case we attempted to create QWindows outside
the gui thread on platforms where QOffscreenSurface is backed by
the hidden QWindow in the absence of a better solution. This has
to be avoided. Therefore, pass a suitable surface from the gui
thread instead.

This will avoid "Attempting to create QWindow-based QOffscreenSurface
outside the gui thread." type of warnings when running on OS X with
--threaded.

Change-Id: Ie3ebeeeaa9e6bdf83e763e40213e2940fbfde667
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@theqtcompany.com>
Reviewed-by: Jørgen Lind <jorgen.lind@theqtcompany.com>
9 years agoqmltime: Correct module name in error message.
Robin Burchell [Tue, 6 Jan 2015 18:36:02 +0000 (19:36 +0100)]
qmltime: Correct module name in error message.

Change-Id: Icccad866bdbaf53bf2cb3f1aff30ecd9ff6d06a5
Reviewed-by: Michael Brasser <michael.brasser@live.com>
9 years agoFix the vertex ordering of merged triangle strips
Jocelyn Turcotte [Mon, 5 Jan 2015 17:14:56 +0000 (18:14 +0100)]
Fix the vertex ordering of merged triangle strips

Culling and gl_FrontFacing depend on the vertex order matching the
value set through glFrontFace. To match the default counter-clockwise
order we need to preserve the parity of triangles relatively to the
start of the indices argument of glDrawElements, but we break this
parity because of the degenerate triangles between merged strips.

Fix the issue by skipping the first degenerate triangle, the parity
of following strips will be preserved since they are then separated
by two triangles.

This fixes a regression of
tests/manual/scenegraph_lancelot/data/shaders/culling/culling_1.qml
triggered by 38cab579a0c5398b7621221fd8609bc43cf1f3c5.

Change-Id: Iefa7eaab68112d31be9d8646bd288eb000528cd5
Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
9 years agoReuse the memory we use for vertex uploads.
Gunnar Sletta [Tue, 6 Jan 2015 07:40:21 +0000 (08:40 +0100)]
Reuse the memory we use for vertex uploads.

Every batch would have its own buffer with its own memory
and the original idea was that it would stabilize so that
the same batch would be used over and over, so the memory
allocatd for each batch's buffer would be reused. In practice
batches get discarded and recycled in somewhat arbitrary
order so we always end up reallocating.

Instead, use a single buffer for all uploads. This saves us several
reallocations per frame, and also prevents pooling of several
potentially large allocated blocks inside the renderer.

The exception is when using visualization or for drivers
which have broken index buffer support (nouveau only currently),
where we keep the existing behavior as the buffer data is
needed during rendering and visualization.

Change-Id: Id29095e00128ec1ee6d4ac3caa8f2c17cc7bbd27
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
9 years agoSome minimal changes to make qmlpuppet compile again
hjk [Tue, 6 Jan 2015 09:35:32 +0000 (10:35 +0100)]
Some minimal changes to make qmlpuppet compile again

Access to QJSEnginePrivate::createCache and the previous
signature of QQmlPropertyCache::invalidate is used.

Change-Id: Ie2578eee33ee4ebb2cdc4574d8d1cb7c8209868e
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Reviewed-by: Thomas Hartmann <Thomas.Hartmann@digia.com>
9 years agoRemove bogus assert.
Gunnar Sletta [Mon, 5 Jan 2015 12:21:45 +0000 (13:21 +0100)]
Remove bogus assert.

It is perfectly valid to reparent nodes to a parent
that is part of an existing hierarchy.

Change-Id: Icf2dbe6030d399047e7ebe735e3096d1a8cd8c0e
Task-number: QTBUG-43278
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
9 years agoTraverse children correctly when reparenting.
Gunnar Sletta [Mon, 5 Jan 2015 11:38:18 +0000 (12:38 +0100)]
Traverse children correctly when reparenting.

Since the children are being removed from the parent, using
nextSibling on the child won't work. We need to extract the
first child from the parent until there are no more children
left.

Change-Id: Ifca5f2760e2b1c7ba56c198623c5dc9d82c7560f
Task-number: QTBUG-42530
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
9 years agoAdd propertyName to error
Albert Astals Cid [Fri, 19 Dec 2014 10:21:00 +0000 (11:21 +0100)]
Add propertyName to error

May help a bit to the reader, even if the line is already there
sometimes it can be confusing if it is a default property like data

Change-Id: I5cb8e8833c78a784ad4f5541d094840477e8f350
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoUse QV4::ScopedObject typedef instead of actual type
Oleg Shparber [Wed, 31 Dec 2014 18:37:47 +0000 (10:37 -0800)]
Use QV4::ScopedObject typedef instead of actual type

Change-Id: I0b68c534ea513a7c230b12114f6b42b069f9864b
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoUse QV4::ScopedArrayObject typedef instead of actual type
Oleg Shparber [Wed, 31 Dec 2014 18:40:16 +0000 (10:40 -0800)]
Use QV4::ScopedArrayObject typedef instead of actual type

Change-Id: I975536745ac6c264aca074f84d223fbec7682d3d
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoUse QV4::ScopedContext typedef instead of actual type
Oleg Shparber [Wed, 31 Dec 2014 18:43:46 +0000 (10:43 -0800)]
Use QV4::ScopedContext typedef instead of actual type

Change-Id: I71c6c9cf030e347fbc5e4073e9ca338a9ce95999
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoUse QV4::ScopedFunctionObject typedef instead of actual type
Oleg Shparber [Wed, 31 Dec 2014 18:42:15 +0000 (10:42 -0800)]
Use QV4::ScopedFunctionObject typedef instead of actual type

Change-Id: I6b4effaa5bef992b4ae9402eea7fe655bc7b18f0
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoUse QV4::ScopedString typedef instead of actual type
Oleg Shparber [Wed, 31 Dec 2014 18:34:52 +0000 (10:34 -0800)]
Use QV4::ScopedString typedef instead of actual type

Change-Id: I64ecbf6cea463387a70e909ecc5f9165d22a7b0f
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoFix build: include <qdatastream.h> before using QDataStream
Thiago Macieira [Fri, 19 Dec 2014 03:58:58 +0000 (19:58 -0800)]
Fix build: include <qdatastream.h> before using QDataStream

Change-Id: I779e0cd705f664368b47763d4367b9dc377c1770
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoRemove unused variable
Lars Knoll [Tue, 30 Dec 2014 14:52:06 +0000 (15:52 +0100)]
Remove unused variable

Change-Id: I399e66822f52e35d122d3a20bb8de20206e5864d
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoAdd a direct accessor to retrieve the JS engine from the ExecutionEngine
Lars Knoll [Tue, 30 Dec 2014 14:31:09 +0000 (15:31 +0100)]
Add a direct accessor to retrieve the JS engine from the ExecutionEngine

Change-Id: I2617143e39f354657e12541f3796a583e9934118
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoReduce v8engine dependency in the type wrapper
Lars Knoll [Tue, 30 Dec 2014 14:21:16 +0000 (15:21 +0100)]
Reduce v8engine dependency in the type wrapper

Change-Id: I3a50aa3c0929c14ad856463635bf2fb2188f5c9f
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoReduce v8engine dependency in qv4include
Lars Knoll [Tue, 30 Dec 2014 14:13:29 +0000 (15:13 +0100)]
Reduce v8engine dependency in qv4include

Change-Id: Idc50e7ed9e0de5c8742688c8493c2124075450ee
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoRemove v8engine dependency in fromVariant conversions
Lars Knoll [Tue, 30 Dec 2014 10:54:59 +0000 (11:54 +0100)]
Remove v8engine dependency in fromVariant conversions

Change-Id: I3427129dc7a0e68c8fa0b61f353835e2bee179a0
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoRemove v8engine dependency in toVariant conversions
Lars Knoll [Tue, 30 Dec 2014 10:39:53 +0000 (11:39 +0100)]
Remove v8engine dependency in toVariant conversions

Change-Id: I0f2f77c9cc268a0c5ca3ffe0cd66fc98bb1964b3
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoDo not cause SegFault when importing empty javascript
Nobuaki Sukegawa [Sun, 14 Dec 2014 17:33:05 +0000 (02:33 +0900)]
Do not cause SegFault when importing empty javascript

Change-Id: I31f6571e73b5dd74bf3ade5cadc2daa02475b5cb
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoEnable gadget wrapping for custom value types
Simon Hausmann [Thu, 20 Nov 2014 09:42:34 +0000 (10:42 +0100)]
Enable gadget wrapping for custom value types

[ChangeLog][QtQml] Custom C++ value types annotated with Q_GADGET are now fully
accessible in the QML and QJSEngine JavaScript environment.

QJSEngine::toScriptValue can be used for injection and fromScriptValue to
extraction. The QML "built-in" gadget wrappers for QPoint and the gui types are
not exposed this way, toScriptValue(point) will still return an opaque QVariant
wrapper. We could expose the core types right away, but then we would be
lacking an API to enable use of the Gui types that are registered in QtQuick.

It would be better to make the core types in qtbase gadgets and thus enable
them without the need for hooks and init functions to be called by the user.

Task-number: QTBUG-29769
Change-Id: I8179cd599bdc1209ff61cfdbdda419cb400296bb
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
9 years agoRemove v8engine dependency from qv4serialize.*
Lars Knoll [Tue, 30 Dec 2014 10:15:18 +0000 (11:15 +0100)]
Remove v8engine dependency from qv4serialize.*

Change-Id: I5b4c1247286bf18c96df3b68b7bae9feefbbdbc9
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoDon't store a v8engine pointer in qqmllistwrapper
Lars Knoll [Tue, 30 Dec 2014 09:59:43 +0000 (10:59 +0100)]
Don't store a v8engine pointer in qqmllistwrapper

Change-Id: I21b055deb74aafff8b2ee1cdce776e06f154dcaa
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoRemove unused enum value
Lars Knoll [Tue, 30 Dec 2014 09:59:13 +0000 (10:59 +0100)]
Remove unused enum value

Change-Id: I1e1a34a974cea129fcf4513c0a163254d6c114cd
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoFix constructions of QJSEngine objects
Lars Knoll [Thu, 1 Jan 2015 15:33:04 +0000 (16:33 +0100)]
Fix constructions of QJSEngine objects

The private class is not empty anymore, so calling the wrong
constructor would lead to memory corruption

Change-Id: I6d477fc63bba46be733273f548397c2a50ef2bf4
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoMake QV4::Value::isNaN() inline
Oleg Shparber [Tue, 30 Dec 2014 22:11:59 +0000 (14:11 -0800)]
Make QV4::Value::isNaN() inline

Change-Id: Ia80d3b150822ec9b3965c981d58660567ca73ec1
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoQV4::InternalClass: reserve space for transitions.
Robin Burchell [Thu, 18 Dec 2014 11:43:18 +0000 (12:43 +0100)]
QV4::InternalClass: reserve space for transitions.

Profiling of allocations shows that this is one of the most frequent allocators.

Change-Id: Iae0350c61bfe37381577642b9a93064377f45c1d
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
9 years agoMake QQmlPropertyCache available in QJSEngine
Simon Hausmann [Thu, 20 Nov 2014 08:07:52 +0000 (09:07 +0100)]
Make QQmlPropertyCache available in QJSEngine

The QQmlEngine has two containers for property caches, one for QML types and
one for all-purpose meta-objects. The latter is rather useful and now being
moved to QJSEngine to be available there.

Change-Id: Ieab65c400b8a2e410e5f9eee6d603162dbb864d9
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
9 years agoPrepare for QQmlPropertyCache to become available in QJSEngine
Simon Hausmann [Thu, 20 Nov 2014 07:56:36 +0000 (08:56 +0100)]
Prepare for QQmlPropertyCache to become available in QJSEngine

The cache is seemingly tied to QQmlEngine, but it isn't. A lot of
times a QQmlEngine parameter is unnecessarily dragged around and the
engine member is option as well as it turns out.

Change-Id: Iffd2a5046e9785249689ebfcbc8a0ad509f76aea
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
9 years agoFix build on MinGW
Konstantin Ritt [Tue, 2 Dec 2014 15:33:39 +0000 (19:33 +0400)]
Fix build on MinGW

- alloca() needs malloc.h
- crtdbg.h couldn't be found on MinGW

Change-Id: Ibbf91a58d39ef1e2572baae3c409393acf7aa5df
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
9 years agoRemoved usage of QQmlValueType in QQmlValueTypeWrapper
Simon Hausmann [Wed, 19 Nov 2014 17:12:21 +0000 (18:12 +0100)]
Removed usage of QQmlValueType in QQmlValueTypeWrapper

QQmlValueType doesn't have anything really necessary :). Some code it has, but
that was only called from the wrapper, so it was moved there. This also reduces
one level of memory allocation for the wrapper.

In theory the allocation for the JavaScript wrapper could be changed to be the
size of the wrapper _plus_ the size needed for the gadget. However in
anticipation of wanting to be able to move objects, we can't do that as we
can't memmove() gadgets around - they might contain pointers to memory areas
within.

Change-Id: Icb5a6f5513e3b2c87f6639f6f7b1fb572af08137
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
9 years agoMake QV4::CallData::argument() method constant
Oleg Shparber [Sat, 27 Dec 2014 07:13:54 +0000 (23:13 -0800)]
Make QV4::CallData::argument() method constant

Change-Id: Id2640f6a0c08069764baeac606a25fdb53b23419
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>