diff options
author | Marco Bubke <marco.bubke@qt.io> | 2024-03-18 18:34:11 +0100 |
---|---|---|
committer | Marco Bubke <marco.bubke@qt.io> | 2024-03-20 13:14:08 +0000 |
commit | 7de2ae2ff4e7a532b2a559cbad9823f4ba41b878 (patch) | |
tree | c82e2f72bde55ad65dc09cef15b7d6a073d2fa71 /src/libs | |
parent | 26870406cdf45a56a95b9b00df7eff8828f124fc (diff) |
QmlDesigner: Add more tracing to project storage
Change-Id: Iee113981ffa49b4f03b7641e7030a2f19f917fc6
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Qt CI Patch Build Bot <ci_patchbuild_bot@qt.io>
Diffstat (limited to 'src/libs')
-rw-r--r-- | src/libs/nanotrace/nanotracehr.h | 81 | ||||
-rw-r--r-- | src/libs/nanotrace/staticstring.h | 2 | ||||
-rw-r--r-- | src/libs/sqlite/sqliteids.h | 15 | ||||
-rw-r--r-- | src/libs/sqlite/sqlitevalue.h | 24 | ||||
-rw-r--r-- | src/libs/utils/smallstring.h | 10 |
5 files changed, 79 insertions, 53 deletions
diff --git a/src/libs/nanotrace/nanotracehr.h b/src/libs/nanotrace/nanotracehr.h index 8fd9d1669b..5f2b031d55 100644 --- a/src/libs/nanotrace/nanotracehr.h +++ b/src/libs/nanotrace/nanotracehr.h @@ -11,7 +11,9 @@ #include <utils/span.h> #include <QByteArrayView> +#include <QList> #include <QStringView> +#include <QVarLengthArray> #include <QVariant> #include <array> @@ -44,7 +46,7 @@ enum class Tracing { IsDisabled, IsEnabled }; # define NO_UNIQUE_ADDRESS #endif -using ArgumentsString = StaticString<1016>; +using ArgumentsString = StaticString<3700>; namespace Literals { struct TracerLiteral @@ -129,32 +131,14 @@ void convertToString(String &string, bool isTrue) string.append("false"); } -template<typename String, typename Callable, typename = std::enable_if_t<std::is_invocable_v<Callable>>> +template<typename String, typename Callable, typename std::enable_if_t<std::is_invocable_v<Callable>, bool> = true> void convertToString(String &string, Callable &&callable) { convertToString(string, callable()); } -template<typename String> -void convertToString(String &string, int number) -{ - string.append(number); -} - -template<typename String> -void convertToString(String &string, long long number) -{ - string.append(number); -} - -template<typename String> -void convertToString(String &string, std::size_t number) -{ - string.append(number); -} - -template<typename String> -void convertToString(String &string, double number) +template<typename String, typename Number, typename std::enable_if_t<std::is_arithmetic_v<Number>, bool> = true> +void convertToString(String &string, Number number) { string.append(number); } @@ -166,7 +150,7 @@ constexpr std::underlying_type_t<Enumeration> to_underlying(Enumeration enumerat return static_cast<std::underlying_type_t<Enumeration>>(enumeration); } -template<typename String, typename Enumeration, typename = std::enable_if_t<std::is_enum_v<Enumeration>>> +template<typename String, typename Enumeration, typename std::enable_if_t<std::is_enum_v<Enumeration>, bool> = true> void convertToString(String &string, Enumeration enumeration) { string.append(to_underlying(enumeration)); @@ -184,14 +168,14 @@ void convertToString(String &string, const QVariant &value) convertToString(string, value.toString()); } -template<typename String, typename... Arguments> -void convertToString(String &string, const std::tuple<const IsDictonary &, Arguments...> &dictonary); - -template<typename String, typename... Arguments> -void convertToString(String &string, const std::tuple<const IsArray &, Arguments...> &list); - -template<typename String, template<typename...> typename Container, typename... Arguments> -void convertToString(String &string, const Container<Arguments...> &container); +template<typename String, typename Type> +void convertToString(String &string, const std::optional<Type> &value) +{ + if (value) + convertToString(string, *value); + else + convertToString(string, "empty optional"); +} template<typename String, typename Value> void convertArrayEntryToString(String &string, const Value &value) @@ -211,7 +195,7 @@ void convertArrayToString(String &string, const IsArray &, Entries &...entries) } template<typename String, typename... Arguments> -void convertToString(String &string, const std::tuple<const IsArray &, Arguments...> &list) +void convertToString(String &string, const std::tuple<IsArray, Arguments...> &list) { std::apply([&](auto &&...entries) { convertArrayToString(string, entries...); }, list); } @@ -242,16 +226,31 @@ void convertToString(String &string, const std::tuple<IsDictonary, Arguments...> std::apply([&](auto &&...entries) { convertDictonaryToString(string, entries...); }, dictonary); } -template<typename String, template<typename...> typename Container, typename... Arguments> -void convertToString(String &string, const Container<Arguments...> &container) +template<typename T> +struct is_container : std::false_type +{}; + +template<typename... Arguments> +struct is_container<std::vector<Arguments...>> : std::true_type +{}; + +template<typename... Arguments> +struct is_container<QList<Arguments...>> : std::true_type +{}; + +template<typename T, qsizetype Prealloc> +struct is_container<QVarLengthArray<T, Prealloc>> : std::true_type +{}; + +template<typename String, typename Container, typename std::enable_if_t<is_container<Container>::value, bool> = true> +void convertToString(String &string, const Container &values) { string.append('['); - for (const auto &entry : container) { - convertToString(string, entry); - string.append(','); - } - if (container.size()) + for (const auto &value : values) + convertToString(string, value); + + if (values.size()) string.pop_back(); string.append(']'); @@ -337,7 +336,7 @@ inline bool operator&(IsFlow first, IsFlow second) } template<typename String, typename ArgumentsString> -struct TraceEvent +struct alignas(4096) TraceEvent { using StringType = String; using ArgumentType = std::conditional_t<std::is_same_v<String, std::string_view>, TracerLiteral, String>; @@ -352,13 +351,13 @@ struct TraceEvent String name; String category; - ArgumentsString arguments; TimePoint time; Duration duration; std::size_t id = 0; std::size_t bindId : 62; IsFlow flow : 2; char type = ' '; + ArgumentsString arguments; }; using StringViewTraceEvent = TraceEvent<std::string_view, std::string_view>; diff --git a/src/libs/nanotrace/staticstring.h b/src/libs/nanotrace/staticstring.h index 2f845919bd..0d5c8a1400 100644 --- a/src/libs/nanotrace/staticstring.h +++ b/src/libs/nanotrace/staticstring.h @@ -55,7 +55,7 @@ public: } } - template<typename Type, typename = std::enable_if_t<std::is_arithmetic_v<Type>>> + template<typename Type, typename std::enable_if_t<std::is_arithmetic_v<Type>, bool> = true> void append(Type number) { #if !(defined(__cpp_lib_to_chars) && (__cpp_lib_to_chars >= 201611L)) diff --git a/src/libs/sqlite/sqliteids.h b/src/libs/sqlite/sqliteids.h index 75490ecccd..1ffd546d9f 100644 --- a/src/libs/sqlite/sqliteids.h +++ b/src/libs/sqlite/sqliteids.h @@ -65,6 +65,15 @@ public: [[noreturn, deprecated]] InternalIntegerType operator&() const { throw std::exception{}; } + template<typename String> + friend void convertToString(String &string, BasicId id) + { + if (id.isValid()) + NanotraceHR::convertToString(string, id.internalId()); + else + NanotraceHR::convertToString(string, "invalid"); + } + private: InternalIntegerType id = 0; }; @@ -78,12 +87,6 @@ auto toIntegers(const Container &container) return Utils::span{data, container.size()}; } -template<typename String, auto Type, typename InternalIntegerType = long long> -void convertToString(String &string, BasicId<Type, InternalIntegerType> id) -{ - NanotraceHR::convertToString(string, id.internalId()); -} - } // namespace Sqlite namespace std { diff --git a/src/libs/sqlite/sqlitevalue.h b/src/libs/sqlite/sqlitevalue.h index fe576f3fec..ec4120139a 100644 --- a/src/libs/sqlite/sqlitevalue.h +++ b/src/libs/sqlite/sqlitevalue.h @@ -6,6 +6,7 @@ #include "sqliteblob.h" #include "sqliteexception.h" +#include <nanotrace/nanotracehr.h> #include <utils/smallstring.h> #include <QVariant> @@ -386,4 +387,27 @@ private: }; using Values = std::vector<Value>; + +template<typename String> +void convertToString(String &string, const Value &value) +{ + switch (value.type()) { + case ValueType::Null: + convertToString(string, "null"); + break; + case ValueType::Integer: + convertToString(string, value.toInteger()); + break; + case ValueType::Float: + convertToString(string, value.toFloat()); + break; + case ValueType::String: + convertToString(string, value.toStringView()); + break; + case ValueType::Blob: + convertToString(string, "blob"); + break; + } +} + } // namespace Sqlite diff --git a/src/libs/utils/smallstring.h b/src/libs/utils/smallstring.h index 530022f475..a8869b4ccf 100644 --- a/src/libs/utils/smallstring.h +++ b/src/libs/utils/smallstring.h @@ -93,7 +93,7 @@ public: static_cast<std::size_t>(std::distance(begin, end))} {} - template<typename Type, typename = std::enable_if_t<std::is_pointer<Type>::value>> + template<typename Type, typename std::enable_if_t<std::is_pointer<Type>::value, bool> = true> BasicSmallString(Type characterPointer) noexcept : BasicSmallString(characterPointer, std::char_traits<char>::length(characterPointer)) { @@ -118,7 +118,7 @@ public: template<typename BeginIterator, typename EndIterator, - typename = std::enable_if_t<std::is_same<BeginIterator, EndIterator>::value>> + typename std::enable_if_t<std::is_same<BeginIterator, EndIterator>::value, bool> = true> BasicSmallString(BeginIterator begin, EndIterator end) noexcept : BasicSmallString(&(*begin), size_type(end - begin)) {} @@ -447,7 +447,7 @@ public: setSize(newSize); } - template<typename Type, typename = std::enable_if_t<std::is_arithmetic_v<Type>>> + template<typename Type, typename std::enable_if_t<std::is_arithmetic_v<Type>, bool> = true> void append(Type number) { #if defined(__cpp_lib_to_chars) && (__cpp_lib_to_chars >= 201611L) @@ -527,7 +527,7 @@ public: return *this; } - template<typename Type, typename = std::enable_if_t<std::is_arithmetic_v<Type>>> + template<typename Type, typename std::enable_if_t<std::is_arithmetic_v<Type>, bool> = true> BasicSmallString &operator+=(Type number) noexcept { append(number); @@ -639,7 +639,7 @@ public: return joinedString; } - template<typename Type, typename = std::enable_if_t<std::is_arithmetic_v<Type>>> + template<typename Type, typename std::enable_if_t<std::is_arithmetic_v<Type>, bool> = true> static BasicSmallString number(Type number) { BasicSmallString string; |