Merge lp:~timo-jyrinki/kubuntu-packaging/qtdeclarative-opensource-src_reenable_qmlcache into lp:~kubuntu-packagers/kubuntu-packaging/qtdeclarative-opensource-src

Proposed by Timo Jyrinki
Status: Merged
Merged at revision: 181
Proposed branch: lp:~timo-jyrinki/kubuntu-packaging/qtdeclarative-opensource-src_reenable_qmlcache
Merge into: lp:~kubuntu-packagers/kubuntu-packaging/qtdeclarative-opensource-src
Diff against target: 896 lines (+294/-159)
5 files modified
debian/changelog (+10/-0)
debian/libqt5qml5.symbols (+6/-1)
debian/patches/QML-Compilation-unit-caching-and-JIT-changes.patch (+269/-156)
debian/patches/series (+1/-1)
debian/rules (+8/-1)
To merge this branch: bzr merge lp:~timo-jyrinki/kubuntu-packaging/qtdeclarative-opensource-src_reenable_qmlcache
Reviewer Review Type Date Requested Status
PS Jenkins bot continuous-integration Needs Fixing
Kubuntu Packagers Pending
Review via email: mp+250876@code.launchpad.net

Commit message

* debian/patches/QML-Compilation-unit-caching-and-JIT-changes.patch:
  - [regression] Re-enable the opt-in QML cache patch (LP: #1418060)

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
182. By Timo Jyrinki

Add headers to the QML cache patch.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
183. By Timo Jyrinki

* Update symbols from build logs.
* Don't run unit tests on 32-bit powerpc, those fail more often
  than not. Other archs not affected.

Also, small tweaks to the QML cache patch.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Timo Jyrinki (timo-jyrinki) wrote :

(CI is still broken, but all testing has now succeeded)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'debian/changelog'
--- debian/changelog 2015-02-16 12:07:42 +0000
+++ debian/changelog 2015-02-26 09:47:31 +0000
@@ -1,3 +1,13 @@
1qtdeclarative-opensource-src (5.4.0-4ubuntu2) vivid; urgency=medium
2
3 * debian/patches/QML-Compilation-unit-caching-and-JIT-changes.patch:
4 - [regression] Re-enable the opt-in QML cache patch (LP: #1418060)
5 * Update symbols from build logs.
6 * Don't run unit tests on 32-bit powerpc, those fail more often
7 than not. Other archs not affected.
8
9 -- Timo Jyrinki <timo-jyrinki@ubuntu.com> Tue, 24 Feb 2015 14:01:39 +0000
10
1qtdeclarative-opensource-src (5.4.0-4ubuntu1) vivid; urgency=medium11qtdeclarative-opensource-src (5.4.0-4ubuntu1) vivid; urgency=medium
212
3 * New upstream release.13 * New upstream release.
414
=== modified file 'debian/libqt5qml5.symbols'
--- debian/libqt5qml5.symbols 2015-02-10 15:24:07 +0000
+++ debian/libqt5qml5.symbols 2015-02-26 09:47:31 +0000
@@ -1573,6 +1573,7 @@
1573 _ZN3QV422PersistentValuePrivateD0Ev@Base 5.2.0~beta11573 _ZN3QV422PersistentValuePrivateD0Ev@Base 5.2.0~beta1
1574 _ZN3QV422PersistentValuePrivateD1Ev@Base 5.2.0~beta11574 _ZN3QV422PersistentValuePrivateD1Ev@Base 5.2.0~beta1
1575 _ZN3QV422PersistentValuePrivateD2Ev@Base 5.2.0~beta11575 _ZN3QV422PersistentValuePrivateD2Ev@Base 5.2.0~beta1
1576 _ZN3QV424EvalInstructionSelection6runAllEb@Base 5.4.0 1
1576 _ZN3QV424EvalInstructionSelection7compileEb@Base 5.3.0 11577 _ZN3QV424EvalInstructionSelection7compileEb@Base 5.3.0 1
1577 _ZN3QV424EvalInstructionSelectionC1EPNS_19ExecutableAllocatorEPNS_2IR6ModuleEPNS_8Compiler15JSUnitGeneratorE@Base 5.3.0 11578 _ZN3QV424EvalInstructionSelectionC1EPNS_19ExecutableAllocatorEPNS_2IR6ModuleEPNS_8Compiler15JSUnitGeneratorE@Base 5.3.0 1
1578 _ZN3QV424EvalInstructionSelectionC2EPNS_19ExecutableAllocatorEPNS_2IR6ModuleEPNS_8Compiler15JSUnitGeneratorE@Base 5.3.0 11579 _ZN3QV424EvalInstructionSelectionC2EPNS_19ExecutableAllocatorEPNS_2IR6ModuleEPNS_8Compiler15JSUnitGeneratorE@Base 5.3.0 1
@@ -1642,6 +1643,7 @@
1642 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection22callBuiltinDeleteValueEPNS_2IR4ExprE@Base 5.4.01643 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection22callBuiltinDeleteValueEPNS_2IR4ExprE@Base 5.4.0
1643 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection22callBuiltinTypeofValueEPNS_2IR4ExprES4_@Base 5.4.01644 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection22callBuiltinTypeofValueEPNS_2IR4ExprES4_@Base 5.4.0
1644 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection22loadQmlImportedScriptsEPNS_2IR4ExprE@Base 5.4.01645 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection22loadQmlImportedScriptsEPNS_2IR4ExprE@Base 5.4.0
1646 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection22mutableCompilationUnitEv@Base 5.4.0
1645 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection23callBuiltinDeleteMemberEPNS_2IR4ExprERK7QStringS4_@Base 5.4.01647 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection23callBuiltinDeleteMemberEPNS_2IR4ExprERK7QStringS4_@Base 5.4.0
1646 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection23callBuiltinTypeofMemberEPNS_2IR4ExprERK7QStringS4_@Base 5.4.01648 (arch=amd64 armhf i386)_ZN3QV43JIT20InstructionSelection23callBuiltinTypeofMemberEPNS_2IR4ExprERK7QStringS4_@Base 5.4.0
1647 (arch=!arm64 !powerpc !ppc64el)_ZN3QV43JIT20InstructionSelection23visitCJumpNullUndefinedENS_2IR4TypeEPNS2_5BinopEPNS2_10BasicBlockES7_@Base 5.3.01649 (arch=!arm64 !powerpc !ppc64el)_ZN3QV43JIT20InstructionSelection23visitCJumpNullUndefinedENS_2IR4TypeEPNS2_5BinopEPNS2_10BasicBlockES7_@Base 5.3.0
@@ -1711,6 +1713,7 @@
1711 _ZN3QV44Moth20InstructionSelection22callBuiltinDeleteValueEPNS_2IR4ExprE@Base 5.4.01713 _ZN3QV44Moth20InstructionSelection22callBuiltinDeleteValueEPNS_2IR4ExprE@Base 5.4.0
1712 _ZN3QV44Moth20InstructionSelection22callBuiltinTypeofValueEPNS_2IR4ExprES4_@Base 5.4.01714 _ZN3QV44Moth20InstructionSelection22callBuiltinTypeofValueEPNS_2IR4ExprES4_@Base 5.4.0
1713 _ZN3QV44Moth20InstructionSelection22loadQmlImportedScriptsEPNS_2IR4ExprE@Base 5.4.01715 _ZN3QV44Moth20InstructionSelection22loadQmlImportedScriptsEPNS_2IR4ExprE@Base 5.4.0
1716 _ZN3QV44Moth20InstructionSelection22mutableCompilationUnitEv@Base 5.4.0
1714 _ZN3QV44Moth20InstructionSelection23callBuiltinDeleteMemberEPNS_2IR4ExprERK7QStringS4_@Base 5.4.01717 _ZN3QV44Moth20InstructionSelection23callBuiltinDeleteMemberEPNS_2IR4ExprERK7QStringS4_@Base 5.4.0
1715 _ZN3QV44Moth20InstructionSelection23callBuiltinTypeofMemberEPNS_2IR4ExprERK7QStringS4_@Base 5.4.01718 _ZN3QV44Moth20InstructionSelection23callBuiltinTypeofMemberEPNS_2IR4ExprERK7QStringS4_@Base 5.4.0
1716 _ZN3QV44Moth20InstructionSelection24callBuiltinPushWithScopeEPNS_2IR4ExprE@Base 5.4.01719 _ZN3QV44Moth20InstructionSelection24callBuiltinPushWithScopeEPNS_2IR4ExprE@Base 5.4.0
@@ -3358,7 +3361,7 @@
3358 (optional=templinst|arch=amd64 ppc64el)_ZNSt6vectorIbSaIbEE6resizeEmb@Base 5.4.03361 (optional=templinst|arch=amd64 ppc64el)_ZNSt6vectorIbSaIbEE6resizeEmb@Base 5.4.0
3359 (optional=templinst|subst)_ZNSt6vectorIbSaIbEEC1E{size_t}RKbRKS0_@Base 5.4.03362 (optional=templinst|subst)_ZNSt6vectorIbSaIbEEC1E{size_t}RKbRKS0_@Base 5.4.0
3360 (optional=templinst|subst)_ZNSt6vectorIbSaIbEEC2E{size_t}RKbRKS0_@Base 5.4.03363 (optional=templinst|subst)_ZNSt6vectorIbSaIbEEC2E{size_t}RKbRKS0_@Base 5.4.0
3361 (optional=templinst|arch=armhf)_ZNSt6vectorIcSaIcEE17_M_default_appendEj@Base 5.4.03364 (optional=templinst|arch=amd64 armhf i386|subst)_ZNSt6vectorIcSaIcEE17_M_default_appendE{size_t}@Base 5.4.0
3362 (optional=templinst|arch=amd64 i386)_ZNSt6vectorIcSaIcEE9push_backERKc@Base 5.4.03365 (optional=templinst|arch=amd64 i386)_ZNSt6vectorIcSaIcEE9push_backERKc@Base 5.4.0
3363 (optional=templinst)_ZNSt6vectorIiSaIiEE12emplace_backIIiEEEvDpOT_@Base 5.4.03366 (optional=templinst)_ZNSt6vectorIiSaIiEE12emplace_backIIiEEEvDpOT_@Base 5.4.0
3364 (optional=templinst)_ZNSt6vectorIiSaIiEE12emplace_backIJiEEEvDpOT_@Base 5.4.03367 (optional=templinst)_ZNSt6vectorIiSaIiEE12emplace_backIJiEEEvDpOT_@Base 5.4.0
@@ -4017,9 +4020,11 @@
4017 (c++)"non-virtual thunk to QQmlTimer::componentComplete()@Base" 5.0.24020 (c++)"non-virtual thunk to QQmlTimer::componentComplete()@Base" 5.0.2
4018 (c++)"non-virtual thunk to QQmlTimer::~QQmlTimer()@Base" 5.0.24021 (c++)"non-virtual thunk to QQmlTimer::~QQmlTimer()@Base" 5.0.2
4019 (c++|arch=!arm64 !powerpc !ppc64el)"non-virtual thunk to QV4::JIT::InstructionSelection::backendCompileStep()@Base" 5.3.04022 (c++|arch=!arm64 !powerpc !ppc64el)"non-virtual thunk to QV4::JIT::InstructionSelection::backendCompileStep()@Base" 5.3.0
4023 (c++|arch=amd64 armhf i386)"non-virtual thunk to QV4::JIT::InstructionSelection::mutableCompilationUnit()@Base" 5.4.0
4020 (c++|arch=!arm64 !powerpc !ppc64el)"non-virtual thunk to QV4::JIT::InstructionSelection::run(int)@Base" 5.3.04024 (c++|arch=!arm64 !powerpc !ppc64el)"non-virtual thunk to QV4::JIT::InstructionSelection::run(int)@Base" 5.3.0
4021 (c++|arch=!arm64 !powerpc !ppc64el)"non-virtual thunk to QV4::JIT::InstructionSelection::~InstructionSelection()@Base" 5.3.04025 (c++|arch=!arm64 !powerpc !ppc64el)"non-virtual thunk to QV4::JIT::InstructionSelection::~InstructionSelection()@Base" 5.3.0
4022 (c++)"non-virtual thunk to QV4::Moth::InstructionSelection::backendCompileStep()@Base" 5.3.04026 (c++)"non-virtual thunk to QV4::Moth::InstructionSelection::backendCompileStep()@Base" 5.3.0
4027 (c++)"non-virtual thunk to QV4::Moth::InstructionSelection::mutableCompilationUnit()@Base" 5.4.0
4023 (c++)"non-virtual thunk to QV4::Moth::InstructionSelection::run(int)@Base" 5.3.04028 (c++)"non-virtual thunk to QV4::Moth::InstructionSelection::run(int)@Base" 5.3.0
4024 (c++)"non-virtual thunk to QV4::Moth::InstructionSelection::~InstructionSelection()@Base" 5.3.04029 (c++)"non-virtual thunk to QV4::Moth::InstructionSelection::~InstructionSelection()@Base" 5.3.0
4025 qt_v4StackTrace@Base 5.3.04030 qt_v4StackTrace@Base 5.3.0
40264031
=== modified file 'debian/patches/QML-Compilation-unit-caching-and-JIT-changes.patch'
--- debian/patches/QML-Compilation-unit-caching-and-JIT-changes.patch 2015-02-10 12:14:13 +0000
+++ debian/patches/QML-Compilation-unit-caching-and-JIT-changes.patch 2015-02-26 09:47:31 +0000
@@ -1,7 +1,19 @@
1Index: qtdeclarative-opensource-src-5.3.2/src/3rdparty/masm/assembler/ARMv7Assembler.h1Description: Add optional JIT unit cache
2 This patch adds a JIT unit cache to QML that speeds up application launches
3 after the first launch has been done. It is activated only when environment
4 variable QV4_ENABLE_JIT_CACHE is set.
5 .
6 It has not yet been sent upstream for discussion, but that's being planned.
7Author: Ricardo Mendoza <ricardo.mendoza@canonical.com>
8Origin: Canonical
9Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/qtdeclarative-opensource-src/+bug/1418060
10Forwarded: No
11Last-Update: 2015-02-25
12
13Index: qtdeclarative-opensource-src-5.4.0/src/3rdparty/masm/assembler/ARMv7Assembler.h
2===================================================================14===================================================================
3--- qtdeclarative-opensource-src-5.3.2.orig/src/3rdparty/masm/assembler/ARMv7Assembler.h15--- qtdeclarative-opensource-src-5.4.0.orig/src/3rdparty/masm/assembler/ARMv7Assembler.h
4+++ qtdeclarative-opensource-src-5.3.2/src/3rdparty/masm/assembler/ARMv7Assembler.h16+++ qtdeclarative-opensource-src-5.4.0/src/3rdparty/masm/assembler/ARMv7Assembler.h
5@@ -445,6 +445,12 @@ public:17@@ -445,6 +445,12 @@ public:
6 ConditionInvalid18 ConditionInvalid
7 } Condition;19 } Condition;
@@ -23,10 +35,10 @@
23 35
24 unsigned debugOffset() { return m_buffer.debugOffset(); }36 unsigned debugOffset() { return m_buffer.debugOffset(); }
25 37
26Index: qtdeclarative-opensource-src-5.3.2/src/3rdparty/masm/assembler/AbstractMacroAssembler.h38Index: qtdeclarative-opensource-src-5.4.0/src/3rdparty/masm/assembler/AbstractMacroAssembler.h
27===================================================================39===================================================================
28--- qtdeclarative-opensource-src-5.3.2.orig/src/3rdparty/masm/assembler/AbstractMacroAssembler.h40--- qtdeclarative-opensource-src-5.4.0.orig/src/3rdparty/masm/assembler/AbstractMacroAssembler.h
29+++ qtdeclarative-opensource-src-5.3.2/src/3rdparty/masm/assembler/AbstractMacroAssembler.h41+++ qtdeclarative-opensource-src-5.4.0/src/3rdparty/masm/assembler/AbstractMacroAssembler.h
30@@ -486,6 +486,11 @@ public:42@@ -486,6 +486,11 @@ public:
31 return Call(jump.m_label, Linkable);43 return Call(jump.m_label, Linkable);
32 }44 }
@@ -52,10 +64,10 @@
52 protected:64 protected:
53 AbstractMacroAssembler()65 AbstractMacroAssembler()
54 : m_randomSource(cryptographicallyRandomNumber())66 : m_randomSource(cryptographicallyRandomNumber())
55Index: qtdeclarative-opensource-src-5.3.2/src/3rdparty/masm/assembler/AssemblerBuffer.h67Index: qtdeclarative-opensource-src-5.4.0/src/3rdparty/masm/assembler/AssemblerBuffer.h
56===================================================================68===================================================================
57--- qtdeclarative-opensource-src-5.3.2.orig/src/3rdparty/masm/assembler/AssemblerBuffer.h69--- qtdeclarative-opensource-src-5.4.0.orig/src/3rdparty/masm/assembler/AssemblerBuffer.h
58+++ qtdeclarative-opensource-src-5.3.2/src/3rdparty/masm/assembler/AssemblerBuffer.h70+++ qtdeclarative-opensource-src-5.4.0/src/3rdparty/masm/assembler/AssemblerBuffer.h
59@@ -86,6 +86,14 @@ namespace JSC {71@@ -86,6 +86,14 @@ namespace JSC {
60 grow();72 grow();
61 }73 }
@@ -71,10 +83,10 @@
71 bool isAligned(int alignment) const83 bool isAligned(int alignment) const
72 {84 {
73 return !(m_index & (alignment - 1));85 return !(m_index & (alignment - 1));
74Index: qtdeclarative-opensource-src-5.3.2/src/3rdparty/masm/assembler/LinkBuffer.h86Index: qtdeclarative-opensource-src-5.4.0/src/3rdparty/masm/assembler/LinkBuffer.h
75===================================================================87===================================================================
76--- qtdeclarative-opensource-src-5.3.2.orig/src/3rdparty/masm/assembler/LinkBuffer.h88--- qtdeclarative-opensource-src-5.4.0.orig/src/3rdparty/masm/assembler/LinkBuffer.h
77+++ qtdeclarative-opensource-src-5.3.2/src/3rdparty/masm/assembler/LinkBuffer.h89+++ qtdeclarative-opensource-src-5.4.0/src/3rdparty/masm/assembler/LinkBuffer.h
78@@ -109,11 +109,13 @@ public:90@@ -109,11 +109,13 @@ public:
79 91
80 // These methods are used to link or set values at code generation time.92 // These methods are used to link or set values at code generation time.
@@ -90,10 +102,10 @@
90 }102 }
91 103
92 void link(Jump jump, CodeLocationLabel label)104 void link(Jump jump, CodeLocationLabel label)
93Index: qtdeclarative-opensource-src-5.3.2/src/3rdparty/masm/assembler/X86Assembler.h105Index: qtdeclarative-opensource-src-5.4.0/src/3rdparty/masm/assembler/X86Assembler.h
94===================================================================106===================================================================
95--- qtdeclarative-opensource-src-5.3.2.orig/src/3rdparty/masm/assembler/X86Assembler.h107--- qtdeclarative-opensource-src-5.4.0.orig/src/3rdparty/masm/assembler/X86Assembler.h
96+++ qtdeclarative-opensource-src-5.3.2/src/3rdparty/masm/assembler/X86Assembler.h108+++ qtdeclarative-opensource-src-5.4.0/src/3rdparty/masm/assembler/X86Assembler.h
97@@ -101,6 +101,11 @@ public:109@@ -101,6 +101,11 @@ public:
98 ConditionNC = ConditionAE,110 ConditionNC = ConditionAE,
99 } Condition;111 } Condition;
@@ -114,10 +126,10 @@
114 126
115 PassRefPtr<ExecutableMemoryHandle> executableCopy(JSGlobalData& globalData, void* ownerUID, JITCompilationEffort effort)127 PassRefPtr<ExecutableMemoryHandle> executableCopy(JSGlobalData& globalData, void* ownerUID, JITCompilationEffort effort)
116 {128 {
117Index: qtdeclarative-opensource-src-5.3.2/src/qml/compiler/compiler.pri129Index: qtdeclarative-opensource-src-5.4.0/src/qml/compiler/compiler.pri
118===================================================================130===================================================================
119--- qtdeclarative-opensource-src-5.3.2.orig/src/qml/compiler/compiler.pri131--- qtdeclarative-opensource-src-5.4.0.orig/src/qml/compiler/compiler.pri
120+++ qtdeclarative-opensource-src-5.3.2/src/qml/compiler/compiler.pri132+++ qtdeclarative-opensource-src-5.4.0/src/qml/compiler/compiler.pri
121@@ -28,10 +28,10 @@ HEADERS += \133@@ -28,10 +28,10 @@ HEADERS += \
122 $$PWD/qv4isel_moth_p.h \134 $$PWD/qv4isel_moth_p.h \
123 $$PWD/qv4instr_moth_p.h135 $$PWD/qv4instr_moth_p.h
@@ -130,14 +142,14 @@
130 142
131+DEFINES += V4_UNIT_CACHE143+DEFINES += V4_UNIT_CACHE
132 }144 }
133Index: qtdeclarative-opensource-src-5.3.2/src/qml/compiler/qqmlirbuilder.cpp145Index: qtdeclarative-opensource-src-5.4.0/src/qml/compiler/qqmlirbuilder.cpp
134===================================================================146===================================================================
135--- qtdeclarative-opensource-src-5.3.2.orig/src/qml/compiler/qqmlirbuilder.cpp147--- qtdeclarative-opensource-src-5.4.0.orig/src/qml/compiler/qqmlirbuilder.cpp
136+++ qtdeclarative-opensource-src-5.3.2/src/qml/compiler/qqmlirbuilder.cpp148+++ qtdeclarative-opensource-src-5.4.0/src/qml/compiler/qqmlirbuilder.cpp
137@@ -1512,7 +1512,12 @@ bool IRBuilder::isStatementNodeScript(QQ149@@ -1502,7 +1502,12 @@ bool IRBuilder::isStatementNodeScript(QQ
138 QV4::CompiledData::QmlUnit *QmlUnitGenerator::generate(Document &output)150 QV4::CompiledData::Unit *QmlUnitGenerator::generate(Document &output)
139 {151 {
140 QV4::CompiledData::CompilationUnit *compilationUnit = output.javaScriptCompilationUnit;152 QQmlRefPointer<QV4::CompiledData::CompilationUnit> compilationUnit = output.javaScriptCompilationUnit;
141- QV4::CompiledData::Unit *jsUnit = compilationUnit->createUnitData(&output);153- QV4::CompiledData::Unit *jsUnit = compilationUnit->createUnitData(&output);
142+ QV4::CompiledData::Unit *jsUnit;154+ QV4::CompiledData::Unit *jsUnit;
143+ if (!compilationUnit->data)155+ if (!compilationUnit->data)
@@ -148,19 +160,63 @@
148 const uint unitSize = jsUnit->unitSize;160 const uint unitSize = jsUnit->unitSize;
149 161
150 const int importSize = sizeof(QV4::CompiledData::Import) * output.imports.count();162 const int importSize = sizeof(QV4::CompiledData::Import) * output.imports.count();
151Index: qtdeclarative-opensource-src-5.3.2/src/qml/compiler/qqmltypecompiler.cpp163@@ -1527,7 +1532,6 @@ QV4::CompiledData::Unit *QmlUnitGenerato
164 memcpy(data, jsUnit, unitSize);
165 if (jsUnit != compilationUnit->data)
166 free(jsUnit);
167- jsUnit = 0;
168
169 QV4::CompiledData::Unit *qmlUnit = reinterpret_cast<QV4::CompiledData::Unit *>(data);
170 qmlUnit->unitSize = totalSize;
171@@ -1538,8 +1542,22 @@ QV4::CompiledData::Unit *QmlUnitGenerato
172 qmlUnit->offsetToObjects = unitSize + importSize;
173 qmlUnit->nObjects = output.objects.count();
174 qmlUnit->indexOfRootObject = output.indexOfRootObject;
175+
176+#ifdef ENABLE_UNIT_CACHE
177+ if (compilationUnit->isRestored) {
178+ qmlUnit->offsetToStringTable = jsUnit->offsetToStringTable;
179+ qmlUnit->stringTableSize = jsUnit->stringTableSize;
180+ } else {
181+ qmlUnit->offsetToStringTable = totalSize - output.jsGenerator.stringTable.sizeOfTableAndData();
182+ qmlUnit->stringTableSize = output.jsGenerator.stringTable.stringCount();
183+ }
184+#else
185 qmlUnit->offsetToStringTable = totalSize - output.jsGenerator.stringTable.sizeOfTableAndData();
186 qmlUnit->stringTableSize = output.jsGenerator.stringTable.stringCount();
187+#endif
188+
189+ // Release
190+ jsUnit = 0;
191
192 // write imports
193 char *importPtr = data + qmlUnit->offsetToImports;
194@@ -1631,7 +1649,12 @@ QV4::CompiledData::Unit *QmlUnitGenerato
195 }
196 }
197
198+#ifdef ENABLE_UNIT_CACHE
199+ if (!compilationUnit->isRestored)
200+ output.jsGenerator.stringTable.serialize(qmlUnit);
201+#else
202 output.jsGenerator.stringTable.serialize(qmlUnit);
203+#endif
204
205 return qmlUnit;
206 }
207Index: qtdeclarative-opensource-src-5.4.0/src/qml/compiler/qqmltypecompiler.cpp
152===================================================================208===================================================================
153--- qtdeclarative-opensource-src-5.3.2.orig/src/qml/compiler/qqmltypecompiler.cpp209--- qtdeclarative-opensource-src-5.4.0.orig/src/qml/compiler/qqmltypecompiler.cpp
154+++ qtdeclarative-opensource-src-5.3.2/src/qml/compiler/qqmltypecompiler.cpp210+++ qtdeclarative-opensource-src-5.4.0/src/qml/compiler/qqmltypecompiler.cpp
155@@ -226,6 +226,7 @@ bool QQmlTypeCompiler::compile()211@@ -219,6 +219,7 @@ bool QQmlTypeCompiler::compile()
156 QV4::ExecutionEngine *v4 = engine->v4engine();
157 QScopedPointer<QV4::EvalInstructionSelection> isel(v4->iselFactory->create(engine, v4->executableAllocator, &document->jsModule, &document->jsGenerator));212 QScopedPointer<QV4::EvalInstructionSelection> isel(v4->iselFactory->create(engine, v4->executableAllocator, &document->jsModule, &document->jsGenerator));
158 isel->setUseFastLookups(false);213 isel->setUseFastLookups(false);
214 isel->setUseTypeInference(true);
159+ isel->setEngine(engine);215+ isel->setEngine(engine);
160 document->javaScriptCompilationUnit = isel->compile(/*generated unit data*/false);216 document->javaScriptCompilationUnit = isel->compile(/*generated unit data*/false);
161 }217 }
162 218
163@@ -435,6 +436,7 @@ QQmlPropertyCacheCreator::QQmlPropertyCa219@@ -419,6 +420,7 @@ QQmlPropertyCacheCreator::QQmlPropertyCa
164 , qmlObjects(*typeCompiler->qmlObjects())220 , qmlObjects(*typeCompiler->qmlObjects())
165 , imports(typeCompiler->imports())221 , imports(typeCompiler->imports())
166 , resolvedTypes(typeCompiler->resolvedTypes())222 , resolvedTypes(typeCompiler->resolvedTypes())
@@ -168,11 +224,11 @@
168 {224 {
169 }225 }
170 226
171Index: qtdeclarative-opensource-src-5.3.2/src/qml/compiler/qqmltypecompiler_p.h227Index: qtdeclarative-opensource-src-5.4.0/src/qml/compiler/qqmltypecompiler_p.h
172===================================================================228===================================================================
173--- qtdeclarative-opensource-src-5.3.2.orig/src/qml/compiler/qqmltypecompiler_p.h229--- qtdeclarative-opensource-src-5.4.0.orig/src/qml/compiler/qqmltypecompiler_p.h
174+++ qtdeclarative-opensource-src-5.3.2/src/qml/compiler/qqmltypecompiler_p.h230+++ qtdeclarative-opensource-src-5.4.0/src/qml/compiler/qqmltypecompiler_p.h
175@@ -149,6 +149,7 @@ protected:231@@ -140,6 +140,7 @@ protected:
176 QHash<int, QQmlCompiledData::TypeReference*> *resolvedTypes;232 QHash<int, QQmlCompiledData::TypeReference*> *resolvedTypes;
177 QVector<QByteArray> vmeMetaObjects;233 QVector<QByteArray> vmeMetaObjects;
178 QVector<QQmlPropertyCache*> propertyCaches;234 QVector<QQmlPropertyCache*> propertyCaches;
@@ -180,61 +236,64 @@
180 };236 };
181 237
182 // "Converts" signal expressions to full-fleged function declarations with238 // "Converts" signal expressions to full-fleged function declarations with
183Index: qtdeclarative-opensource-src-5.3.2/src/qml/compiler/qv4compileddata_p.h239Index: qtdeclarative-opensource-src-5.4.0/src/qml/compiler/qv4compileddata_p.h
184===================================================================240===================================================================
185--- qtdeclarative-opensource-src-5.3.2.orig/src/qml/compiler/qv4compileddata_p.h241--- qtdeclarative-opensource-src-5.4.0.orig/src/qml/compiler/qv4compileddata_p.h
186+++ qtdeclarative-opensource-src-5.3.2/src/qml/compiler/qv4compileddata_p.h242+++ qtdeclarative-opensource-src-5.4.0/src/qml/compiler/qv4compileddata_p.h
187@@ -607,6 +607,9 @@ struct Q_QML_PRIVATE_EXPORT CompilationU243@@ -594,6 +594,11 @@ struct Q_QML_PRIVATE_EXPORT CompilationU
188 QV4::InternalClass **runtimeClasses;244 QV4::InternalClass **runtimeClasses;
189 QVector<QV4::Function *> runtimeFunctions;245 QVector<QV4::Function *> runtimeFunctions;
190 246
247+#ifdef ENABLE_UNIT_CACHE
191+ QVector<int> lookupTable;248+ QVector<int> lookupTable;
192+ bool isRestored;249+ bool isRestored;
250+#endif
193+251+
194 QV4::Function *linkToEngine(QV4::ExecutionEngine *engine);252 QV4::Function *linkToEngine(QV4::ExecutionEngine *engine);
195 void unlink();253 void unlink();
196 254
197Index: qtdeclarative-opensource-src-5.3.2/src/qml/compiler/qv4isel_moth_p.h255Index: qtdeclarative-opensource-src-5.4.0/src/qml/compiler/qv4isel_moth_p.h
198===================================================================256===================================================================
199--- qtdeclarative-opensource-src-5.3.2.orig/src/qml/compiler/qv4isel_moth_p.h257--- qtdeclarative-opensource-src-5.4.0.orig/src/qml/compiler/qv4isel_moth_p.h
200+++ qtdeclarative-opensource-src-5.3.2/src/qml/compiler/qv4isel_moth_p.h258+++ qtdeclarative-opensource-src-5.4.0/src/qml/compiler/qv4isel_moth_p.h
201@@ -72,6 +72,7 @@ public:259@@ -64,9 +64,11 @@ public:
202 ~InstructionSelection();260 ~InstructionSelection();
203 261
204 virtual void run(int functionIndex);262 virtual void run(int functionIndex);
205+ virtual QV4::JIT::InstructionSelection* impl() { return NULL; };;263+ virtual QV4::JIT::InstructionSelection* impl() { return NULL; };
206 264
207 protected:265 protected:
208 virtual QV4::CompiledData::CompilationUnit *backendCompileStep();266 virtual QQmlRefPointer<CompiledData::CompilationUnit> backendCompileStep();
209Index: qtdeclarative-opensource-src-5.3.2/src/qml/compiler/qv4isel_p.cpp267+ virtual QV4::CompiledData::CompilationUnit* mutableCompilationUnit();
268
269 virtual void visitJump(IR::Jump *);
270 virtual void visitCJump(IR::CJump *);
271Index: qtdeclarative-opensource-src-5.4.0/src/qml/compiler/qv4isel_p.cpp
210===================================================================272===================================================================
211--- qtdeclarative-opensource-src-5.3.2.orig/src/qml/compiler/qv4isel_p.cpp273--- qtdeclarative-opensource-src-5.4.0.orig/src/qml/compiler/qv4isel_p.cpp
212+++ qtdeclarative-opensource-src-5.3.2/src/qml/compiler/qv4isel_p.cpp274+++ qtdeclarative-opensource-src-5.4.0/src/qml/compiler/qv4isel_p.cpp
213@@ -1,8 +1,14 @@275@@ -3,6 +3,12 @@
214-/****************************************************************************276 ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
215+/***************************************************************************
216 **
217 ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
218 ** Contact: http://www.qt-project.org/legal277 ** Contact: http://www.qt-project.org/legal
219 **278 **
220+** Copyright (C) 2014 Nomovok Ltd. All rights reserved.279+** Copyright (C) 2015 Nomovok Ltd. All rights reserved.
221+** Contact: info@nomovok.com280+** Contact: info@nomovok.com
222+**281+**
223+** Copyright (C) 2014 Canonical Limited and/or its subsidiary(-ies).282+** Copyright (C) 2015 Canonical Limited and/or its subsidiary(-ies).
224+** Contact: ricardo.mendoza@canonical.com283+** Contact: ricardo.mendoza@canonical.com
225+**284+**
226 ** This file is part of the QtQml module of the Qt Toolkit.285 ** This file is part of the QtQml module of the Qt Toolkit.
227 **286 **
228 ** $QT_BEGIN_LICENSE:LGPL$287 ** $QT_BEGIN_LICENSE:LGPL21$
229@@ -49,6 +55,54 @@288@@ -41,6 +47,54 @@
230 289
231 #include <QString>290 #include <QString>
232 291
233+#ifndef V4_ENABLE_JIT292+#ifndef V4_UNIT_CACHE
234+#undef V4_UNIT_CACHE293+#undef ENABLE_UNIT_CACHE
235+#endif294+#endif
236+295+
237+#ifdef V4_UNIT_CACHE296+#ifdef ENABLE_UNIT_CACHE
238+#include <private/qqmltypenamecache_p.h>297+#include <private/qqmltypenamecache_p.h>
239+#include <private/qqmlcompiler_p.h>298+#include <private/qqmlcompiler_p.h>
240+#include <private/qqmltypeloader_p.h>299+#include <private/qqmltypeloader_p.h>
@@ -281,7 +340,7 @@
281 namespace {340 namespace {
282 Q_GLOBAL_STATIC_WITH_ARGS(QTextStream, qout, (stderr, QIODevice::WriteOnly));341 Q_GLOBAL_STATIC_WITH_ARGS(QTextStream, qout, (stderr, QIODevice::WriteOnly));
283 #define qout *qout()342 #define qout *qout()
284@@ -57,6 +111,14 @@ Q_GLOBAL_STATIC_WITH_ARGS(QTextStream, q343@@ -49,6 +103,14 @@ Q_GLOBAL_STATIC_WITH_ARGS(QTextStream, q
285 using namespace QV4;344 using namespace QV4;
286 using namespace QV4::IR;345 using namespace QV4::IR;
287 346
@@ -295,8 +354,8 @@
295+354+
296 EvalInstructionSelection::EvalInstructionSelection(QV4::ExecutableAllocator *execAllocator, Module *module, QV4::Compiler::JSUnitGenerator *jsGenerator)355 EvalInstructionSelection::EvalInstructionSelection(QV4::ExecutableAllocator *execAllocator, Module *module, QV4::Compiler::JSUnitGenerator *jsGenerator)
297 : useFastLookups(true)356 : useFastLookups(true)
298 , executableAllocator(execAllocator)357 , useTypeInference(true)
299@@ -71,6 +133,9 @@ EvalInstructionSelection::EvalInstructio358@@ -64,6 +126,9 @@ EvalInstructionSelection::EvalInstructio
300 Q_ASSERT(execAllocator);359 Q_ASSERT(execAllocator);
301 #endif360 #endif
302 Q_ASSERT(module);361 Q_ASSERT(module);
@@ -306,45 +365,45 @@
306 }365 }
307 366
308 EvalInstructionSelection::~EvalInstructionSelection()367 EvalInstructionSelection::~EvalInstructionSelection()
309@@ -79,17 +144,306 @@ EvalInstructionSelection::~EvalInstructi368@@ -72,15 +137,307 @@ EvalInstructionSelection::~EvalInstructi
310 EvalISelFactory::~EvalISelFactory()369 EvalISelFactory::~EvalISelFactory()
311 {}370 {}
312 371
313-QV4::CompiledData::CompilationUnit *EvalInstructionSelection::compile(bool generateUnitData)372-QQmlRefPointer<CompiledData::CompilationUnit> EvalInstructionSelection::compile(bool generateUnitData)
314+QV4::CompiledData::CompilationUnit *EvalInstructionSelection::runAll(bool generateUnitData)373+QQmlRefPointer<QV4::CompiledData::CompilationUnit> EvalInstructionSelection::runAll(bool generateUnitData)
315 {374 {
316- for (int i = 0; i < irModule->functions.size(); ++i)375- for (int i = 0; i < irModule->functions.size(); ++i)
317- run(i);376- run(i);
318+ QV4::CompiledData::CompilationUnit *unit;
319+
320+ for (int i = 0; i < irModule->functions.size(); ++i) {377+ for (int i = 0; i < irModule->functions.size(); ++i) {
321+ run(i); // Performs the actual compilation378+ run(i); // Performs the actual compilation
322+ }379+ }
323+380+
324+ unit = backendCompileStep();381+ QQmlRefPointer<QV4::CompiledData::CompilationUnit> result = backendCompileStep();
325+382+
326+#ifdef V4_UNIT_CACHE383+#ifdef ENABLE_UNIT_CACHE
327+ unit->isRestored = false;384+ result->isRestored = false;
328+#endif385+#endif
329 386
330- QV4::CompiledData::CompilationUnit *unit = backendCompileStep();387- QQmlRefPointer<QV4::CompiledData::CompilationUnit> unit = backendCompileStep();
331 if (generateUnitData)388 if (generateUnitData)
332 unit->data = jsGenerator->generateUnit();389+ result->data = jsGenerator->generateUnit();
333+390+
334 return unit;391+ return result;
335 }392+}
336 393+
337+QV4::CompiledData::CompilationUnit *EvalInstructionSelection::compile(bool generateUnitData)394+QQmlRefPointer<QV4::CompiledData::CompilationUnit> EvalInstructionSelection::compile(bool generateUnitData)
338+{395+{
339+#ifndef V4_UNIT_CACHE396+#ifndef ENABLE_UNIT_CACHE
340+ return runAll(generateUnitData);397+ return runAll(generateUnitData);
341+#else398+#else
399+ QQmlRefPointer<QV4::CompiledData::CompilationUnit> result(nullptr);
400+
342+ // Check if running JIT mode and if cache is enabled401+ // Check if running JIT mode and if cache is enabled
343+ if (!do_cache || !this->impl())402+ if (!do_cache || !this->impl()) {
344+ return runAll(generateUnitData);403+ return runAll(generateUnitData);
404+ }
345+405+
346+ QV4::CompiledData::CompilationUnit *unit;406+ QV4::CompiledData::CompilationUnit *unit;
347+
348+ bool loaded = false;407+ bool loaded = false;
349+ bool do_save = true;408+ bool do_save = true;
350+409+
@@ -433,10 +492,9 @@
433+ // This code has been inspired and influenced by Nomovok's QMLC compiler available at492+ // This code has been inspired and influenced by Nomovok's QMLC compiler available at
434+ // https://github.com/qmlc/qmlc. All original Copyrights are maintained for the493+ // https://github.com/qmlc/qmlc. All original Copyrights are maintained for the
435+ // basic code snippets.494+ // basic code snippets.
436+
437+ if (loaded) {495+ if (loaded) {
438+ // Retrieve unit skeleton from isel implementation496+ // Retrieve unit skeleton from isel implementation
439+ unit = backendCompileStep();497+ unit = mutableCompilationUnit();
440+ QV4::JIT::CompilationUnit *tmpUnit = (QV4::JIT::CompilationUnit *) unit;498+ QV4::JIT::CompilationUnit *tmpUnit = (QV4::JIT::CompilationUnit *) unit;
441+ tmpUnit->codeRefs.resize(irModule->functions.size());499+ tmpUnit->codeRefs.resize(irModule->functions.size());
442+500+
@@ -496,7 +554,7 @@
496+554+
497+ QV4::IR::Function nullFunction(0, 0, QLatin1String(""));555+ QV4::IR::Function nullFunction(0, 0, QLatin1String(""));
498+556+
499+ QV4::JIT::Assembler* as = new QV4::JIT::Assembler(this->impl(), &nullFunction, executableAllocator, 6);557+ QV4::JIT::Assembler* as = new QV4::JIT::Assembler(this->impl(), &nullFunction, executableAllocator);
500+558+
501+ QList<QV4::JIT::Assembler::CallToLink>& callsToLink = as->callsToLink();559+ QList<QV4::JIT::Assembler::CallToLink>& callsToLink = as->callsToLink();
502+ for (int i = 0; i < linkCalls.size(); i++) {560+ for (int i = 0; i < linkCalls.size(); i++) {
@@ -531,18 +589,22 @@
531+ if (size > 0)589+ if (size > 0)
532+ readData((char *)dataPtr, size, stream);590+ readData((char *)dataPtr, size, stream);
533+591+
592+ result = backendCompileStep();
593+ unit = result.data();
594+
534+ unit->data = nullptr;595+ unit->data = nullptr;
535+ if (irModule->functions.size() > 0)596+ if (irModule->functions.size() > 0)
536+ unit->data = finalUnit;597+ unit->data = finalUnit;
537+
538+ unit->isRestored = true;598+ unit->isRestored = true;
539+ } else {599+ } else {
540+ // Not loading from cache, run all instructions600+ // Not loading from cache, run all instructions
541+ unit = runAll(false);601+ result = runAll(false);
602+ unit = result.data();
542+ }603+ }
543+604+
544+ if ((unit->data == nullptr) && (do_save || generateUnitData))605+ if ((unit->data == nullptr) && (do_save || generateUnitData))
545+ unit->data = jsGenerator->generateUnit();606 unit->data = jsGenerator->generateUnit();
607- return unit;
546+608+
547+ // Save compilation unit609+ // Save compilation unit
548+ QV4::JIT::CompilationUnit *jitUnit = (QV4::JIT::CompilationUnit *) unit;610+ QV4::JIT::CompilationUnit *jitUnit = (QV4::JIT::CompilationUnit *) unit;
@@ -610,18 +672,17 @@
610+ cacheFile.close();672+ cacheFile.close();
611+ }673+ }
612+ }674+ }
613+ return unit;675+
676+ return result;
614+#endif677+#endif
615+}678 }
616+679
617 void IRDecoder::visitMove(IR::Move *s)680 void IRDecoder::visitMove(IR::Move *s)
618 {681Index: qtdeclarative-opensource-src-5.4.0/src/qml/compiler/qv4isel_p.h
619 if (IR::Name *n = s->target->asName()) {
620Index: qtdeclarative-opensource-src-5.3.2/src/qml/compiler/qv4isel_p.h
621===================================================================682===================================================================
622--- qtdeclarative-opensource-src-5.3.2.orig/src/qml/compiler/qv4isel_p.h683--- qtdeclarative-opensource-src-5.4.0.orig/src/qml/compiler/qv4isel_p.h
623+++ qtdeclarative-opensource-src-5.3.2/src/qml/compiler/qv4isel_p.h684+++ qtdeclarative-opensource-src-5.4.0/src/qml/compiler/qv4isel_p.h
624@@ -56,6 +56,10 @@ class QQmlEnginePrivate;685@@ -48,6 +48,10 @@ class QQmlEnginePrivate;
625 686
626 namespace QV4 {687 namespace QV4 {
627 688
@@ -632,15 +693,15 @@
632 class ExecutableAllocator;693 class ExecutableAllocator;
633 struct Function;694 struct Function;
634 695
635@@ -65,6 +69,7 @@ public:696@@ -57,6 +61,7 @@ public:
636 EvalInstructionSelection(QV4::ExecutableAllocator *execAllocator, IR::Module *module, QV4::Compiler::JSUnitGenerator *jsGenerator);697 EvalInstructionSelection(QV4::ExecutableAllocator *execAllocator, IR::Module *module, QV4::Compiler::JSUnitGenerator *jsGenerator);
637 virtual ~EvalInstructionSelection() = 0;698 virtual ~EvalInstructionSelection() = 0;
638 699
639+ QV4::CompiledData::CompilationUnit *runAll(bool generateUnitData);700+ QQmlRefPointer<QV4::CompiledData::CompilationUnit> runAll(bool generateUnitData);
640 QV4::CompiledData::CompilationUnit *compile(bool generateUnitData = true);701 QQmlRefPointer<QV4::CompiledData::CompilationUnit> compile(bool generateUnitData = true);
641 702
642 void setUseFastLookups(bool b) { useFastLookups = b; }703 void setUseFastLookups(bool b) { useFastLookups = b; }
643@@ -78,9 +83,11 @@ public:704@@ -71,10 +76,13 @@ public:
644 int registerRegExp(IR::RegExp *regexp) { return jsGenerator->registerRegExp(regexp); }705 int registerRegExp(IR::RegExp *regexp) { return jsGenerator->registerRegExp(regexp); }
645 int registerJSClass(int count, IR::ExprList *args) { return jsGenerator->registerJSClass(count, args); }706 int registerJSClass(int count, IR::ExprList *args) { return jsGenerator->registerJSClass(count, args); }
646 QV4::Compiler::JSUnitGenerator *jsUnitGenerator() const { return jsGenerator; }707 QV4::Compiler::JSUnitGenerator *jsUnitGenerator() const { return jsGenerator; }
@@ -649,10 +710,12 @@
649 protected:710 protected:
650 virtual void run(int functionIndex) = 0;711 virtual void run(int functionIndex) = 0;
651+ virtual QV4::JIT::InstructionSelection* impl() = 0;712+ virtual QV4::JIT::InstructionSelection* impl() = 0;
652 virtual QV4::CompiledData::CompilationUnit *backendCompileStep() = 0;713 virtual QQmlRefPointer<QV4::CompiledData::CompilationUnit> backendCompileStep() = 0;
714+ virtual QV4::CompiledData::CompilationUnit* mutableCompilationUnit() = 0;
653 715
654 bool useFastLookups;716 bool useFastLookups;
655@@ -88,6 +95,7 @@ protected:717 bool useTypeInference;
718@@ -82,6 +90,7 @@ protected:
656 QV4::Compiler::JSUnitGenerator *jsGenerator;719 QV4::Compiler::JSUnitGenerator *jsGenerator;
657 QScopedPointer<QV4::Compiler::JSUnitGenerator> ownJSGenerator;720 QScopedPointer<QV4::Compiler::JSUnitGenerator> ownJSGenerator;
658 IR::Module *irModule;721 IR::Module *irModule;
@@ -660,27 +723,32 @@
660 };723 };
661 724
662 class Q_QML_PRIVATE_EXPORT EvalISelFactory725 class Q_QML_PRIVATE_EXPORT EvalISelFactory
663Index: qtdeclarative-opensource-src-5.3.2/src/qml/jit/qv4assembler.cpp726Index: qtdeclarative-opensource-src-5.4.0/src/qml/jit/qv4assembler.cpp
664===================================================================727===================================================================
665--- qtdeclarative-opensource-src-5.3.2.orig/src/qml/jit/qv4assembler.cpp728--- qtdeclarative-opensource-src-5.4.0.orig/src/qml/jit/qv4assembler.cpp
666+++ qtdeclarative-opensource-src-5.3.2/src/qml/jit/qv4assembler.cpp729+++ qtdeclarative-opensource-src-5.4.0/src/qml/jit/qv4assembler.cpp
667@@ -77,7 +77,10 @@ void CompilationUnit::linkBackendToEngin730@@ -69,7 +69,15 @@ void CompilationUnit::linkBackendToEngin
668 731
669 QV4::Function *runtimeFunction = new QV4::Function(engine, this, compiledFunction,732 QV4::Function *runtimeFunction = new QV4::Function(engine, this, compiledFunction,
670 (ReturnedValue (*)(QV4::ExecutionContext *, const uchar *)) codeRefs[i].code().executableAddress());733 (ReturnedValue (*)(QV4::ExecutionContext *, const uchar *)) codeRefs[i].code().executableAddress());
671- runtimeFunctions[i] = runtimeFunction;734- runtimeFunctions[i] = runtimeFunction;
735+
736+#if ENABLE_UNIT_CACHE
672+ if (isRestored)737+ if (isRestored)
673+ runtimeFunctions[lookupTable.at(i)] = runtimeFunction;738+ runtimeFunctions[lookupTable.at(i)] = runtimeFunction;
674+ else739+ else
675+ runtimeFunctions[i] = runtimeFunction;740+ runtimeFunctions[i] = runtimeFunction;
741+#else
742+ runtimeFunctions[i] = runtimeFunction;
743+#endif
676 }744 }
677 }745 }
678 746
679Index: qtdeclarative-opensource-src-5.3.2/src/qml/jit/qv4assembler_p.h747Index: qtdeclarative-opensource-src-5.4.0/src/qml/jit/qv4assembler_p.h
680===================================================================748===================================================================
681--- qtdeclarative-opensource-src-5.3.2.orig/src/qml/jit/qv4assembler_p.h749--- qtdeclarative-opensource-src-5.4.0.orig/src/qml/jit/qv4assembler_p.h
682+++ qtdeclarative-opensource-src-5.3.2/src/qml/jit/qv4assembler_p.h750+++ qtdeclarative-opensource-src-5.4.0/src/qml/jit/qv4assembler_p.h
683@@ -70,6 +70,16 @@ namespace JIT {751@@ -63,6 +63,16 @@ namespace JIT {
684 752
685 class InstructionSelection;753 class InstructionSelection;
686 754
@@ -697,7 +765,7 @@
697 struct CompilationUnit : public QV4::CompiledData::CompilationUnit765 struct CompilationUnit : public QV4::CompiledData::CompilationUnit
698 {766 {
699 virtual ~CompilationUnit();767 virtual ~CompilationUnit();
700@@ -82,6 +92,8 @@ struct CompilationUnit : public QV4::Com768@@ -75,6 +85,8 @@ struct CompilationUnit : public QV4::Com
701 769
702 QVector<JSC::MacroAssemblerCodeRef> codeRefs;770 QVector<JSC::MacroAssemblerCodeRef> codeRefs;
703 QList<QVector<QV4::Primitive> > constantValues;771 QList<QVector<QV4::Primitive> > constantValues;
@@ -706,7 +774,7 @@
706 };774 };
707 775
708 struct RelativeCall {776 struct RelativeCall {
709@@ -1151,7 +1163,12 @@ public:777@@ -1064,7 +1076,12 @@ public:
710 move(TrustedImm64(u.i), ReturnValueRegister);778 move(TrustedImm64(u.i), ReturnValueRegister);
711 move64ToDouble(ReturnValueRegister, target);779 move64ToDouble(ReturnValueRegister, target);
712 #else780 #else
@@ -720,7 +788,7 @@
720 #endif788 #endif
721 return target;789 return target;
722 }790 }
723@@ -1241,6 +1258,12 @@ public:791@@ -1152,6 +1169,12 @@ public:
724 Label exceptionReturnLabel;792 Label exceptionReturnLabel;
725 IR::BasicBlock * catchBlock;793 IR::BasicBlock * catchBlock;
726 QVector<Jump> exceptionPropagationJumps;794 QVector<Jump> exceptionPropagationJumps;
@@ -731,12 +799,12 @@
731+ QList<CallToLink>& callsToLink() { return _callsToLink; }799+ QList<CallToLink>& callsToLink() { return _callsToLink; }
732+800+
733 private:801 private:
734 const StackLayout _stackLayout;802 QScopedPointer<const StackLayout> _stackLayout;
735 ConstantTable _constTable;803 ConstantTable _constTable;
736Index: qtdeclarative-opensource-src-5.3.2/src/qml/jit/qv4cachedlinkdata_p.h804Index: qtdeclarative-opensource-src-5.4.0/src/qml/jit/qv4cachedlinkdata_p.h
737===================================================================805===================================================================
738--- /dev/null806--- /dev/null
739+++ qtdeclarative-opensource-src-5.3.2/src/qml/jit/qv4cachedlinkdata_p.h807+++ qtdeclarative-opensource-src-5.4.0/src/qml/jit/qv4cachedlinkdata_p.h
740@@ -0,0 +1,188 @@808@@ -0,0 +1,188 @@
741+/***************************************************************************809+/***************************************************************************
742+**810+**
@@ -926,11 +994,11 @@
926+QT_END_NAMESPACE994+QT_END_NAMESPACE
927+995+
928+#endif996+#endif
929Index: qtdeclarative-opensource-src-5.3.2/src/qml/jit/qv4isel_masm.cpp997Index: qtdeclarative-opensource-src-5.4.0/src/qml/jit/qv4isel_masm.cpp
930===================================================================998===================================================================
931--- qtdeclarative-opensource-src-5.3.2.orig/src/qml/jit/qv4isel_masm.cpp999--- qtdeclarative-opensource-src-5.4.0.orig/src/qml/jit/qv4isel_masm.cpp
932+++ qtdeclarative-opensource-src-5.3.2/src/qml/jit/qv4isel_masm.cpp1000+++ qtdeclarative-opensource-src-5.4.0/src/qml/jit/qv4isel_masm.cpp
933@@ -51,6 +51,7 @@1001@@ -43,6 +43,7 @@
934 #include "qv4assembler_p.h"1002 #include "qv4assembler_p.h"
935 #include "qv4unop_p.h"1003 #include "qv4unop_p.h"
936 #include "qv4binop_p.h"1004 #include "qv4binop_p.h"
@@ -938,7 +1006,7 @@
938 1006
939 #include <QtCore/QBuffer>1007 #include <QtCore/QBuffer>
940 1008
941@@ -147,9 +148,13 @@ JSC::MacroAssemblerCodeRef Assembler::li1009@@ -139,9 +140,13 @@ JSC::MacroAssemblerCodeRef Assembler::li
942 JSC::LinkBuffer linkBuffer(dummy, this, 0);1010 JSC::LinkBuffer linkBuffer(dummy, this, 0);
943 1011
944 QHash<void*, const char*> functions;1012 QHash<void*, const char*> functions;
@@ -953,7 +1021,7 @@
953 }1021 }
954 1022
955 foreach (const DataLabelPatch &p, _dataLabelPatches)1023 foreach (const DataLabelPatch &p, _dataLabelPatches)
956@@ -367,6 +372,25 @@ void InstructionSelection::run(int funct1024@@ -277,6 +282,25 @@ void InstructionSelection::run(int funct
957 JSC::MacroAssemblerCodeRef codeRef =_as->link(&dummySize);1025 JSC::MacroAssemblerCodeRef codeRef =_as->link(&dummySize);
958 compilationUnit->codeRefs[functionIndex] = codeRef;1026 compilationUnit->codeRefs[functionIndex] = codeRef;
959 1027
@@ -979,42 +1047,57 @@
979 qSwap(_function, function);1047 qSwap(_function, function);
980 delete _as;1048 delete _as;
981 _as = oldAssembler;1049 _as = oldAssembler;
982@@ -1828,5 +1852,4 @@ void InstructionSelection::visitCJumpEqu1050@@ -300,6 +324,11 @@ QQmlRefPointer<QV4::CompiledData::Compil
1051 return result;
1052 }
1053
1054+QV4::CompiledData::CompilationUnit* InstructionSelection::mutableCompilationUnit()
1055+{
1056+ return compilationUnit.data();
1057+}
1058+
1059 void InstructionSelection::callBuiltinInvalid(IR::Name *func, IR::ExprList *args, IR::Expr *result)
1060 {
1061 prepareCallData(args, 0);
1062@@ -1800,5 +1829,4 @@ void InstructionSelection::visitCJumpEqu
983 _block, trueBlock, falseBlock);1063 _block, trueBlock, falseBlock);
984 }1064 }
985 1065
986-1066-
987 #endif // ENABLE(ASSEMBLER)1067 #endif // ENABLE(ASSEMBLER)
988Index: qtdeclarative-opensource-src-5.3.2/src/qml/jit/qv4isel_masm_p.h1068Index: qtdeclarative-opensource-src-5.4.0/src/qml/jit/qv4isel_masm_p.h
989===================================================================1069===================================================================
990--- qtdeclarative-opensource-src-5.3.2.orig/src/qml/jit/qv4isel_masm_p.h1070--- qtdeclarative-opensource-src-5.4.0.orig/src/qml/jit/qv4isel_masm_p.h
991+++ qtdeclarative-opensource-src-5.3.2/src/qml/jit/qv4isel_masm_p.h1071+++ qtdeclarative-opensource-src-5.4.0/src/qml/jit/qv4isel_masm_p.h
992@@ -73,6 +73,8 @@ public:1072@@ -65,8 +65,11 @@ public:
993 virtual void run(int functionIndex);1073 virtual void run(int functionIndex);
994 1074
995 const void *addConstantTable(QVector<QV4::Primitive> *values);1075 const void *addConstantTable(QVector<QV4::Primitive> *values);
996+1076+
997+ virtual InstructionSelection* impl() { return this; };1077+ virtual InstructionSelection* impl() { return this; };
998 protected:1078 protected:
999 virtual QV4::CompiledData::CompilationUnit *backendCompileStep();1079 virtual QQmlRefPointer<QV4::CompiledData::CompilationUnit> backendCompileStep();
1080+ virtual QV4::CompiledData::CompilationUnit* mutableCompilationUnit();
1000 1081
1001Index: qtdeclarative-opensource-src-5.3.2/src/qml/jsruntime/qv4functionobject.cpp1082 virtual void callBuiltinInvalid(IR::Name *func, IR::ExprList *args, IR::Expr *result);
1083 virtual void callBuiltinTypeofMember(IR::Expr *base, const QString &name, IR::Expr *result);
1084Index: qtdeclarative-opensource-src-5.4.0/src/qml/jsruntime/qv4functionobject.cpp
1002===================================================================1085===================================================================
1003--- qtdeclarative-opensource-src-5.3.2.orig/src/qml/jsruntime/qv4functionobject.cpp1086--- qtdeclarative-opensource-src-5.4.0.orig/src/qml/jsruntime/qv4functionobject.cpp
1004+++ qtdeclarative-opensource-src-5.3.2/src/qml/jsruntime/qv4functionobject.cpp1087+++ qtdeclarative-opensource-src-5.4.0/src/qml/jsruntime/qv4functionobject.cpp
1005@@ -234,6 +234,7 @@ ReturnedValue FunctionCtor::construct(Ma1088@@ -226,6 +226,7 @@ ReturnedValue FunctionCtor::construct(Ma
1006 1089
1007 QV4::Compiler::JSUnitGenerator jsGenerator(&module);1090 QV4::Compiler::JSUnitGenerator jsGenerator(&module);
1008 QScopedPointer<EvalInstructionSelection> isel(v4->iselFactory->create(QQmlEnginePrivate::get(v4), v4->executableAllocator, &module, &jsGenerator));1091 QScopedPointer<EvalInstructionSelection> isel(v4->iselFactory->create(QQmlEnginePrivate::get(v4), v4->executableAllocator, &module, &jsGenerator));
1009+ isel->setEngine(QQmlEnginePrivate::get(v4));1092+ isel->setEngine(QQmlEnginePrivate::get(v4));
1010 QV4::CompiledData::CompilationUnit *compilationUnit = isel->compile();1093 QQmlRefPointer<QV4::CompiledData::CompilationUnit> compilationUnit = isel->compile();
1011 QV4::Function *vmf = compilationUnit->linkToEngine(v4);1094 QV4::Function *vmf = compilationUnit->linkToEngine(v4);
1012 1095
1013Index: qtdeclarative-opensource-src-5.3.2/src/qml/jsruntime/qv4qobjectwrapper.cpp1096Index: qtdeclarative-opensource-src-5.4.0/src/qml/jsruntime/qv4qobjectwrapper.cpp
1014===================================================================1097===================================================================
1015--- qtdeclarative-opensource-src-5.3.2.orig/src/qml/jsruntime/qv4qobjectwrapper.cpp1098--- qtdeclarative-opensource-src-5.4.0.orig/src/qml/jsruntime/qv4qobjectwrapper.cpp
1016+++ qtdeclarative-opensource-src-5.3.2/src/qml/jsruntime/qv4qobjectwrapper.cpp1099+++ qtdeclarative-opensource-src-5.4.0/src/qml/jsruntime/qv4qobjectwrapper.cpp
1017@@ -628,6 +628,7 @@ ReturnedValue QObjectWrapper::getPropert1100@@ -629,6 +629,7 @@ ReturnedValue QObjectWrapper::getPropert
1018 QQmlPropertyCache *cache = ddata->propertyCache;1101 QQmlPropertyCache *cache = ddata->propertyCache;
1019 Q_ASSERT(cache);1102 Q_ASSERT(cache);
1020 QQmlPropertyData *property = cache->property(propertyIndex);1103 QQmlPropertyData *property = cache->property(propertyIndex);
@@ -1022,19 +1105,19 @@
1022 Q_ASSERT(property); // We resolved this property earlier, so it better exist!1105 Q_ASSERT(property); // We resolved this property earlier, so it better exist!
1023 return getProperty(object, ctx, property, captureRequired);1106 return getProperty(object, ctx, property, captureRequired);
1024 }1107 }
1025Index: qtdeclarative-opensource-src-5.3.2/src/qml/jsruntime/qv4script.cpp1108Index: qtdeclarative-opensource-src-5.4.0/src/qml/jsruntime/qv4script.cpp
1026===================================================================1109===================================================================
1027--- qtdeclarative-opensource-src-5.3.2.orig/src/qml/jsruntime/qv4script.cpp1110--- qtdeclarative-opensource-src-5.4.0.orig/src/qml/jsruntime/qv4script.cpp
1028+++ qtdeclarative-opensource-src-5.3.2/src/qml/jsruntime/qv4script.cpp1111+++ qtdeclarative-opensource-src-5.4.0/src/qml/jsruntime/qv4script.cpp
1029@@ -272,6 +272,7 @@ void Script::parse()1112@@ -259,6 +259,7 @@ void Script::parse()
1030 QScopedPointer<EvalInstructionSelection> isel(v4->iselFactory->create(QQmlEnginePrivate::get(v4), v4->executableAllocator, &module, &jsGenerator));1113 QScopedPointer<EvalInstructionSelection> isel(v4->iselFactory->create(QQmlEnginePrivate::get(v4), v4->executableAllocator, &module, &jsGenerator));
1031 if (inheritContext)1114 if (inheritContext)
1032 isel->setUseFastLookups(false);1115 isel->setUseFastLookups(false);
1033+ isel->setEngine(QQmlEnginePrivate::get(v4));1116+ isel->setEngine(QQmlEnginePrivate::get(v4));
1034 QV4::CompiledData::CompilationUnit *compilationUnit = isel->compile();1117 QQmlRefPointer<QV4::CompiledData::CompilationUnit> compilationUnit = isel->compile();
1035 vmFunction = compilationUnit->linkToEngine(v4);1118 vmFunction = compilationUnit->linkToEngine(v4);
1036 ScopedValue holder(valueScope, new (v4->memoryManager) CompilationUnitHolder(v4, compilationUnit));1119 ScopedObject holder(valueScope, v4->memoryManager->alloc<CompilationUnitHolder>(v4, compilationUnit));
1037@@ -394,6 +395,7 @@ QV4::CompiledData::CompilationUnit *Scri1120@@ -360,6 +361,7 @@ QQmlRefPointer<QV4::CompiledData::Compil
1038 1121
1039 QScopedPointer<EvalInstructionSelection> isel(engine->iselFactory->create(QQmlEnginePrivate::get(engine), engine->executableAllocator, module, unitGenerator));1122 QScopedPointer<EvalInstructionSelection> isel(engine->iselFactory->create(QQmlEnginePrivate::get(engine), engine->executableAllocator, module, unitGenerator));
1040 isel->setUseFastLookups(false);1123 isel->setUseFastLookups(false);
@@ -1042,11 +1125,11 @@
1042 return isel->compile(/*generate unit data*/false);1125 return isel->compile(/*generate unit data*/false);
1043 }1126 }
1044 1127
1045Index: qtdeclarative-opensource-src-5.3.2/src/qml/qml/qqmlengine.cpp1128Index: qtdeclarative-opensource-src-5.4.0/src/qml/qml/qqmlengine.cpp
1046===================================================================1129===================================================================
1047--- qtdeclarative-opensource-src-5.3.2.orig/src/qml/qml/qqmlengine.cpp1130--- qtdeclarative-opensource-src-5.4.0.orig/src/qml/qml/qqmlengine.cpp
1048+++ qtdeclarative-opensource-src-5.3.2/src/qml/qml/qqmlengine.cpp1131+++ qtdeclarative-opensource-src-5.4.0/src/qml/qml/qqmlengine.cpp
1049@@ -561,7 +561,8 @@ QQmlEnginePrivate::QQmlEnginePrivate(QQm1132@@ -559,7 +559,8 @@ QQmlEnginePrivate::QQmlEnginePrivate(QQm
1050 activeObjectCreator(0),1133 activeObjectCreator(0),
1051 networkAccessManager(0), networkAccessManagerFactory(0), urlInterceptor(0),1134 networkAccessManager(0), networkAccessManagerFactory(0), urlInterceptor(0),
1052 scarceResourcesRefCount(0), typeLoader(e), importDatabase(e), uniqueId(1),1135 scarceResourcesRefCount(0), typeLoader(e), importDatabase(e), uniqueId(1),
@@ -1056,12 +1139,12 @@
1056 {1139 {
1057 useNewCompiler = true;1140 useNewCompiler = true;
1058 }1141 }
1059Index: qtdeclarative-opensource-src-5.3.2/src/qml/qml/qqmlengine_p.h1142Index: qtdeclarative-opensource-src-5.4.0/src/qml/qml/qqmlengine_p.h
1060===================================================================1143===================================================================
1061--- qtdeclarative-opensource-src-5.3.2.orig/src/qml/qml/qqmlengine_p.h1144--- qtdeclarative-opensource-src-5.4.0.orig/src/qml/qml/qqmlengine_p.h
1062+++ qtdeclarative-opensource-src-5.3.2/src/qml/qml/qqmlengine_p.h1145+++ qtdeclarative-opensource-src-5.4.0/src/qml/qml/qqmlengine_p.h
1063@@ -270,6 +270,8 @@ public:1146@@ -263,6 +263,8 @@ public:
1064 1147 mutable QMutex networkAccessManagerMutex;
1065 mutable QMutex mutex;1148 mutable QMutex mutex;
1066 1149
1067+ int qmlCacheValid;1150+ int qmlCacheValid;
@@ -1069,11 +1152,11 @@
1069 private:1152 private:
1070 // Locker locks the QQmlEnginePrivate data structures for read and write, if necessary.1153 // Locker locks the QQmlEnginePrivate data structures for read and write, if necessary.
1071 // Currently, locking is only necessary if the threaded loader is running concurrently. If it is1154 // Currently, locking is only necessary if the threaded loader is running concurrently. If it is
1072Index: qtdeclarative-opensource-src-5.3.2/src/qml/qml/qqmljavascriptexpression.cpp1155Index: qtdeclarative-opensource-src-5.4.0/src/qml/qml/qqmljavascriptexpression.cpp
1073===================================================================1156===================================================================
1074--- qtdeclarative-opensource-src-5.3.2.orig/src/qml/qml/qqmljavascriptexpression.cpp1157--- qtdeclarative-opensource-src-5.4.0.orig/src/qml/qml/qqmljavascriptexpression.cpp
1075+++ qtdeclarative-opensource-src-5.3.2/src/qml/qml/qqmljavascriptexpression.cpp1158+++ qtdeclarative-opensource-src-5.4.0/src/qml/qml/qqmljavascriptexpression.cpp
1076@@ -335,6 +335,7 @@ QV4::ReturnedValue QQmlJavaScriptExpress1159@@ -327,6 +327,7 @@ QV4::ReturnedValue QQmlJavaScriptExpress
1077 1160
1078 QV4::ScopedObject qmlScopeObject(scope, QV4::QmlContextWrapper::qmlScope(ep->v8engine(), ctxt, qmlScope));1161 QV4::ScopedObject qmlScopeObject(scope, QV4::QmlContextWrapper::qmlScope(ep->v8engine(), ctxt, qmlScope));
1079 QV4::Script script(v4, qmlScopeObject, code, filename, line);1162 QV4::Script script(v4, qmlScopeObject, code, filename, line);
@@ -1081,3 +1164,33 @@
1081 QV4::ScopedValue result(scope);1164 QV4::ScopedValue result(scope);
1082 script.parse();1165 script.parse();
1083 if (!v4->hasException)1166 if (!v4->hasException)
1167Index: qtdeclarative-opensource-src-5.4.0/src/qml/compiler/qv4isel_moth.cpp
1168===================================================================
1169--- qtdeclarative-opensource-src-5.4.0.orig/src/qml/compiler/qv4isel_moth.cpp
1170+++ qtdeclarative-opensource-src-5.4.0/src/qml/compiler/qv4isel_moth.cpp
1171@@ -457,6 +457,11 @@ QQmlRefPointer<QV4::CompiledData::Compil
1172 return result;
1173 }
1174
1175+QV4::CompiledData::CompilationUnit* InstructionSelection::mutableCompilationUnit()
1176+{
1177+ return compilationUnit.data();
1178+}
1179+
1180 void InstructionSelection::callValue(IR::Expr *value, IR::ExprList *args, IR::Expr *result)
1181 {
1182 Instruction::CallValue call;
1183Index: qtdeclarative-opensource-src-5.4.0/src/qml/jsruntime/qv4global_p.h
1184===================================================================
1185--- qtdeclarative-opensource-src-5.4.0.orig/src/qml/jsruntime/qv4global_p.h
1186+++ qtdeclarative-opensource-src-5.4.0/src/qml/jsruntime/qv4global_p.h
1187@@ -96,6 +96,9 @@ inline double trunc(double d) { return d
1188 #define ENABLE_YARR_JIT 1
1189 #define ENABLE_JIT 1
1190 #define ENABLE_ASSEMBLER 1
1191+#if defined(V4_UNIT_CACHE)
1192+ #define ENABLE_UNIT_CACHE 1
1193+#endif
1194 #else
1195 #define ENABLE_YARR_JIT 0
1196 #define ENABLE_ASSEMBLER 0
10841197
=== modified file 'debian/patches/series'
--- debian/patches/series 2015-02-10 12:14:13 +0000
+++ debian/patches/series 2015-02-26 09:47:31 +0000
@@ -4,4 +4,4 @@
4ppc64el.patch4ppc64el.patch
5Support-RFC2822Date-date-format-similar-to-V8.patch5Support-RFC2822Date-date-format-similar-to-V8.patch
6Fix-regression-where-QQuickScreenAttached-overwrites.patch6Fix-regression-where-QQuickScreenAttached-overwrites.patch
7#QML-Compilation-unit-caching-and-JIT-changes.patch7QML-Compilation-unit-caching-and-JIT-changes.patch
88
=== modified file 'debian/rules'
--- debian/rules 2015-02-04 15:00:17 +0000
+++ debian/rules 2015-02-26 09:47:31 +0000
@@ -4,12 +4,16 @@
4#export DH_VERBOSE=14#export DH_VERBOSE=1
55
6DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)6DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
7DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH)
78
8export CFLAGS := $(shell dpkg-buildflags --get CFLAGS) $(shell dpkg-buildflags --get CPPFLAGS)9export CFLAGS := $(shell dpkg-buildflags --get CFLAGS) $(shell dpkg-buildflags --get CPPFLAGS)
9export CXXFLAGS := $(shell dpkg-buildflags --get CXXFLAGS) $(shell dpkg-buildflags --get CPPFLAGS)10export CXXFLAGS := $(shell dpkg-buildflags --get CXXFLAGS) $(shell dpkg-buildflags --get CPPFLAGS)
10export LDFLAGS := $(shell dpkg-buildflags --get LDFLAGS) -Wl,--as-needed11export LDFLAGS := $(shell dpkg-buildflags --get LDFLAGS) -Wl,--as-needed
11export QT_SELECT := qt512export QT_SELECT := qt5
1213
14# Skip tests on the archs they are known to be flaky with current configuration
15testskip_architectures := powerpc
16
13%:17%:
14 dh $@ --parallel --with pkgkde_symbolshelper --dbg-package=qtdeclarative5-dbg18 dh $@ --parallel --with pkgkde_symbolshelper --dbg-package=qtdeclarative5-dbg
1519
@@ -64,5 +68,8 @@
64 cp -a src/imports/testlib/TestCase.qml qml/QtTest68 cp -a src/imports/testlib/TestCase.qml qml/QtTest
65 cp -a src/imports/testlib/SignalSpy.qml qml/QtTest69 cp -a src/imports/testlib/SignalSpy.qml qml/QtTest
66 cp -a src/imports/testlib/testlogger.js qml/QtTest70 cp -a src/imports/testlib/testlogger.js qml/QtTest
71ifneq ($(DEB_HOST_ARCH),$(findstring $(DEB_HOST_ARCH), $(testskip_architectures)))
72ifeq (,$(findstring nocheck,$(DEB_BUILD_OPTIONS)))
67 xvfb-run -a -s "-screen 0 1024x768x24" dh_auto_test -- QT_PLUGIN_PATH=$(CURDIR)/plugins LD_LIBRARY_PATH=$(CURDIR)/lib QML2_IMPORT_PATH=$(CURDIR)/qml73 xvfb-run -a -s "-screen 0 1024x768x24" dh_auto_test -- QT_PLUGIN_PATH=$(CURDIR)/plugins LD_LIBRARY_PATH=$(CURDIR)/lib QML2_IMPORT_PATH=$(CURDIR)/qml
6874endif
75endif

Subscribers

People subscribed via source and target branches