diff options
author | Oliver Wolff <oliver.wolff@qt.io> | 2018-02-16 14:19:25 +0100 |
---|---|---|
committer | Oliver Wolff <oliver.wolff@qt.io> | 2018-02-22 06:30:29 +0000 |
commit | ab03ee7b7e12ae64556513e4791b0d4d55ea26c4 (patch) | |
tree | 936f18188bf52ce75bbc50e4428cd3953feb00f3 /src | |
parent | c9398266d804d570f305590df9481028c9880175 (diff) |
WinRT: Do not call canAllocateExecutableMemory from static initializer
When the code generation capability is not set, the first call of
canAllocateExecutableMemory will cause a warning about suboptimal
performance. The qWarning code checks, which thread caused the message
and QThread::current sets QCoreApplicationPrivate;s theMainThread when
it is called for the first time on Windows.
If we call that function inside a static initializer, it will be called
before QCoreApplication is created and thus set the main thread to the
one that called the function. This will cause a warning about QApplication
not being created inside the main() thread, but more importantly,
delivering of events will not work in WinRT applications afterwards.
Task-number: QTBUG-66418
Change-Id: I3b6bf804983644b5ae5fe2288a587dc95fab2c8b
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/qml/jsruntime/qv4engine.cpp | 6 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4engine_p.h | 8 |
2 files changed, 7 insertions, 7 deletions
diff --git a/src/qml/jsruntime/qv4engine.cpp b/src/qml/jsruntime/qv4engine.cpp index ce29afdb6c..4b5aadbdcf 100644 --- a/src/qml/jsruntime/qv4engine.cpp +++ b/src/qml/jsruntime/qv4engine.cpp @@ -120,9 +120,6 @@ QQmlEngine *ExecutionEngine::qmlEngine() const #endif // V4_BOOTSTRAP qint32 ExecutionEngine::maxCallDepth = -1; -#if defined(V4_ENABLE_JIT) && !defined(V4_BOOTSTRAP) -const bool ExecutionEngine::canAllocateExecutableMemory = OSAllocator::canAllocateExecutableMemory(); -#endif ExecutionEngine::ExecutionEngine() : executableAllocator(new QV4::ExecutableAllocator) @@ -137,6 +134,9 @@ ExecutionEngine::ExecutionEngine() , m_engineId(engineSerial.fetchAndAddOrdered(1)) , regExpCache(0) , m_multiplyWrappedQObjects(0) +#if defined(V4_ENABLE_JIT) && !defined(V4_BOOTSTRAP) + , m_canAllocateExecutableMemory(OSAllocator::canAllocateExecutableMemory()) +#endif { memoryManager = new QV4::MemoryManager(this); diff --git a/src/qml/jsruntime/qv4engine_p.h b/src/qml/jsruntime/qv4engine_p.h index 930ad8fed1..a37c640431 100644 --- a/src/qml/jsruntime/qv4engine_p.h +++ b/src/qml/jsruntime/qv4engine_p.h @@ -368,6 +368,9 @@ public: // but any time a QObject is wrapped a second time in another engine, we have to do // bookkeeping. MultiplyWrappedQObjectMap *m_multiplyWrappedQObjects; +#if defined(V4_ENABLE_JIT) && !defined(V4_BOOTSTRAP) + const bool m_canAllocateExecutableMemory; +#endif int internalClassIdCount = 0; @@ -487,7 +490,7 @@ public: bool canJIT(Function *f = nullptr) { #if defined(V4_ENABLE_JIT) && !defined(V4_BOOTSTRAP) - if (!canAllocateExecutableMemory) + if (!m_canAllocateExecutableMemory) return false; if (f) return f->interpreterCallCount >= jitCallCountThreshold; @@ -506,9 +509,6 @@ private: QScopedPointer<QV4::Profiling::Profiler> m_profiler; #endif int jitCallCountThreshold; -#if defined(V4_ENABLE_JIT) && !defined(V4_BOOTSTRAP) - static const bool canAllocateExecutableMemory; -#endif }; // This is a trick to tell the code generators that functions taking a NoThrowContext won't |