mirror of
https://github.com/wolfpld/tracy.git
synced 2026-06-08 00:23:47 +00:00
Extension point so private/unsupported platforms can plug in their own implementations of the kernel/libc primitives Tracy depends on, without patching the `#if`/`#elif` chains. Projects supply a platform header via `-DTRACY_PLATFORM_HEADER="\"my_platform.h\""` at build time. Tracy includes it in any TU that needs the hooks. The header toggles per-category `TRACY_HAS_CUSTOM_*` macros and declares matching `tracy::Platform*` functions. Available hooks: - `TRACY_HAS_CUSTOM_THREAD_ID` → `PlatformGetThreadId` - `TRACY_HAS_CUSTOM_USER_INFO` → `PlatformGetHostname`, `PlatformGetUserLogin`, `PlatformGetUserFullName` - `TRACY_HAS_CUSTOM_SAFE_COPY` → `PlatformSafeMemcpy` - `TRACY_HAS_CUSTOM_ALLOCATOR` → `PlatformMalloc`, `PlatformFree`, `PlatformRealloc`, `PlatformAllocatorInit`, `PlatformAllocatorThreadInit`, `PlatformAllocatorFinalize`, `PlatformAllocatorThreadFinalize` Each hook is wired as the first arm of its respective `#if`/`#elif` chain, so existing supported platforms are unaffected. Template files in `examples/CustomPlatform/` and a new subsection in `manual/tracy.tex` document the mechanism.
58 lines
1.4 KiB
C++
58 lines
1.4 KiB
C++
// Template implementations of the tracy::Platform* hooks. Pair with the
|
|
// platform header (see CustomPlatform.h) and link this into your final
|
|
// binary.
|
|
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
#include "CustomPlatform.h"
|
|
|
|
namespace tracy
|
|
{
|
|
|
|
uint32_t PlatformGetThreadId()
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
void PlatformGetHostname( char* buf, size_t size )
|
|
{
|
|
const char* placeholder = "(?)";
|
|
if( size == 0 ) return;
|
|
const size_t n = strlen( placeholder );
|
|
const size_t copy = n < size - 1 ? n : size - 1;
|
|
memcpy( buf, placeholder, copy );
|
|
buf[copy] = '\0';
|
|
}
|
|
|
|
const char* PlatformGetUserLogin()
|
|
{
|
|
return "(?)";
|
|
}
|
|
|
|
const char* PlatformGetUserFullName()
|
|
{
|
|
return nullptr;
|
|
}
|
|
|
|
bool PlatformSafeMemcpy( void* dst, const void* src, size_t size )
|
|
{
|
|
// Stub: report failure so Tracy skips the snapshot. Real impls use SEH
|
|
// on Win32, pipe(2) on POSIX, or an equivalent probe-and-copy primitive.
|
|
(void)dst; (void)src; (void)size;
|
|
return false;
|
|
}
|
|
|
|
// Stubs forward to the C runtime. Swap in the allocator you actually want.
|
|
|
|
void* PlatformMalloc( size_t size ) { return malloc( size ); }
|
|
void PlatformFree( void* ptr ) { free( ptr ); }
|
|
void* PlatformRealloc( void* ptr, size_t size ) { return realloc( ptr, size ); }
|
|
|
|
void PlatformAllocatorInit() {}
|
|
void PlatformAllocatorThreadInit() {}
|
|
void PlatformAllocatorFinalize() {}
|
|
void PlatformAllocatorThreadFinalize(){}
|
|
|
|
}
|