/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ #include "Utils.hpp" #ifdef _MSC_VER #include #else #include #endif #include #include #include #include namespace OpenVulkano { void Utils::SetThreadName(const std::string& name) { #ifdef _MSC_VER auto thisThread = ::GetCurrentThread(); std::wstring namew(name.begin(), name.end()); SetThreadDescription(thisThread, namew.c_str()); #elif __APPLE__ pthread_setname_np(name.c_str()); #else pthread_setname_np(pthread_self(), name.c_str()); #endif } std::string Utils::GetThreadName() { #ifdef _MSC_VER auto thisThread = ::GetCurrentThread(); PWSTR threadName; GetThreadDescription(thisThread, &threadName); std::wstring_convert> converter; std::string str = converter.to_bytes(threadName); LocalFree(threadName); return str; #else // NOTE(vb): Accoring to linux man page size of this array must be _at least_ 16 bytes... 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); if (!file.is_open()) { if (emptyOnMissing) return {}; throw std::runtime_error("Failed to open file '" + filePath + "'!"); } const size_t fileSize = static_cast(file.tellg()); Array data(fileSize); file.seekg(0); file.read(data.Data(), fileSize); file.close(); return data; } }