From ad48b299b7fe0bbed2749adc66725e4f12661f79 Mon Sep 17 00:00:00 2001 From: hjk Date: Fri, 16 Sep 2016 14:30:14 +0200 Subject: Add a facility to version type information for debugging This serves the same purpose as qtbase/corelib/global/qhooks.cpp, but is meant to be in sync with changes in Qt Declarative internals. Change-Id: I5a4a7d9ca5c340367581749e05d09380590c46fb Reviewed-by: Ulf Hermann --- src/qml/debugger/qqmldebug.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src/qml/debugger') diff --git a/src/qml/debugger/qqmldebug.cpp b/src/qml/debugger/qqmldebug.cpp index 35dc110e9a..ea98bb16fa 100644 --- a/src/qml/debugger/qqmldebug.cpp +++ b/src/qml/debugger/qqmldebug.cpp @@ -119,4 +119,22 @@ bool QQmlDebuggingEnabler::connectToLocalDebugger(const QString &socketFileName, return false; } +enum { HookCount = 3 }; + +// Only add to the end, and bump version if you do. +quintptr Q_QML_EXPORT qtDeclarativeHookData[] = { + // Version of this Array. Bump if you add to end. + 1, + + // Number of entries in this array. + HookCount, + + // TypeInformationVersion, an integral value, bumped whenever private + // object sizes or member offsets that are used in Qt Creator's + // data structure "pretty printing" change. + 1 +}; + +Q_STATIC_ASSERT(HookCount == sizeof(qtDeclarativeHookData) / sizeof(qtDeclarativeHookData[0])); + QT_END_NAMESPACE -- cgit v1.2.3 From 2afb54fb51091765f79548b0b057795bc3c6eb38 Mon Sep 17 00:00:00 2001 From: Erik Verbruggen Date: Fri, 23 Sep 2016 11:34:12 +0200 Subject: V4: Free up 2 address bits in 64bit mode This allows for the OS to use 49 address bits. It also maps JS Undefined to the C++ nullptr on 64bit. Task-number: QTBUG-54822 Change-Id: I7cc90620f499be1506a61aac77d72d067308838c Reviewed-by: Lars Knoll --- src/qml/debugger/qqmldebug.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/qml/debugger') diff --git a/src/qml/debugger/qqmldebug.cpp b/src/qml/debugger/qqmldebug.cpp index ea98bb16fa..e864469da6 100644 --- a/src/qml/debugger/qqmldebug.cpp +++ b/src/qml/debugger/qqmldebug.cpp @@ -132,7 +132,7 @@ quintptr Q_QML_EXPORT qtDeclarativeHookData[] = { // TypeInformationVersion, an integral value, bumped whenever private // object sizes or member offsets that are used in Qt Creator's // data structure "pretty printing" change. - 1 + 2 }; Q_STATIC_ASSERT(HookCount == sizeof(qtDeclarativeHookData) / sizeof(qtDeclarativeHookData[0])); -- cgit v1.2.3 From 330663c7b6d0faa7d10ec511d58b317a5ec37a19 Mon Sep 17 00:00:00 2001 From: Erik Verbruggen Date: Fri, 14 Oct 2016 12:00:14 +0200 Subject: QML: Prevent unnecessary QUrl->QString->QByteArray conversions When QQmlMemoryProfiler is not used, do not convert the filename URL of a component to be converted from QUrl to a UTF8 char array. Change-Id: I741ec5b58678f3a25badac38f0198c9cff203eb1 Reviewed-by: Simon Hausmann --- src/qml/debugger/qqmlmemoryprofiler.cpp | 37 +++++++++---------------- src/qml/debugger/qqmlmemoryprofiler_p.h | 48 +++++++++++++++++++++++++++++---- 2 files changed, 55 insertions(+), 30 deletions(-) (limited to 'src/qml/debugger') diff --git a/src/qml/debugger/qqmlmemoryprofiler.cpp b/src/qml/debugger/qqmlmemoryprofiler.cpp index 60f6d96eaf..53d4e7ab21 100644 --- a/src/qml/debugger/qqmlmemoryprofiler.cpp +++ b/src/qml/debugger/qqmlmemoryprofiler.cpp @@ -38,18 +38,11 @@ ****************************************************************************/ #include "qqmlmemoryprofiler_p.h" -#include QT_BEGIN_NAMESPACE -enum LibraryState -{ - Unloaded, - Failed, - Loaded -}; -static LibraryState state = Unloaded; +QQmlMemoryScope::LibraryState QQmlMemoryScope::state = QQmlMemoryScope::Unloaded; typedef void (qmlmemprofile_stats)(int *allocCount, int *bytesAllocated); typedef void (qmlmemprofile_clear)(); @@ -73,7 +66,7 @@ static qmlmemprofile_is_enabled *memprofile_is_enabled; extern QFunctionPointer qt_linux_find_symbol_sys(const char *symbol); #endif -static bool openLibrary() +bool QQmlMemoryScope::doOpenLibrary() { #if defined(Q_OS_LINUX) && !defined(QT_NO_LIBRARY) if (state == Unloaded) { @@ -97,28 +90,22 @@ static bool openLibrary() return state == Loaded; } -QQmlMemoryScope::QQmlMemoryScope(const QUrl &url) - : QQmlMemoryScope(url.path().toUtf8().constData()) -{ -} - -QQmlMemoryScope::QQmlMemoryScope(const char *string) : pushed(false) +void QQmlMemoryScope::init(const char *string) { - if (openLibrary() && memprofile_is_enabled()) { + if (memprofile_is_enabled()) { memprofile_push_location(string, 0); pushed = true; } } -QQmlMemoryScope::~QQmlMemoryScope() +void QQmlMemoryScope::done() { - if (pushed) - memprofile_pop_location(); + memprofile_pop_location(); } bool QQmlMemoryProfiler::isEnabled() { - if (openLibrary()) + if (QQmlMemoryScope::openLibrary()) return memprofile_is_enabled(); return false; @@ -126,31 +113,31 @@ bool QQmlMemoryProfiler::isEnabled() void QQmlMemoryProfiler::enable() { - if (openLibrary()) + if (QQmlMemoryScope::openLibrary()) memprofile_enable(); } void QQmlMemoryProfiler::disable() { - if (openLibrary()) + if (QQmlMemoryScope::openLibrary()) memprofile_disable(); } void QQmlMemoryProfiler::clear() { - if (openLibrary()) + if (QQmlMemoryScope::openLibrary()) memprofile_clear(); } void QQmlMemoryProfiler::stats(int *allocCount, int *bytesAllocated) { - if (openLibrary()) + if (QQmlMemoryScope::openLibrary()) memprofile_stats(allocCount, bytesAllocated); } void QQmlMemoryProfiler::save(const char *filename) { - if (openLibrary()) + if (QQmlMemoryScope::openLibrary()) memprofile_save(filename); } diff --git a/src/qml/debugger/qqmlmemoryprofiler_p.h b/src/qml/debugger/qqmlmemoryprofiler_p.h index 59f08704ca..fb71c999c3 100644 --- a/src/qml/debugger/qqmlmemoryprofiler_p.h +++ b/src/qml/debugger/qqmlmemoryprofiler_p.h @@ -52,6 +52,7 @@ // #include +#include QT_BEGIN_NAMESPACE @@ -62,16 +63,53 @@ QT_BEGIN_NAMESPACE #else -class QUrl; - class Q_QML_PRIVATE_EXPORT QQmlMemoryScope { public: - explicit QQmlMemoryScope(const QUrl &url); - explicit QQmlMemoryScope(const char *string); - ~QQmlMemoryScope(); + explicit QQmlMemoryScope(const QUrl &url) + : pushed(false) + { + if (Q_UNLIKELY(openLibrary())) + init(url.path().toUtf8().constData()); + } + + explicit QQmlMemoryScope(const char *string) + : pushed(false) + { + if (Q_UNLIKELY(openLibrary())) + init(string); + } + + ~QQmlMemoryScope() + { + if (Q_UNLIKELY(pushed)) + done(); + } + + enum LibraryState + { + Unloaded, + Failed, + Loaded + }; + + static bool openLibrary() + { + if (Q_LIKELY(state == Loaded)) + return true; + if (state == Failed) + return false; + + return doOpenLibrary(); + } private: + Q_NEVER_INLINE void init(const char *string); + Q_NEVER_INLINE void done(); + Q_NEVER_INLINE static bool doOpenLibrary(); + + static LibraryState state; + bool pushed; }; -- cgit v1.2.3