aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs
diff options
context:
space:
mode:
authorMarco Bubke <marco.bubke@qt.io>2024-03-18 18:34:11 +0100
committerMarco Bubke <marco.bubke@qt.io>2024-03-20 13:14:08 +0000
commit7de2ae2ff4e7a532b2a559cbad9823f4ba41b878 (patch)
treec82e2f72bde55ad65dc09cef15b7d6a073d2fa71 /src/libs
parent26870406cdf45a56a95b9b00df7eff8828f124fc (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.h81
-rw-r--r--src/libs/nanotrace/staticstring.h2
-rw-r--r--src/libs/sqlite/sqliteids.h15
-rw-r--r--src/libs/sqlite/sqlitevalue.h24
-rw-r--r--src/libs/utils/smallstring.h10
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;