tracy/common/TracySystem.hpp

60 lines
1.4 KiB
C++
Raw Normal View History

2017-09-10 15:46:20 +00:00
#ifndef __TRACYSYSTEM_HPP__
#define __TRACYSYSTEM_HPP__
#ifdef TRACY_ENABLE
# if defined __ANDROID__ || defined __CYGWIN__ || defined __APPLE__ || defined _GNU_SOURCE || ( defined _WIN32 && ( !defined NTDDI_WIN10_RS2 || NTDDI_VERSION < NTDDI_WIN10_RS2 ) )
# define TRACY_COLLECT_THREAD_NAMES
# endif
#endif
#ifdef _WIN32
2019-02-19 18:36:30 +00:00
# ifndef _WINDOWS_
extern "C" __declspec(dllimport) unsigned long __stdcall GetCurrentThreadId(void);
2019-02-19 18:36:30 +00:00
# endif
#else
# include <pthread.h>
#endif
#include <stdint.h>
2017-09-10 15:46:20 +00:00
#include <thread>
#include "TracyApi.h"
2017-09-10 15:46:20 +00:00
namespace tracy
{
namespace detail
{
static inline uint64_t GetThreadHandleImpl()
{
#ifdef _WIN32
static_assert( sizeof( decltype( GetCurrentThreadId() ) ) <= sizeof( uint64_t ), "Thread handle too big to fit in protocol" );
return uint64_t( GetCurrentThreadId() );
2017-11-03 10:09:31 +00:00
#elif defined __APPLE__
2017-11-03 09:49:49 +00:00
uint64_t id;
2017-11-03 10:12:17 +00:00
pthread_threadid_np( pthread_self(), &id );
2017-11-03 09:49:49 +00:00
return id;
#else
static_assert( sizeof( decltype( pthread_self() ) ) <= sizeof( uint64_t ), "Thread handle too big to fit in protocol" );
return uint64_t( pthread_self() );
#endif
}
}
#ifdef TRACY_ENABLE
TRACY_API uint64_t GetThreadHandle();
#else
static inline uint64_t GetThreadHandle()
{
return detail::GetThreadHandleImpl();
}
#endif
2017-09-10 15:46:20 +00:00
void SetThreadName( std::thread& thread, const char* name );
void SetThreadName( std::thread::native_handle_type handle, const char* name );
const char* GetThreadName( uint64_t id );
2017-09-10 15:46:20 +00:00
}
#endif