tracy/TracyClientDLL.cpp

89 lines
3.1 KiB
C++
Raw Normal View History

2018-07-30 16:12:42 +00:00
//
// 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 <TargetConditionals.h>
#endif
2018-07-30 16:12:42 +00:00
namespace tracy
{
2019-01-19 11:03:30 +00:00
#ifdef _WIN32
2018-07-30 16:12:42 +00:00
# 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);
2019-02-19 17:45:41 +00:00
DLL_IMPORT moodycamel::ConcurrentQueue<QueueItem>::ExplicitProducer*(*get_token())();
DLL_IMPORT Profiler&(*get_profiler())();
2019-02-19 18:33:37 +00:00
DLL_IMPORT std::atomic<uint32_t>&(*get_getlockcounter())();
DLL_IMPORT std::atomic<uint8_t>&(*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<QueueItem>::ExplicitProducer*(*GetToken_fpt)() = get_token();
static Profiler&(*GetProfiler_fpt)() = get_profiler();
static std::atomic<uint32_t>&(*GetLockCounter_fpt)() = get_getlockcounter();
static std::atomic<uint8_t>&(*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<QueueItem>::ExplicitProducer* GetToken() { return GetToken_fpt(); }
Profiler& GetProfiler() { return GetProfiler_fpt(); }
std::atomic<uint32_t>& GetLockCounter() { return GetLockCounter_fpt(); }
std::atomic<uint8_t>& GetGpuCtxCounter() { return GetGpuCtxCounter_fpt(); }
GpuCtxWrapper& GetGpuCtx() { return GetGpuCtx_fpt(); }
2018-07-30 16:12:42 +00:00
#if defined TRACY_HW_TIMER && __ARM_ARCH >= 6 && !defined TARGET_OS_IOS
2018-07-30 16:12:42 +00:00
DLL_IMPORT int64_t(*get_GetTimeImpl())();
int64_t(*GetTimeImpl)() = get_GetTimeImpl();
#endif
#ifdef TRACY_COLLECT_THREAD_NAMES
2019-02-20 15:15:13 +00:00
DLL_IMPORT std::atomic<ThreadNameData*>&(*get_getthreadnamedata())();
2018-07-30 16:12:42 +00:00
DLL_IMPORT void(*get_rpmalloc_thread_initialize())();
2019-02-20 15:15:13 +00:00
DLL_IMPORT void(*get_InitRPMallocThread())();
2018-07-30 16:12:42 +00:00
2019-02-19 18:33:37 +00:00
static std::atomic<ThreadNameData*>&(*GetThreadNameData_fpt)() = get_getthreadnamedata();
static void(*rpmalloc_thread_initialize_fpt)() = get_rpmalloc_thread_initialize();
2019-02-20 15:15:13 +00:00
static void(*InitRPMallocThread_fpt)() = get_InitRPMallocThread();
2018-07-30 16:12:42 +00:00
2019-02-19 18:33:37 +00:00
std::atomic<ThreadNameData*>& GetThreadNameData() { return GetThreadNameData_fpt(); }
void rpmalloc_thread_initialize(void) { rpmalloc_thread_initialize_fpt(); }
2019-02-20 15:15:13 +00:00
void InitRPMallocThread() { InitRPMallocThread_fpt(); }
2018-07-30 16:12:42 +00:00
#endif
2019-02-19 18:33:37 +00:00
#ifdef TRACY_ON_DEMAND
DLL_IMPORT LuaZoneState&(*get_getluazonestate())();
2019-02-19 17:45:41 +00:00
2019-02-19 18:33:37 +00:00
static LuaZoneState&(*GetLuaZoneState_fpt)() = get_getluazonestate();
2019-02-19 17:45:41 +00:00
2019-02-19 18:33:37 +00:00
LuaZoneState& GetLuaZoneState() { return GetLuaZoneState_fpt(); }
#endif
2018-07-30 16:12:42 +00:00
}
#endif