UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
Trace.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Detail/Trace.h"
6
8#if TRACE_PRIVATE_MINIMAL_ENABLED
9# define UE_TRACE_IMPL(...)
10# define UE_TRACE_API TRACELOG_API
11#else
12# define UE_TRACE_IMPL(...) { return __VA_ARGS__; }
13# define UE_TRACE_API inline
14#endif
15
16// msvc seems to have a strange behaviour when it comes to expanding macros.
17#if defined(_MSC_VER)
18
19#if TRACE_PRIVATE_FULL_ENABLED
20# define TRACE_IMPL(Macro, ...) TRACE_PRIVATE_EXPAND(TRACE_PRIVATE_##Macro(__VA_ARGS__))
21#else
22# define TRACE_IMPL(Macro, ...) TRACE_PRIVATE_EXPAND(TRACE_PRIVATE_NOP_##Macro(__VA_ARGS__))
23#endif
24
25#if TRACE_PRIVATE_MINIMAL_ENABLED
26# define TRACE_IMPL_MINIMAL(Macro, ...) TRACE_PRIVATE_EXPAND(TRACE_PRIVATE_##Macro(__VA_ARGS__))
27#else
28# define TRACE_IMPL_MINIMAL(Macro, ...) TRACE_PRIVATE_EXPAND(TRACE_PRIVATE_NOP_##Macro(__VA_ARGS__))
29#endif
30
31#else // defined(_MSC_VER)
32
33#if TRACE_PRIVATE_FULL_ENABLED
34# define TRACE_IMPL(Macro, ...) TRACE_PRIVATE_EXPAND(TRACE_PRIVATE_##Macro)(__VA_ARGS__)
35#else
36# define TRACE_IMPL(Macro, ...) TRACE_PRIVATE_EXPAND(TRACE_PRIVATE_NOP_##Macro)(__VA_ARGS__)
37#endif
38
39#if TRACE_PRIVATE_MINIMAL_ENABLED
40# define TRACE_IMPL_MINIMAL(Macro, ...) TRACE_PRIVATE_EXPAND(TRACE_PRIVATE_##Macro)(__VA_ARGS__)
41#else
42# define TRACE_IMPL_MINIMAL(Macro, ...) TRACE_PRIVATE_EXPAND(TRACE_PRIVATE_NOP_##Macro)(__VA_ARGS__)
43#endif
44
45#endif // defined(_MSC_VER)
46
48namespace UE {
49namespace Trace {
50
51// Field types
52enum AnsiString {};
53enum WideString {};
54
55// Reference to a definition event.
56template<typename IdType>
58{
59 using ReferenceType = IdType;
60
62 : Id(InId)
64 {
65 }
66
67 IdType Id;
69
71 {
72 if constexpr (std::is_same_v<IdType, uint64>)
73 {
74 return (uint64(RefTypeId) << 32) ^ Id;
75 }
76 else
77 {
78 return (uint64(RefTypeId) << 32) | Id;
79 }
80 }
81
82private:
83 TEventRef() = delete;
84};
85
90
91template<typename IdType>
96
97enum class EMessageType : uint8
98{
99 Reserved = 0,
100 // Add to log
101 Log,
102 // For backwards compatibility
103 Info = Log,
104 // Display in console or similar
105 Display,
106 // Warnings to notify user
107 WarningStart = 0x04,
108 // Errors are critical to the user, but application
109 // can continue to run.
110 ErrorStart = 0x10,
112 ReadError,
119 // Fatal errors should cause application to stop
120 FatalStart = 0x40,
122 OOMFatal,
123};
124
126{
130 const char* TypeStr;
132 const char* Description;
133};
134
136using OnConnectFunc = void(void);
137using OnUpdateFunc = void(void);
139using OnScopeEndFunc = void(void);
140
142{
143 uint32 TailSizeBytes = 4 << 20; // can be set to 0 to disable the tail buffer
146 bool bUseWorkerThread = true;
148 uint32 SessionGuid[4] = {0,0,0,0}; // leave as zero to generate random
153};
154
156
165
166class FChannel;
167
174typedef void* AllocFunc(SIZE_T Size, uint32 Alignment);
175
181typedef void FreeFunc(void* Ptr, SIZE_T Size);
182
189typedef void ChannelIterFunc(const ANSICHAR* Name, bool State, void* User);
190
197typedef bool ChannelIterCallback(const FChannelInfo& Info, void*/*User*/);
198
206typedef bool IoWriteFunc(UPTRINT Handle, const void* Data, uint32 Size);
207
213
215{
216 uint64 BytesSent = 0; // Bytes sent/written to the current endpoint
217 uint64 BytesTraced = 0; // Bytes sent/written to the current endpoint (uncompressed)
218 uint64 BytesEmitted = 0; // Bytes emitted but potentially not yet written
219 uint64 MemoryUsed = 0; // Memory allocated by TraceLog allocator functions
220 uint64 BlockPoolAllocated = 0; // Memory allocated for the (TLS) block pool.
221 uint32 BlockPoolFreeBlocks = 0; // Number of available blocks
222 uint32 BlockPoolAllocatedBlocks= 0; // Number of allocated blocks
223 uint32 SharedBufferAllocated = 0; // Memory allocated for shared buffers
224 uint32 FixedBufferAllocated = 0; // Memory allocated for fixed buffers (tail, send)
225 uint32 CacheAllocated = 0; // Total memory allocated in cache buffers
226 uint32 CacheUsed = 0; // Used cache memory; Important-marked events are stored in the cache.
227 uint32 CacheWaste = 0; // Unused memory from retired cache buffers
228};
229
231{
232 static const uint16 None = 0;
233 static const uint16 ExcludeTail = 1 << 0; // do not send the tail of historical events
234 static const uint16 _Reserved = 1 << 15; // this bit is used internally
235};
236
244
250
256
262
267
273
279
284
290
296
306
315
325
331
338
345
354
361
368
375UE_TRACE_API bool ToggleChannel(const TCHAR* ChannelName, bool bEnabled) UE_TRACE_IMPL(false);
376
383
390
398
405
410
417
424
425} // namespace Trace
426} // namespace UE
427
428
433#define UE_TRACE_EVENT_DEFINE(LoggerName, EventName) TRACE_IMPL(EVENT_DEFINE, LoggerName, EventName)
434#define UE_TRACE_EVENT_BEGIN(LoggerName, EventName, ...) TRACE_IMPL(EVENT_BEGIN, LoggerName, EventName, ##__VA_ARGS__)
435#define UE_TRACE_EVENT_BEGIN_EXTERN(LoggerName, EventName, ...) TRACE_IMPL(EVENT_BEGIN_EXTERN, LoggerName, EventName, ##__VA_ARGS__)
436#define UE_TRACE_EVENT_FIELD(FieldType, FieldName) TRACE_IMPL(EVENT_FIELD, FieldType, FieldName)
437#define UE_TRACE_EVENT_REFERENCE_FIELD(RefLogger, RefEvent, FieldName) TRACE_IMPL(EVENT_REFFIELD, RefLogger, RefEvent, FieldName)
438#define UE_TRACE_EVENT_END() TRACE_IMPL(EVENT_END)
439#define UE_TRACE_LOG(LoggerName, EventName, ChannelsExpr, ...) TRACE_IMPL(LOG, LoggerName, EventName, ChannelsExpr, ##__VA_ARGS__)
440#define UE_TRACE_LOG_SCOPED(LoggerName, EventName, ChannelsExpr, ...) TRACE_IMPL(LOG_SCOPED, LoggerName, EventName, ChannelsExpr, ##__VA_ARGS__)
441#define UE_TRACE_LOG_SCOPED_CONDITIONAL(LoggerName, EventName, ChannelsExpr, Condition, ...) TRACE_IMPL(LOG_SCOPED_CONDITIONAL, LoggerName, EventName, ChannelsExpr, Condition, ##__VA_ARGS__)
442#define UE_TRACE_LOG_SCOPED_T(LoggerName, EventName, ChannelsExpr, ...) TRACE_IMPL(LOG_SCOPED_T, LoggerName, EventName, ChannelsExpr, ##__VA_ARGS__)
443#define UE_TRACE_LOG_SCOPED_T_CONDITIONAL(LoggerName, EventName, ChannelsExpr, Condition, ...) TRACE_IMPL(LOG_SCOPED_T_CONDITIONAL, LoggerName, EventName, ChannelsExpr, Condition, ##__VA_ARGS__)
444#define UE_TRACE_GET_DEFINITION_TYPE_ID(LoggerName, EventName) TRACE_IMPL(GET_DEFINITION_TYPE_ID, LoggerName, EventName)
445#define UE_TRACE_LOG_DEFINITION(LoggerName, EventName, Id, ChannelsExpr, ...) TRACE_IMPL(LOG_DEFINITION, LoggerName, EventName, Id, ChannelsExpr, ##__VA_ARGS__)
446#define UE_TRACE_CHANNEL(ChannelName, ...) TRACE_IMPL(CHANNEL, ChannelName, ##__VA_ARGS__)
447#define UE_TRACE_CHANNEL_CUSTOM(ChannelName, ChannelClass, ...) TRACE_IMPL(CHANNEL_CUSTOM, ChannelName, ChannelClass, ##__VA_ARGS__)
448#define UE_TRACE_CHANNEL_EXTERN(ChannelName, ...) TRACE_IMPL(CHANNEL_EXTERN, ChannelName, ##__VA_ARGS__)
449#define UE_TRACE_CHANNEL_CUSTOM_EXTERN(ChannelName, ChannelClass, ...) TRACE_IMPL(CHANNEL_CUSTOM_EXTERN, ChannelName, ChannelClass, ##__VA_ARGS__)
450#define UE_TRACE_CHANNEL_DEFINE(ChannelName, ...) TRACE_IMPL(CHANNEL_DEFINE, ChannelName, ##__VA_ARGS__)
451#define UE_TRACE_CHANNEL_CUSTOM_DEFINE(ChannelName, ChannelClass, ...) TRACE_IMPL(CHANNEL_CUSTOM_DEFINE, ChannelName, ChannelClass, ##__VA_ARGS__)
452#define UE_TRACE_CHANNELEXPR_IS_ENABLED(ChannelsExpr) TRACE_IMPL(CHANNELEXPR_IS_ENABLED, ChannelsExpr)
453
454
460#define UE_TRACE_MINIMAL_EVENT_DEFINE(LoggerName, EventName) TRACE_IMPL_MINIMAL(EVENT_DEFINE, LoggerName, EventName)
461#define UE_TRACE_MINIMAL_EVENT_BEGIN(LoggerName, EventName, ...) TRACE_IMPL_MINIMAL(EVENT_BEGIN, LoggerName, EventName, ##__VA_ARGS__)
462#define UE_TRACE_MINIMAL_EVENT_BEGIN_EXTERN(LoggerName, EventName, ...) TRACE_IMPL_MINIMAL(EVENT_BEGIN_EXTERN, LoggerName, EventName, ##__VA_ARGS__)
463#define UE_TRACE_MINIMAL_EVENT_FIELD(FieldType, FieldName) TRACE_IMPL_MINIMAL(EVENT_FIELD, FieldType, FieldName)
464#define UE_TRACE_MINIMAL_EVENT_REFERENCE_FIELD(RefLogger, RefEvent, FieldName) TRACE_IMPL_MINIMAL(EVENT_REFFIELD, RefLogger, RefEvent, FieldName)
465#define UE_TRACE_MINIMAL_EVENT_END() TRACE_IMPL_MINIMAL(EVENT_END)
466#define UE_TRACE_MINIMAL_LOG(LoggerName, EventName, ChannelsExpr, ...) TRACE_IMPL_MINIMAL(LOG, LoggerName, EventName, ChannelsExpr, ##__VA_ARGS__)
467#define UE_TRACE_MINIMAL_LOG_SCOPED(LoggerName, EventName, ChannelsExpr, ...) TRACE_IMPL_MINIMAL(LOG_SCOPED, LoggerName, EventName, ChannelsExpr, ##__VA_ARGS__)
468#define UE_TRACE_MINIMAL_LOG_SCOPED_CONDITIONAL(LoggerName, EventName, ChannelsExpr, Condition, ...) TRACE_IMPL(LOG_SCOPED_CONDITIONAL, LoggerName, EventName, ChannelsExpr, Condition, ##__VA_ARGS__)
469#define UE_TRACE_MINIMAL_LOG_SCOPED_T(LoggerName, EventName, ChannelsExpr, ...) TRACE_IMPL_MINIMAL(LOG_SCOPED_T, LoggerName, EventName, ChannelsExpr, ##__VA_ARGS__)
470#define UE_TRACE_MINIMAL_LOG_SCOPED_T_CONDITIONAL(LoggerName, EventName, ChannelsExpr, Condition, ...) TRACE_IMPL(LOG_SCOPED_T_CONDITIONAL, LoggerName, EventName, ChannelsExpr, Condition, ##__VA_ARGS__)
471#define UE_TRACE_MINIMAL_GET_DEFINITION_TYPE_ID(LoggerName, EventName) TRACE_IMPL_MINIMAL(GET_DEFINITION_TYPE_ID, LoggerName, EventName)
472#define UE_TRACE_MINIMAL_LOG_DEFINITION(LoggerName, EventName, Id, ChannelsExpr, ...) TRACE_IMPL_MINIMAL(LOG_DEFINITION, LoggerName, EventName, Id, ChannelsExpr, ##__VA_ARGS__)
473#define UE_TRACE_MINIMAL_CHANNEL(ChannelName, ...) TRACE_IMPL_MINIMAL(CHANNEL, ChannelName, ##__VA_ARGS__)
474#define UE_TRACE_MINIMAL_CHANNEL_CUSTOM(ChannelName, ChannelClass, ...) TRACE_IMPL_MINIMAL(CHANNEL_CUSTOM, ChannelName, ChannelClass, ##__VA_ARGS__)
475#define UE_TRACE_MINIMAL_CHANNEL_EXTERN(ChannelName, ...) TRACE_IMPL_MINIMAL(CHANNEL_EXTERN, ChannelName, ##__VA_ARGS__)
476#define UE_TRACE_MINIMAL_CHANNEL_CUSTOM_EXTERN(ChannelName, ChannelClass, ...) TRACE_IMPL_MINIMAL(CHANNEL_CUSTOM_EXTERN, ChannelName, ChannelClass, ##__VA_ARGS__)
477#define UE_TRACE_MINIMAL_CHANNEL_DEFINE(ChannelName, ...) TRACE_IMPL_MINIMAL(CHANNEL_DEFINE, ChannelName, ##__VA_ARGS__)
478#define UE_TRACE_MINIMAL_CHANNEL_CUSTOM_DEFINE(ChannelName, ChannelClass, ...) TRACE_IMPL_MINIMAL(CHANNEL_CUSTOM_DEFINE, ChannelName, ChannelClass, ##__VA_ARGS__)
479#define UE_TRACE_MINIMAL_CHANNELEXPR_IS_ENABLED(ChannelsExpr) TRACE_IMPL_MINIMAL(CHANNELEXPR_IS_ENABLED, ChannelsExpr)
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define UE_TRACE_BLOCK_POOL_MAXSIZE
Definition Config.h:121
FPlatformTypes::SIZE_T SIZE_T
An unsigned integer the same size as a pointer, the same as UPTRINT.
Definition Platform.h:1150
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
FPlatformTypes::UPTRINT UPTRINT
An unsigned integer the same size as a pointer.
Definition Platform.h:1146
FPlatformTypes::ANSICHAR ANSICHAR
An ANSI character. Normally a signed type.
Definition Platform.h:1131
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define UE_TRACE_IMPL(...)
Definition Trace.h:12
#define UE_TRACE_API
Definition Trace.h:13
uint32 Size
Definition VulkanMemory.cpp:4034
uint8_t uint8
Definition binka_ue_file_header.h:8
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Channel.h:136
TEventRef< uint32 > FEventRef32
Definition Trace.h:88
void * AllocFunc(SIZE_T Size, uint32 Alignment)
Definition Trace.h:174
TEventRef< uint64 > FEventRef64
Definition Trace.h:89
void ChannelIterFunc(const ANSICHAR *Name, bool State, void *User)
Definition Trace.h:189
AnsiString
Definition Trace.h:52
UE_TRACE_API bool WriteSnapshotTo(const TCHAR *Path) UE_TRACE_IMPL(false)
EMessageType
Definition Trace.h:98
UE_TRACE_API bool IsTracing() UE_TRACE_IMPL(false)
uint32 FChannelId
Definition Trace.h:155
bool ChannelIterCallback(const FChannelInfo &Info, void *)
Definition Trace.h:197
UE_TRACE_API bool WriteTo(const TCHAR *Path, uint16 Flags=FSendFlags::None) UE_TRACE_IMPL(false)
UE_TRACE_API void Panic() UE_TRACE_IMPL()
TEventRef< IdType > MakeEventRef(IdType InId, uint32 InTypeId)
Definition Trace.h:92
UE_TRACE_API void EnumerateChannels(ChannelIterFunc IterFunc, void *User) UE_TRACE_IMPL()
UE_TRACE_API bool ToggleChannel(const TCHAR *ChannelName, bool bEnabled) UE_TRACE_IMPL(false)
WideString
Definition Trace.h:53
void IoCloseFunc(UPTRINT Handle)
Definition Trace.h:212
void(void) OnUpdateFunc
Definition Trace.h:137
UE_TRACE_API bool IsTracingTo(uint32(&OutSessionGuid)[4], uint32(&OutTraceGuid)[4]) UE_TRACE_IMPL(false)
UE_TRACE_API void GetStatistics(FStatistics &Out) UE_TRACE_IMPL()
UE_TRACE_API bool IsChannel(const TCHAR *ChannelName) UE_TRACE_IMPL(false)
UE_TRACE_API bool RelayTo(UPTRINT InHandle, IoWriteFunc WriteFunc, IoCloseFunc CloseFunc, uint16 Flags=FSendFlags::None) UE_TRACE_IMPL(false)
void(const FMessageEvent &) OnMessageFunc
Definition Trace.h:135
UE_TRACE_API void ThreadGroupBegin(const TCHAR *Name) UE_TRACE_IMPL()
UE_TRACE_API void Shutdown() UE_TRACE_IMPL()
UE_TRACE_API bool SendTo(const TCHAR *Host, uint32 Port=0, uint16 Flags=FSendFlags::None) UE_TRACE_IMPL(false)
TEventRef< uint8 > FEventRef8
Definition Trace.h:86
UE_TRACE_API void ThreadRegister(const TCHAR *Name, uint32 SystemId, int32 SortHint) UE_TRACE_IMPL()
void(const ANSICHAR *) OnScopeBeginFunc
Definition Trace.h:138
UE_TRACE_API void Update() UE_TRACE_IMPL()
UE_TRACE_API FChannel * FindChannel(const TCHAR *ChannelName) UE_TRACE_IMPL(nullptr)
bool IoWriteFunc(UPTRINT Handle, const void *Data, uint32 Size)
Definition Trace.h:206
TEventRef< uint16 > FEventRef16
Definition Trace.h:87
void(void) OnScopeEndFunc
Definition Trace.h:139
UE_TRACE_API void StartWorkerThread() UE_TRACE_IMPL()
UE_TRACE_API void ThreadGroupEnd() UE_TRACE_IMPL()
void(void) OnConnectFunc
Definition Trace.h:136
UE_TRACE_API bool SendSnapshotTo(const TCHAR *Host, uint32 Port) UE_TRACE_IMPL(false)
void FreeFunc(void *Ptr, SIZE_T Size)
Definition Trace.h:181
UE_TRACE_API void SetMemoryHooks(AllocFunc Alloc, FreeFunc Free) UE_TRACE_IMPL()
UE_TRACE_API void SetMessageCallback(OnMessageFunc *MessageFunc) UE_TRACE_IMPL()
UE_TRACE_API void SetUpdateCallback(OnUpdateFunc *UpdateFunc) UE_TRACE_IMPL()
UE_TRACE_API void Exit() UE_TRACE_IMPL()
UE_TRACE_API bool Stop() UE_TRACE_IMPL(false)
Definition AdvancedWidgetsModule.cpp:13
@ false
Definition radaudio_common.h:23
Definition Trace.h:158
FChannelId Id
Definition Trace.h:161
const ANSICHAR * Desc
Definition Trace.h:160
const ANSICHAR * Name
Definition Trace.h:159
bool bIsEnabled
Definition Trace.h:162
bool bIsReadOnly
Definition Trace.h:163
Definition Trace.h:142
OnConnectFunc * OnConnectionFunc
Definition Trace.h:149
bool bUseImportantCache
Definition Trace.h:147
uint32 BlockPoolMaxSize
Definition Trace.h:145
uint32 TailSizeBytes
Definition Trace.h:143
uint32 ThreadSleepTimeInMS
Definition Trace.h:144
bool bUseWorkerThread
Definition Trace.h:146
uint32 SessionGuid[4]
Definition Trace.h:148
Definition Trace.h:126
EMessageType Type
Definition Trace.h:128
const char * Description
Definition Trace.h:132
const char * TypeStr
Definition Trace.h:130
Definition Trace.h:231
static const uint16 ExcludeTail
Definition Trace.h:233
static const uint16 None
Definition Trace.h:232
static const uint16 _Reserved
Definition Trace.h:234
Definition Trace.h:215
uint32 BlockPoolAllocatedBlocks
Definition Trace.h:222
uint64 BlockPoolAllocated
Definition Trace.h:220
uint64 BytesEmitted
Definition Trace.h:218
uint32 BlockPoolFreeBlocks
Definition Trace.h:221
uint32 FixedBufferAllocated
Definition Trace.h:224
uint32 CacheWaste
Definition Trace.h:227
uint64 BytesSent
Definition Trace.h:216
uint64 MemoryUsed
Definition Trace.h:219
uint32 SharedBufferAllocated
Definition Trace.h:223
uint32 CacheUsed
Definition Trace.h:226
uint32 CacheAllocated
Definition Trace.h:225
uint64 BytesTraced
Definition Trace.h:217
Definition Trace.h:58
uint64 GetHash() const
Definition Trace.h:70
TEventRef(IdType InId, uint32 InTypeId)
Definition Trace.h:61
IdType ReferenceType
Definition Trace.h:59
uint32 RefTypeId
Definition Trace.h:68
IdType Id
Definition Trace.h:67