| /* |
| Copyright (C) 2026 Intel Corporation |
| SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only) |
| */ |
| |
| #ifndef ITTAPI_UTILS_HPP |
| #define ITTAPI_UTILS_HPP |
| |
| #include <ittnotify.h> |
| |
| #include <string> |
| #include <string_view> |
| #include <unordered_map> |
| |
| namespace ittapi |
| { |
| namespace detail |
| { |
| |
| inline __itt_domain* create_domain(const char* name) noexcept |
| { |
| #if ITT_PLATFORM == ITT_PLATFORM_WIN |
| return __itt_domain_createA(name); |
| #else |
| return __itt_domain_create(name); |
| #endif |
| } |
| |
| inline __itt_string_handle* create_string_handle(const char* name) noexcept |
| { |
| #if ITT_PLATFORM == ITT_PLATFORM_WIN |
| return __itt_string_handle_createA(name); |
| #else |
| return __itt_string_handle_create(name); |
| #endif |
| } |
| |
| inline __itt_string_handle* get_or_create_string_handle(std::string_view name) |
| { |
| thread_local std::unordered_map<std::string_view, __itt_string_handle*> cache; |
| auto it = cache.find(name); |
| if (it != cache.end()) |
| { |
| return it->second; |
| } |
| __itt_string_handle* h = create_string_handle(std::string(name).c_str()); |
| if (h != nullptr) |
| { |
| cache.emplace(h->strA, h); |
| } |
| return h; |
| } |
| |
| inline void thread_set_name(const char* name) noexcept |
| { |
| #if ITT_PLATFORM == ITT_PLATFORM_WIN |
| __itt_thread_set_nameA(name); |
| #else |
| __itt_thread_set_name(name); |
| #endif |
| } |
| |
| #if ITT_PLATFORM == ITT_PLATFORM_WIN |
| |
| inline __itt_domain* create_domain(const wchar_t* name) noexcept |
| { |
| return __itt_domain_createW(name); |
| } |
| |
| inline __itt_string_handle* create_string_handle(const wchar_t* name) noexcept |
| { |
| return __itt_string_handle_createW(name); |
| } |
| |
| inline __itt_string_handle* get_or_create_string_handle(std::wstring_view name) |
| { |
| thread_local std::unordered_map<std::wstring_view, __itt_string_handle*> cache; |
| auto it = cache.find(name); |
| if (it != cache.end()) |
| { |
| return it->second; |
| } |
| __itt_string_handle* h = create_string_handle(std::wstring(name).c_str()); |
| if (h != nullptr) |
| { |
| cache.emplace(static_cast<const wchar_t*>(h->strW), h); |
| } |
| return h; |
| } |
| |
| inline void thread_set_name(const wchar_t* name) noexcept |
| { |
| __itt_thread_set_nameW(name); |
| } |
| |
| #endif // ITT_PLATFORM == ITT_PLATFORM_WIN |
| |
| inline __itt_id get_null_id() noexcept |
| { |
| __itt_id id = __itt_null; |
| return id; |
| } |
| |
| inline bool is_null_id(const __itt_id& id) noexcept |
| { |
| return id.d1 == 0 && id.d2 == 0 && id.d3 == 0; |
| } |
| |
| } // namespace detail |
| } // namespace ittapi |
| |
| #endif // ITTAPI_UTILS_HPP |