| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
There's no need to iterate over all internal classes, as
prototype changes always happen in the first or second
level of the tree.
Change-Id: I99bf11a6cd238286c1547922d61ab47319b6eb97
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Make sure we have at least 2 slots for inline storage available
for regular JS objects. Speeds up JS execution quite a bit, while
still keeping memory consumption low for most other cases.
Change-Id: I01824d8db1ffd828c1c1b6a9cbcf9bf1a9070ec3
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Inline the version taking an identifier, and use that one where
it makes sense.
Change-Id: I414c5999e61cdba219ecd1080957f3037dfebc1b
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | | |
| | | |
| | | |
| | | |
| | | | |
Change-Id: I1f4f4aaad0c8194bce2ebde4503df38cab0990a2
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
This saves another pointer on all Objects.
Currently introduces a slight performance regression
on some of the v8 benchmarks, that needs addressing.
Change-Id: I87de8e1d198d2683f4e903c467ce2a60ba542243
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
And do not store the vtable in Heap::Base anymore. This change
makes the internal class the main distinguishing feature
of all garbage collected objects.
It also saves one pointer on all Objects. No measurable
impact on runtime performance.
Change-Id: I040a28b7581b993f1886b5219e279173dfa567e8
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Prepare for moving the vtable pointer into the internalClass.
This adds the required infrastructure to InternalClass, so it
can store a vtable pointer and properly handles vtable changes.
Change-Id: I688fee1647268dd185d0f9636ab5b3390465daca
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | | |
| | | |
| | | |
| | | |
| | | | |
Change-Id: I3f6ae59d01c7b6c898e98d3b6f65b84a19b8851a
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | | |
| | | |
| | | |
| | | |
| | | | |
Change-Id: I43ddcb4842e501cbea8a950ab6ffa2d906014efd
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
And store them in an enumerated array. This will simplify
upcoming changes.
Change-Id: I82eac03b9f6264843ae625e36e150464fe08be9d
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | | |
| | | |
| | | |
| | | |
| | | | |
Change-Id: Idf87618e4ebff99f3b3c269c950191d67a0182b2
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | | |
| | | |
| | | |
| | | |
| | | | |
Change-Id: I5d1e0d2251e04cc871f9c298849aafac17f23fbf
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Don't store the current context in Moth's run() method, instead
always retrieve it through the engine.
Change-Id: I9d56f2c93a02fc1e2f03839b14b3c0053d60b6b2
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Cut the size of the generated byte code in half, by storing
parameters in a more compact form and always storing the
instruction type in the instruction.
We can still used computed goto's for a fast interpreter, by
looking up the jump point for the next instruction in the jump
table.
Another advantage is that the byte code is now platform independent
(modulo endianness).
The change comes with a 3% performance impact on x86_64, which
is acceptable considering the size savings on the bytecode.
Change-Id: I37de3e1f94611987a85e65ea86536583aa965d6d
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Detect any Chunk that's completely empty, deallocate it and return the
memory to the OS (as far as that's supported).
Change-Id: I6b6a77f2cdf478cbf16aad30a9cae37c98c6500e
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
The enabled property was ignored if it was set before
componentComplete() was called.
[ChangeLog][QtQml] Fixed the QML Connections element
ignoring the initial state of the enabled property
Change-Id: I40c92fcb30f0bb8ca406f248b3bde2fced5ab58f
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
MinGW was unable to link qmlcachegen due to missing symbols from the
autotest-exported class QV4::ExecutableAllocator.
Introduce a separate Q_QML_AUTOTEST_EXPORT macro that is defined
to empty when used by qmldevtools.
Change-Id: Ib7f8984dd7617fae05bb4e1e6cc1fae0745ac3bc
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Loop peeling does in our current JIT not give us any
measurable performance benefits (no measurable diff
in any of the v8 benchmarks), and significantly
increases the size of the generated JIT code.
Change-Id: Icab7887300f9c1cd5891983cbfe5885fc2b4db91
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
This is now actually just as fast as the lookup code,
so disable the generation of lookups for indexed accesses
for now. This saves some runtime memory, as we don't
need the data structures for the lookup.
We can reintroduce lookups, once they offer a real
performance benefit.
Change-Id: Idc3fa7b248e2e25b4b2cd60d5053e2815634c8b7
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | |\|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Contains the fix for tst_TouchMouse::hoverEnabled which has caused
numerous failures in the last few days.
Change-Id: I1e523087a53d1df0334d602e4125f5cddc9bf470
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
qv4alloca_p.h dates from April 2013 and contained just the #includes,
whereas the code in qtqmlglobal_p.h was introduced earlier this year in
commit 87f016ea9eddc874d5cba7d79d0a487d5ef61761. This commit moves the
macros to qv4alloca_p.h and centralizes the support there.
This also updates the #include detection mechanism, by using
QT_CONFIG(alloca_h) to determine which #include to use. See commit
98c1d516b7f7624f7fcd7b9046783e3903a6a42b in qtbase for more details.
Task-number: QTBUG-59700
Started-by: Thiago Macieira <thiago.macieira@intel.com>
Change-Id: Icd0e0d4b27cb4e5eb892fffd14b4b38005ce2ecb
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Task-number: QTBUG-56551
Change-Id: Ide09f177d3f6a3e9902f8ea904b3e6e4b998bd39
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Always export the isel factory method for qmlcachegen, so that we can
link.
Task-number: QTBUG-60597
Change-Id: Ia348ee5dfe0892878e8fce6c8afd30bb8eb54a51
Reviewed-by: Dmitry Shachnev <mitya57@gmail.com>
Reviewed-by: Robin Burchell <robin.burchell@crimson.no>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Add some more optimized lookups for accessing
properties stored inline or in the memberData.
Change-Id: Id74901d1dd91fd60933bf164c2bf90fed86232e3
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Reviewed-by: Robin Burchell <robin.burchell@crimson.no>
|
| | |/
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
It turns out that not using any inline property storage
comes at a relatively high price in terms of memory
consumption, as we always need to also create a
memberData for any object.
This avoids the memberData creation in quite a few
cases, as we use the additional padding we have up
to the 32 byte boundary given by the memory manager
to store some property data.
This complicates property access somewhat. To avoid
performance regressions because of this, add specialized
QV4::Lookup functions that optimize for properties that
are inline or in the memberData struct.
Change seems to be performance neutral on v8-bench on
x86_64, but reduces peak memory usage when running the
benchmark by around 20%.
Change-Id: I0127d31a2d6038aaa540c4c4a1156f45ca3b7464
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Reviewed-by: Robin Burchell <robin.burchell@crimson.no>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Commit 2a812493bc97983b85110f853d3dbe57b54667d8 added the VariantMap
case but forgot to add the break before it (there wasn't a break because
it fell through to default: break).
This is a 6.5 year old issue, though it affected no one because
setVariantMapProperty checks the destination's type again. Found by
GCC 7:
qqmllistmodel.cpp:1075:62: warning: this statement may fall through [-Wimplicit-fallthrough=]
target->setVariantProperty(targetRole, v);
^
qqmllistmodel.cpp:1077:13: note: here
case ListLayout::Role::VariantMap:
^~~~
Change-Id: Ica9894dc9b5e48278fd4fffd14bb35efd18a8a6e
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | |
| | |
| | |
| | |
| | | |
Change-Id: Iad67b9719fe6336b8dfc28de2e88463c588a0849
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Use the global strings instead.
Change-Id: Ia43045ca3f40e80d44956cf8e38511cfc4c8a8bb
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | |
| | |
| | |
| | |
| | | |
Change-Id: I8a725018a5aeb39df370f856cd77d887faa511e3
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
QQmlQmldirData keeps a pointer to a QQmlScript::Import, and an integer
priority. Each Blob that is waiting on it was setting its own import
and priority even though the QQmlQmldirData itself was shared. This
resulted in whichever one began loading last succeeding to load,
and the rest failing. This change instead stores the import and
priority data per-dependent Blob
Fix was originally done by Josh Faust <jfaust@suitabletech.com>. I
added the test.
Task-number: QTBUG-30469
Change-Id: Id3d15569a999a7c22eeb12b431e5daf1ddae51dc
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
|/ /
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This exposes QGuiApplication::platformName() for qml. It is
required at least for tests that are run on the "offscreen" platform
(armv7 tests on qemu).
[ChangeLog][QtQuick] Added Qt.platform.pluginName property.
Task-number: QTBUG-60268
Change-Id: Ie55a282485d4d76ffe7ed8e77359ad7183f579c2
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Add a new logging category that can be used to debug issues with
unexpected binding breakages caused by assignment to previously bound
properties. If enabled, outputs a message when a binding is broken with
detailed location and property/value information.
[ChangeLog][QtQml] The QML engine can now emit informational messages
(in the "qt.qml.binding.removal" logging category) whenever a binding is
lost due to an imperative assignment. This can be used to debug issues
due to broken bindings.
Change-Id: Ie31e5a198450b6f998c1266acfc97e8f33a92e3d
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| |
| |
| |
| |
| | |
Change-Id: Ib073a4161f68bdde50c9287f66f111a49adb7e26
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Only update changed indices in the list model on insertion, deletion or
move. This can greatly improves performance when inserting or removing
near the end of the list, or when moving elements in a large model.
On a work in progress version of qmlbench's modelperf_listmodel_addremove.qml,
this appears to improve performance quite a bit (~40%):
Before: Average: 363.4 frames; using samples; MedianAll=363; StdDev=5.31977, CoV=0.0146389
After: Average: 518.2 frames; using samples; MedianAll=518; StdDev=20.5475, CoV=0.0396517
Change-Id: I8ce7bea4ab8b1c7c3d0fbccc40b9a12ca3eadf59
Reviewed-by: Robin Burchell <robin.burchell@crimson.no>
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
|
| |
| |
| |
| |
| |
| | |
Task-number: QTBUG-57396
Change-Id: I31912677ebfdcea9ba97fe0bb66d56bb82b4c90c
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| |
| |
| |
| |
| |
| |
| | |
That poor Q looked so lonely.
Change-Id: I29a0aa0574fefa5be8ffaa9857e03500c914c830
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| |
| |
| |
| |
| |
| |
| | |
That poor Q looked so lonely.
Change-Id: Ie4cef3fa8f2ecb8ba106654e8a9d6611a9407aa2
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
QQmlComponentPrivate
This feels like a slightly tidier encapsulation.
Change-Id: Iff6c05e1fe7fbc6bb1ec58a7ea42d32ee03187df
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
[ChangeLog][QtQml] Support C++11 scoped enums in QML. These can now be
accessed as <TypeName>.<EnumName>.<EnumValue>
Change-Id: I29bd3f16e980f3e6f1b2390b5a8e9e8e999952a3
Task-number: QTBUG-54961
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Set the bit if Qt is configured with -force-asserts, so that
the asserts won't trigger wrongly.
Task-number: QTBUG-60487
Change-Id: Id256748c74d38ba897c38f448a814a240d978694
Reviewed-by: Robin Burchell <robin.burchell@crimson.no>
Reviewed-by: Michael Brasser <michael.brasser@live.com>
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
|\|
| |
| |
| | |
Change-Id: I71275a2076c3d32ee2896571be882067320a2e9e
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
There was a bug in Chunk::sweep() that would lead
to parts of the memory not being freed as it should
have been.
This happened when an object 'overflowed' into the
next index of the estendBitmap, where we then would
not correctly clear the extends bits.
Fixes performance degradation in qmlbench's
delegates_item_empty_jscreation.qml over multiple runs.
Change-Id: Ia2cecd2ff218e4258a067a74631b5479589b7a7e
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Reviewed-by: Robin Burchell <robin.burchell@crimson.no>
|
| |\ |
|
| | |\
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Conflicts:
src/qtqmlglobal.h
src/qtqmlglobal_p.h
src/jsruntime/qv4global_p.h
src/qml/compiler/compiler.pri
src/qml/compiler/qv4ssa.cpp
src/qmldevtools/qtqmldevtoolsglobal_p.h
tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp
Change-Id: I55c5d015b2cb1053b83b9c61caaf004fb49ee486
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Loops consisting of just a single basic block (e.g. a do-while loop with
no nested loops or if statements) have a back-edge to themselves. There
were 2 problems:
- loop detection would create LoopInfo for any loop header referred to
by blocks inside the loop (and a 1 block loop doesn't have body
blocks), nor would it mark the loop header as such
- when splitting critical edges, the newly inserted block would not be
marked as part of the loop
This is a problem specifically for 1 block loops: the block ends with
a CJUMP, so the back-edge is a critical edge. So the new block inserted
by edge splitting wouldn't be marked as belonging to the loop.
The end result was that the life-time intervals for temporaries that
are defined before the loop, but that are used inside the loop, and not
after the loop, would have their life-time ended before the loop ends
(instead of spanning the whole loop, *including* the back-edge). This
in turns could lead to the stack/register allocator re-using the storage
for that temporary, resulting in strange things happening.
Task-number: QTBUG-59012
Change-Id: Ic946c73913711272efea2151cb85350412ca2fde
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
6767fcfaf basically gave up and gave the module an own set of headers.
however, we now have improved infrastructure for borrowing headers.
while this may look uglier, the maintenance burden is lower, and it's
consistent with other bootstrapped modules.
Change-Id: I6ddcbbc01fa085a3c6bf333b03a9fdfc19061836
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
note that the condition is insufficient (it should include
qtConfig(dlopen)), but this is just consistent with the c++ code.
Change-Id: I4b447ff504539e4dc07ece3d696e5a85b2f4cc50
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Make sure to allocate enough space on the JS stack to include the
calldata members _and_ the parameters when using more than
ReservedArgumentCount parameters.
Task-number: QTBUG-60396
Change-Id: I7fb2e44550fe081c43b8583f0cd370feb70db159
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
| | | |
| | | |
| | | |
| | | |
| | | | |
Change-Id: I84e363d735b443cb9beefffd14b8c023a37aa489
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
qqmlengine.cpp: cannot link to LocalStorage.OpenDatabaseSync
Change-Id: I37ee96072a1f1973dd501b6c4c2950f51a4224d2
Reviewed-by: Venugopal Shivashankar <Venugopal.Shivashankar@qt.io>
|