From 75b5f635ef8751ae603b091287df9b505e09414a Mon Sep 17 00:00:00 2001 From: Vladyslav Baranovskyi Date: Thu, 30 May 2024 17:52:02 +0300 Subject: [PATCH] Fallback to display thread id of no name was assigned, OpenVulkano::Utils::GetThreadId() --- openVulkanoCpp/Base/Logger.cpp | 14 ++++++++++++-- openVulkanoCpp/Base/Utils.cpp | 12 ++++++++++-- openVulkanoCpp/Base/Utils.hpp | 1 + 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/openVulkanoCpp/Base/Logger.cpp b/openVulkanoCpp/Base/Logger.cpp index 55641de..c93731c 100644 --- a/openVulkanoCpp/Base/Logger.cpp +++ b/openVulkanoCpp/Base/Logger.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #ifndef NO_CONSOLE_LOG @@ -182,8 +183,17 @@ namespace OpenVulkano void CustomThreadNameFormatterFlag::format(const spdlog::details::log_msg &msg, const std::tm &tmTime, spdlog::memory_buf_t &dest) { std::string threadName = OpenVulkano::Utils::GetThreadName(); - // NOTE(vb): What should be displayed if the thread name wasn't specified? - dest.append(threadName.c_str(), threadName.c_str() + threadName.length()); + if(threadName.length()) + { + dest.append(threadName.c_str(), threadName.c_str() + threadName.length()); + } + else + { + uint64_t threadId = OpenVulkano::Utils::GetThreadId(); + char buffer[64]; + snprintf(buffer, sizeof(buffer), "%" PRIu64, threadId); + dest.append(buffer, buffer + strlen(buffer)); + } } std::unique_ptr CustomThreadNameFormatterFlag::clone() const diff --git a/openVulkanoCpp/Base/Utils.cpp b/openVulkanoCpp/Base/Utils.cpp index d452509..95c2ca7 100644 --- a/openVulkanoCpp/Base/Utils.cpp +++ b/openVulkanoCpp/Base/Utils.cpp @@ -43,14 +43,22 @@ namespace OpenVulkano return str; #else // NOTE(vb): Accoring to linux man page size of this array must be _at least_ 16 bytes... - // But I don't know whether is it applicable to have the buffer of bigger size - char threadName[16]; + char threadName[64]; pthread_getname_np(pthread_self(), threadName, sizeof(threadName)); std::string str = threadName; return str; #endif } + uint64_t Utils::GetThreadId() + { +#ifdef _MSC_VER + return (uint64_t)::GetThreadId(::GetCurrentThread()); +#else + return (uint64_t)pthread_self(); +#endif + } + Array Utils::ReadFile(const std::string& filePath, bool emptyOnMissing) { std::ifstream file(filePath, std::ios::ate | std::ios::binary); diff --git a/openVulkanoCpp/Base/Utils.hpp b/openVulkanoCpp/Base/Utils.hpp index 9c803bd..c6fbdab 100644 --- a/openVulkanoCpp/Base/Utils.hpp +++ b/openVulkanoCpp/Base/Utils.hpp @@ -20,6 +20,7 @@ namespace OpenVulkano public: static void SetThreadName(const std::string& name); static std::string GetThreadName(); + static uint64_t GetThreadId(); static inline std::vector toCString(const std::vector& values) {