// // Tracy profiler // ---------------- // // On multi-DLL projects compile and // link with this source file (and none // other) in the executable and in // DLLs / shared objects that link to // the main DLL. // // Define TRACY_ENABLE to enable profiler. #include "common/TracySystem.cpp" #ifdef TRACY_ENABLE #include "client/TracyProfiler.hpp" #include "client/concurrentqueue.h" #include "common/TracyQueue.hpp" #ifdef __APPLE__ # include #endif namespace tracy { #ifdef _WIN32 # define DLL_IMPORT __declspec(dllimport) #else # define DLL_IMPORT #endif DLL_IMPORT void*(*get_rpmalloc())(size_t size); DLL_IMPORT void(*get_rpfree())(void* ptr); DLL_IMPORT moodycamel::ConcurrentQueue::ExplicitProducer*(*get_token())(); DLL_IMPORT Profiler&(*get_profiler())(); DLL_IMPORT std::atomic&(*get_getlockcounter())(); DLL_IMPORT std::atomic&(*get_getgpuctxcounter())(); DLL_IMPORT GpuCtxWrapper&(*get_getgpuctx())(); static void*(*rpmalloc_fpt)(size_t size) = get_rpmalloc(); static void(*rpfree_fpt)(void* ptr) = get_rpfree(); static moodycamel::ConcurrentQueue::ExplicitProducer*(*GetToken_fpt)() = get_token(); static Profiler&(*GetProfiler_fpt)() = get_profiler(); static std::atomic&(*GetLockCounter_fpt)() = get_getlockcounter(); static std::atomic&(*GetGpuCtxCounter_fpt)() = get_getgpuctxcounter(); static GpuCtxWrapper&(*GetGpuCtx_fpt)() = get_getgpuctx(); RPMALLOC_RESTRICT void* rpmalloc(size_t size) { return rpmalloc_fpt(size); } void rpfree(void* ptr) { rpfree_fpt(ptr); } moodycamel::ConcurrentQueue::ExplicitProducer* GetToken() { return GetToken_fpt(); } Profiler& GetProfiler() { return GetProfiler_fpt(); } std::atomic& GetLockCounter() { return GetLockCounter_fpt(); } std::atomic& GetGpuCtxCounter() { return GetGpuCtxCounter_fpt(); } GpuCtxWrapper& GetGpuCtx() { return GetGpuCtx_fpt(); } #if defined TRACY_HW_TIMER && __ARM_ARCH >= 6 && !defined TARGET_OS_IOS DLL_IMPORT int64_t(*get_GetTimeImpl())(); int64_t(*GetTimeImpl)() = get_GetTimeImpl(); #endif #ifdef TRACY_COLLECT_THREAD_NAMES DLL_IMPORT std::atomic&(*get_getthreadnamedata())(); DLL_IMPORT void(*get_rpmalloc_thread_initialize())(); DLL_IMPORT void(*get_InitRPMallocThread())(); static std::atomic&(*GetThreadNameData_fpt)() = get_getthreadnamedata(); static void(*rpmalloc_thread_initialize_fpt)() = get_rpmalloc_thread_initialize(); static void(*InitRPMallocThread_fpt)() = get_InitRPMallocThread(); std::atomic& GetThreadNameData() { return GetThreadNameData_fpt(); } void rpmalloc_thread_initialize(void) { rpmalloc_thread_initialize_fpt(); } void InitRPMallocThread() { InitRPMallocThread_fpt(); } #endif #ifdef TRACY_ON_DEMAND DLL_IMPORT LuaZoneState&(*get_getluazonestate())(); static LuaZoneState&(*GetLuaZoneState_fpt)() = get_getluazonestate(); LuaZoneState& GetLuaZoneState() { return GetLuaZoneState_fpt(); } #endif } #endif