16#if !defined(COUNTERSTRACE_ENABLED)
17#if UE_TRACE_ENABLED && !UE_BUILD_SHIPPING
18#define COUNTERSTRACE_ENABLED 1
20#define COUNTERSTRACE_ENABLED 0
43#if COUNTERSTRACE_ENABLED
56 template<
typename ValueType, ETraceCounterType CounterType,
typename StoredType = ValueType,
bool bUnchecked = false>
106 ValueType
Get()
const
260#define __TRACE_CHECK_COUNTER_NAME(CounterDisplayName) \
261 static_assert(std::is_const_v<std::remove_reference_t<decltype(CounterDisplayName)>>, "CounterDisplayName string must be a const TCHAR array."); \
262 static_assert(TIsArrayOrRefOfTypeByPredicate<decltype(CounterDisplayName), TIsCharEncodingCompatibleWithTCHAR>::Value, "CounterDisplayName string must be a TCHAR array.");
264#define __TRACE_DECLARE_INLINE_COUNTER(CounterDisplayName, CounterType, CounterDisplayHint) \
265 __TRACE_CHECK_COUNTER_NAME(CounterDisplayName) \
266 static FCountersTrace::CounterType PREPROCESSOR_JOIN(__TraceCounter, __LINE__)(CounterDisplayName, CounterDisplayHint);
268#define __TRACE_INLINE_COUNTER_SET(CounterDisplayName, Value, CounterType, CounterDisplayHint) \
269 __TRACE_DECLARE_INLINE_COUNTER(CounterDisplayName, CounterType, CounterDisplayHint) \
270 PREPROCESSOR_JOIN(__TraceCounter, __LINE__).Set(Value);
272#define TRACE_INT_VALUE(CounterDisplayName, Value) __TRACE_INLINE_COUNTER_SET(CounterDisplayName, Value, FCounterInt, TraceCounterDisplayHint_None)
273#define TRACE_ATOMIC_INT_VALUE(CounterDisplayName, Value) __TRACE_INLINE_COUNTER_SET(CounterDisplayName, Value, FCounterAtomicInt, TraceCounterDisplayHint_None)
274#define TRACE_FLOAT_VALUE(CounterDisplayName, Value) __TRACE_INLINE_COUNTER_SET(CounterDisplayName, Value, FCounterFloat, TraceCounterDisplayHint_None)
275#define TRACE_ATOMIC_FLOAT_VALUE(CounterDisplayName, Value) __TRACE_INLINE_COUNTER_SET(CounterDisplayName, Value, FCounterAtomicFloat, TraceCounterDisplayHint_None)
276#define TRACE_MEMORY_VALUE(CounterDisplayName, Value) __TRACE_INLINE_COUNTER_SET(CounterDisplayName, Value, FCounterInt, TraceCounterDisplayHint_Memory)
277#define TRACE_ATOMIC_MEMORY_VALUE(CounterDisplayName, Value) __TRACE_INLINE_COUNTER_SET(CounterDisplayName, Value, FCounterAtomicInt, TraceCounterDisplayHint_Memory)
279#define TRACE_UNCHECKED_INT_VALUE(CounterDisplayName, Value) __TRACE_INLINE_COUNTER_SET(CounterDisplayName, Value, FCounterUncheckedInt, TraceCounterDisplayHint_None)
280#define TRACE_UNCHECKED_ATOMIC_INT_VALUE(CounterDisplayName, Value) __TRACE_INLINE_COUNTER_SET(CounterDisplayName, Value, FCounterUncheckedAtomicInt, TraceCounterDisplayHint_None)
281#define TRACE_UNCHECKED_FLOAT_VALUE(CounterDisplayName, Value) __TRACE_INLINE_COUNTER_SET(CounterDisplayName, Value, FCounterUncheckedFloat, TraceCounterDisplayHint_None)
282#define TRACE_UNCHECKED_ATOMIC_FLOAT_VALUE(CounterDisplayName, Value) __TRACE_INLINE_COUNTER_SET(CounterDisplayName, Value, FCounterUncheckedAtomicFloat, TraceCounterDisplayHint_None)
283#define TRACE_UNCHECKED_MEMORY_VALUE(CounterDisplayName, Value) __TRACE_INLINE_COUNTER_SET(CounterDisplayName, Value, FCounterUncheckedInt, TraceCounterDisplayHint_Memory)
284#define TRACE_UNCHECKED_ATOMIC_MEMORY_VALUE(CounterDisplayName, Value) __TRACE_INLINE_COUNTER_SET(CounterDisplayName, Value, FCounterUncheckedAtomicInt, TraceCounterDisplayHint_Memory)
288#define TRACE_DECLARE_COUNTER(CounterType, CounterName, CounterDisplayName, CounterDisplayHint) \
289 __TRACE_CHECK_COUNTER_NAME(CounterDisplayName) \
290 FCountersTrace::CounterType PREPROCESSOR_JOIN(__GTraceCounter, CounterName)(CounterDisplayName, CounterDisplayHint);
295#define TRACE_DECLARE_INT_COUNTER(CounterName, CounterDisplayName) \
296 TRACE_DECLARE_COUNTER(FCounterInt, CounterName, CounterDisplayName, TraceCounterDisplayHint_None)
298#define TRACE_DECLARE_UNCHECKED_INT_COUNTER(CounterName, CounterDisplayName) \
299 TRACE_DECLARE_COUNTER(FCounterUncheckedInt, CounterName, CounterDisplayName, TraceCounterDisplayHint_None)
301#define TRACE_DECLARE_INT_COUNTER_EXTERN(CounterName) \
302 extern FCountersTrace::FCounterInt PREPROCESSOR_JOIN(__GTraceCounter, CounterName);
304#define TRACE_DECLARE_UNCHECKED_INT_COUNTER_EXTERN(CounterName) \
305 extern FCountersTrace::FCounterUncheckedInt PREPROCESSOR_JOIN(__GTraceCounter, CounterName);
310#define TRACE_DECLARE_ATOMIC_INT_COUNTER(CounterName, CounterDisplayName) \
311 TRACE_DECLARE_COUNTER(FCounterAtomicInt, CounterName, CounterDisplayName, TraceCounterDisplayHint_None)
313#define TRACE_DECLARE_UNCHECKED_ATOMIC_INT_COUNTER(CounterName, CounterDisplayName) \
314 TRACE_DECLARE_COUNTER(FCounterUncheckedAtomicInt, CounterName, CounterDisplayName, TraceCounterDisplayHint_None)
316#define TRACE_DECLARE_ATOMIC_INT_COUNTER_EXTERN(CounterName) \
317 extern FCountersTrace::FCounterAtomicInt PREPROCESSOR_JOIN(__GTraceCounter, CounterName);
319#define TRACE_DECLARE_UNCHECKED_ATOMIC_INT_COUNTER_EXTERN(CounterName) \
320 extern FCountersTrace::FCounterUncheckedAtomicInt PREPROCESSOR_JOIN(__GTraceCounter, CounterName);
325#define TRACE_DECLARE_FLOAT_COUNTER(CounterName, CounterDisplayName) \
326 TRACE_DECLARE_COUNTER(FCounterFloat, CounterName, CounterDisplayName, TraceCounterDisplayHint_None)
328#define TRACE_DECLARE_UNCHECKED_FLOAT_COUNTER(CounterName, CounterDisplayName) \
329 TRACE_DECLARE_COUNTER(FCounterUncheckedFloat, CounterName, CounterDisplayName, TraceCounterDisplayHint_None)
331#define TRACE_DECLARE_FLOAT_COUNTER_EXTERN(CounterName) \
332 extern FCountersTrace::FCounterFloat PREPROCESSOR_JOIN(__GTraceCounter, CounterName);
334#define TRACE_DECLARE_UNCHECKED_FLOAT_COUNTER_EXTERN(CounterName) \
335 extern FCountersTrace::FCounterUncheckedFloat PREPROCESSOR_JOIN(__GTraceCounter, CounterName);
340#define TRACE_DECLARE_ATOMIC_FLOAT_COUNTER(CounterName, CounterDisplayName) \
341 TRACE_DECLARE_COUNTER(FCounterAtomicFloat, CounterName, CounterDisplayName, TraceCounterDisplayHint_None)
343#define TRACE_DECLARE_UNCHECKED_ATOMIC_FLOAT_COUNTER(CounterName, CounterDisplayName) \
344 TRACE_DECLARE_COUNTER(FCounterUncheckedAtomicFloat, CounterName, CounterDisplayName, TraceCounterDisplayHint_None)
346#define TRACE_DECLARE_ATOMIC_FLOAT_COUNTER_EXTERN(CounterName) \
347 extern FCountersTrace::FCounterAtomicFloat PREPROCESSOR_JOIN(__GTraceCounter, CounterName);
349#define TRACE_DECLARE_UNCHECKED_ATOMIC_FLOAT_COUNTER_EXTERN(CounterName) \
350 extern FCountersTrace::FCounterUncheckedAtomicFloat PREPROCESSOR_JOIN(__GTraceCounter, CounterName);
355#define TRACE_DECLARE_MEMORY_COUNTER(CounterName, CounterDisplayName) \
356 TRACE_DECLARE_COUNTER(FCounterInt, CounterName, CounterDisplayName, TraceCounterDisplayHint_Memory)
358#define TRACE_DECLARE_UNCHECKED_MEMORY_COUNTER(CounterName, CounterDisplayName) \
359 TRACE_DECLARE_COUNTER(FCounterUncheckedInt, CounterName, CounterDisplayName, TraceCounterDisplayHint_Memory)
361#define TRACE_DECLARE_MEMORY_COUNTER_EXTERN(CounterName) \
362 TRACE_DECLARE_INT_COUNTER_EXTERN(CounterName)
364#define TRACE_DECLARE_UNCHECKED_MEMORY_COUNTER_EXTERN(CounterName) \
365 TRACE_DECLARE_UNCHECKED_INT_COUNTER_EXTERN(CounterName)
370#define TRACE_DECLARE_ATOMIC_MEMORY_COUNTER(CounterName, CounterDisplayName) \
371 TRACE_DECLARE_COUNTER(FCounterAtomicInt, CounterName, CounterDisplayName, TraceCounterDisplayHint_Memory)
373#define TRACE_DECLARE_UNCHECKED_ATOMIC_MEMORY_COUNTER(CounterName, CounterDisplayName) \
374 TRACE_DECLARE_COUNTER(FCounterUncheckedAtomicInt, CounterName, CounterDisplayName, TraceCounterDisplayHint_Memory)
376#define TRACE_DECLARE_ATOMIC_MEMORY_COUNTER_EXTERN(CounterName) \
377 TRACE_DECLARE_ATOMIC_INT_COUNTER_EXTERN(CounterName)
379#define TRACE_DECLARE_UNCHECKED_ATOMIC_MEMORY_COUNTER_EXTERN(CounterName) \
380 TRACE_DECLARE_UNCHECKED_ATOMIC_INT_COUNTER_EXTERN(CounterName)
387#define TRACE_COUNTER_SET(CounterName, Value) \
388 PREPROCESSOR_JOIN(__GTraceCounter, CounterName).Set(Value);
390#define TRACE_COUNTER_GET(CounterName) \
391 PREPROCESSOR_JOIN(__GTraceCounter, CounterName).Get();
393#define TRACE_COUNTER_ADD(CounterName, Value) \
394 PREPROCESSOR_JOIN(__GTraceCounter, CounterName).Add(Value);
396#define TRACE_COUNTER_SUBTRACT(CounterName, Value) \
397 PREPROCESSOR_JOIN(__GTraceCounter, CounterName).Subtract(Value);
399#define TRACE_COUNTER_INCREMENT(CounterName) \
400 PREPROCESSOR_JOIN(__GTraceCounter, CounterName).Increment();
402#define TRACE_COUNTER_DECREMENT(CounterName) \
403 PREPROCESSOR_JOIN(__GTraceCounter, CounterName).Decrement();
408#define TRACE_COUNTER_SET_IF_DIFFERENT(CounterName, Value) \
409 PREPROCESSOR_JOIN(__GTraceCounter, CounterName).SetIfDifferent(Value);
411#define TRACE_COUNTER_ADD_IF_NOT_ZERO(CounterName, Value) \
412 PREPROCESSOR_JOIN(__GTraceCounter, CounterName).AddIfNotZero(Value);
414#define TRACE_COUNTER_SUBTRACT_IF_NOT_ZERO(CounterName, Value) \
415 PREPROCESSOR_JOIN(__GTraceCounter, CounterName).SubtractIfNotZero(Value);
420#define TRACE_COUNTER_SET_ALWAYS(CounterName, Value) \
421 PREPROCESSOR_JOIN(__GTraceCounter, CounterName).SetAlways(Value);
423#define TRACE_COUNTER_ADD_ALWAYS(CounterName, Value) \
424 PREPROCESSOR_JOIN(__GTraceCounter, CounterName).AddAlways(Value);
426#define TRACE_COUNTER_SUBTRACT_ALWAYS(CounterName, Value) \
427 PREPROCESSOR_JOIN(__GTraceCounter, CounterName).SubtractAlways(Value);
431#define TRACE_INT_VALUE(CounterDisplayName, Value)
432#define TRACE_ATOMIC_INT_VALUE(CounterDisplayName, Value)
433#define TRACE_FLOAT_VALUE(CounterDisplayName, Value)
434#define TRACE_ATOMIC_FLOAT_VALUE(CounterDisplayName, Value)
435#define TRACE_MEMORY_VALUE(CounterDisplayName, Value)
436#define TRACE_ATOMIC_MEMORY_VALUE(CounterDisplayName, Value)
438#define TRACE_UNCHECKED_INT_VALUE(CounterDisplayName, Value)
439#define TRACE_UNCHECKED_ATOMIC_INT_VALUE(CounterDisplayName, Value)
440#define TRACE_UNCHECKED_FLOAT_VALUE(CounterDisplayName, Value)
441#define TRACE_UNCHECKED_ATOMIC_FLOAT_VALUE(CounterDisplayName, Value)
442#define TRACE_UNCHECKED_MEMORY_VALUE(CounterDisplayName, Value)
443#define TRACE_UNCHECKED_ATOMIC_MEMORY_VALUE(CounterDisplayName, Value)
445#define TRACE_DECLARE_COUNTER(CounterType, CounterName, CounterDisplayName, CounterDisplayHint)
447#define TRACE_DECLARE_INT_COUNTER(CounterName, CounterDisplayName)
448#define TRACE_DECLARE_INT_COUNTER_EXTERN(CounterName)
449#define TRACE_DECLARE_ATOMIC_INT_COUNTER(CounterName, CounterDisplayName)
450#define TRACE_DECLARE_ATOMIC_INT_COUNTER_EXTERN(CounterName)
451#define TRACE_DECLARE_FLOAT_COUNTER(CounterName, CounterDisplayName)
452#define TRACE_DECLARE_FLOAT_COUNTER_EXTERN(CounterName)
453#define TRACE_DECLARE_ATOMIC_FLOAT_COUNTER(CounterName, CounterDisplayName)
454#define TRACE_DECLARE_ATOMIC_FLOAT_COUNTER_EXTERN(CounterName)
455#define TRACE_DECLARE_MEMORY_COUNTER(CounterName, CounterDisplayName)
456#define TRACE_DECLARE_MEMORY_COUNTER_EXTERN(CounterName)
457#define TRACE_DECLARE_ATOMIC_MEMORY_COUNTER(CounterName, CounterDisplayName)
458#define TRACE_DECLARE_ATOMIC_MEMORY_COUNTER_EXTERN(CounterName)
460#define TRACE_DECLARE_UNCHECKED_INT_COUNTER(CounterName, CounterDisplayName)
461#define TRACE_DECLARE_UNCHECKED_INT_COUNTER_EXTERN(CounterName)
462#define TRACE_DECLARE_UNCHECKED_ATOMIC_INT_COUNTER(CounterName, CounterDisplayName)
463#define TRACE_DECLARE_UNCHECKED_ATOMIC_INT_COUNTER_EXTERN(CounterName)
464#define TRACE_DECLARE_UNCHECKED_FLOAT_COUNTER(CounterName, CounterDisplayName)
465#define TRACE_DECLARE_UNCHECKED_FLOAT_COUNTER_EXTERN(CounterName)
466#define TRACE_DECLARE_UNCHECKED_ATOMIC_FLOAT_COUNTER(CounterName, CounterDisplayName)
467#define TRACE_DECLARE_UNCHECKED_ATOMIC_FLOAT_COUNTER_EXTERN(CounterName)
468#define TRACE_DECLARE_UNCHECKED_MEMORY_COUNTER(CounterName, CounterDisplayName)
469#define TRACE_DECLARE_UNCHECKED_MEMORY_COUNTER_EXTERN(CounterName)
470#define TRACE_DECLARE_UNCHECKED_ATOMIC_MEMORY_COUNTER(CounterName, CounterDisplayName)
471#define TRACE_DECLARE_UNCHECKED_ATOMIC_MEMORY_COUNTER_EXTERN(CounterName)
473#define TRACE_COUNTER_SET(CounterName, Value)
474#define TRACE_COUNTER_GET(CounterName) {}
475#define TRACE_COUNTER_ADD(CounterName, Value)
476#define TRACE_COUNTER_SUBTRACT(CounterName, Value)
477#define TRACE_COUNTER_INCREMENT(CounterName)
478#define TRACE_COUNTER_DECREMENT(CounterName)
480#define TRACE_COUNTER_SET_IF_DIFFERENT(CounterName, Value)
481#define TRACE_COUNTER_ADD_IF_NOT_ZERO(CounterName, Value)
482#define TRACE_COUNTER_SUBTRACT_IF_NOT_ZERO(CounterName, Value)
484#define TRACE_COUNTER_SET_ALWAYS(CounterName, Value)
485#define TRACE_COUNTER_ADD_ALWAYS(CounterName, Value)
486#define TRACE_COUNTER_SUBTRACT_ALWAYS(CounterName, Value)
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
ETraceCounterType
Definition CountersTrace.h:25
@ TraceCounterType_Float
Definition CountersTrace.h:27
@ TraceCounterType_Int
Definition CountersTrace.h:26
ETraceCounterDisplayHint
Definition CountersTrace.h:31
@ TraceCounterDisplayHint_Memory
Definition CountersTrace.h:33
@ TraceCounterDisplayHint_None
Definition CountersTrace.h:32
ETraceCounterNameType
Definition CountersTrace.h:37
@ TraceCounterNameType_Dynamic
Definition CountersTrace.h:39
@ TraceCounterNameType_Static
Definition CountersTrace.h:38
@ TraceCounterNameType_AllocNameCopy
Definition CountersTrace.h:40
#define UE_TRACE_CHANNELEXPR_IS_ENABLED(ChannelsExpr)
Definition Trace.h:452
#define UE_TRACE_CHANNEL_EXTERN(ChannelName,...)
Definition Trace.h:448
FORCEINLINE T * Get(const FObjectPtr &ObjectPtr)
Definition ObjectPtr.h:426