24#ifndef WITH_RHI_BREADCRUMBS
25#define WITH_RHI_BREADCRUMBS (UE_BUILD_DEBUG || UE_BUILD_DEVELOPMENT || WITH_PROFILEGPU || (HAS_GPU_STATS && RHI_NEW_GPU_PROFILER))
29#define WITH_RHI_BREADCRUMBS_FULL (WITH_RHI_BREADCRUMBS && (UE_BUILD_DEBUG || UE_BUILD_DEVELOPMENT || WITH_PROFILEGPU))
32#define WITH_RHI_BREADCRUMBS_MINIMAL (WITH_RHI_BREADCRUMBS && (!WITH_RHI_BREADCRUMBS_FULL))
35#define RHI_BREADCRUMBS_EMIT_CPU (WITH_RHI_BREADCRUMBS_FULL && CPUPROFILERTRACE_ENABLED && 1)
38#define RHI_BREADCRUMBS_EMIT_LOCATION (WITH_RHI_BREADCRUMBS_FULL && (CPUPROFILERTRACE_ENABLED || GPUPROFILERTRACE_ENABLED) && 1)
40#if RHI_NEW_GPU_PROFILER && HAS_GPU_STATS
47#if WITH_RHI_BREADCRUMBS
54#if RHI_BREADCRUMBS_EMIT_LOCATION
60#if RHI_BREADCRUMBS_EMIT_LOCATION
73#if RHI_NEW_GPU_PROFILER && HAS_GPU_STATS
101 #if CSV_PROFILER_STATS
110 #if CSV_PROFILER_STATS
118 return StatId.IsValidStat();
119 #elif CSV_PROFILER_STATS
129 return StatId == RHS.StatId;
130 #elif CSV_PROFILER_STATS
141 #elif CSV_PROFILER_STATS
179 TCHAR const*
const StaticName;
184 , StaticName(StaticName)
210 bool operator == (
FQueueID const& RHS)
const
212 return DeviceIndex == RHS.DeviceIndex &&
Pipeline == RHS.Pipeline;
217 return !(*
this == RHS);
238 RHI_API static std::atomic<uint32> NextID;
249 #if RHI_BREADCRUMBS_EMIT_CPU
298 #if WITH_ADDITIONAL_CRASH_CONTEXTS
303 RHI_API FString GetFullPath()
const;
322 virtual TCHAR const* GetTCHAR(FBuffer&
Buffer)
const = 0;
326 return Data.StaticName;
357 template <
typename TType,
typename...
TArgs>
360 static_assert(std::is_trivially_destructible<TType>::value,
"Only trivially destructable types may be used with the RHI breadcrumb allocator.");
372 #if ENABLE_RHI_VALIDATION
402 check(Node && Node != FRHIBreadcrumbNode::Sentinel);
403 check(!Node->ListLink);
412 Last->ListLink = Node;
430 FIterator& operator++()
457 FIterator Iterator {
nullptr,
First };
462 std::nullptr_t
end()
const {
return nullptr; }
545 operator bool()
const {
return First !=
nullptr; }
549 return First == RHS.First &&
Last == RHS.Last;
554 return !(*
this == RHS);
563 class FRHIBreadcrumbRange::FOuter
595 FIterator& operator++()
606 checkf(
Next,
TEXT(
"Nullptr 'Next' breadcrumb found before reaching the 'Last' breadcrumb in the range. (First: 0x%p, Last: 0x%p, Current: 0x%p)"),
First,
Last,
Current);
626 constexpr std::nullptr_t
end()
const
651 inline void FRHIBreadcrumbNode::TraceBeginCPU()
const
653#if RHI_BREADCRUMBS_EMIT_CPU
667 inline void FRHIBreadcrumbNode::TraceEndCPU()
const
669#if RHI_BREADCRUMBS_EMIT_CPU
674 FCpuProfilerTrace::OutputEndEventWithMetadata();
678 FCpuProfilerTrace::OutputEndEvent();
686 #if RHI_BREADCRUMBS_EMIT_CPU
706 #if RHI_BREADCRUMBS_EMIT_CPU
725 #if RHI_BREADCRUMBS_EMIT_CPU
728 while (Node && Node != Sentinel)
731 Node = Node->GetParent();
741 #if RHI_BREADCRUMBS_EMIT_CPU
756 namespace UE::RHI::Breadcrumbs::Private
759 template <
typename T>
760 using TRemoveCVRef = std::remove_cv_t<std::remove_reference_t<T>>;
763 template <
typename...>
764 struct TFalse {
static constexpr bool Value =
false; };
774 template <
typename T>
777 static constexpr bool bValidType = std::is_integral_v<T> || std::is_floating_point_v<T> || std::is_enum_v<T>;
781 template <
typename TArg>
785 static_assert(
bValidType || TFalse<TArg>::Value,
"Type is not compatible with RHI breadcrumbs.");
803 template <
typename T>
808 template <
typename...
TArgs>
811 if constexpr (std::is_same_v<std::remove_const_t<T>,
TCHAR>)
814 "Do not use raw TCHAR pointers with RHI breadcrumbs. Pass the FString, FName, or string literal instead. If you are certain your TCHAR pointer is a string literal "
815 "(e.g. from a function returning a literal) and you cannot pass that literal directly to an RHI breadcrumb, use the RHI_BREADCRUMB_FORCE_STRING_LITERAL macro to silence "
816 "this static assert. Incorrect use of RHI_BREADCRUMB_FORCE_STRING_LITERAL will lead to use-after-free, as only the raw pointer is retained by the breadcrumb."
821 static_assert(
TFalse<
TArgs...>
::Value,
"RHI breadcrumbs do not support arbitrary pointer types.");
828 template <
typename...
TArgs>
839 struct TValue<
TCHAR[N]>
917 struct TValue<FString>
922 TValue(FString
const&
Value)
942 template <
typename T>
struct TIsField {
static constexpr bool Value =
false; };
943 template <
size_t N,
typename T>
struct TIsField<std::
tuple<TCHAR const(&)[N], T>> {
static constexpr bool Value =
true; };
955 template <
size_t N >
struct TFindFieldIndices<N > {
using TType = std::index_sequence<>; };
958 using TType =
typename std::conditional<TIsField<TFirst>::Value
993 template <
size_t Size,
bool bHasVarargs>
999 : FormatString(FormatString)
1007 std::tuple<typename std::tuple_element_t<Indices, TValuesTuple>::FConvert...>
Converted
1009 std::get<Indices>(Values)...
1016 , (std::get<Indices>(
Converted).Inner)...
1027 "Use of the non-\"_F\" versions of the RHI_BREADCRUMB_EVENT family of macros with printf varargs has been deprecated. "
1028 "The additional values passed to these macros will be ignored, and the raw printf format string will form the name of the breadcrumb. "
1029 "Use the \"_F\" versions of these macros instead (which require both a static name and a format string), or remove the varargs.")
1039 if constexpr (std::tuple_size_v<TValuesTuple> == 1)
1041 using TConvert =
typename std::tuple_element_t<0, TValuesTuple>::FConvert;
1043 if constexpr (std::is_same_v<decltype(std::declval<TConvert>().Inner),
TCHAR const*>)
1047 return TConvert(std::get<0>(Values)).Inner;
1089 template <
typename TTuple,
size_t... Indices>
1092 return std::array<
TCHAR const*,
sizeof...(Indices)>
1094 std::get<0>(std::get<Indices>(Tuple))...
1100 using TValuesTuple = std::tuple<typename TGetValueType<TValues>::TType...>;
1101 static constexpr size_t NumValues =
sizeof...(TValues);
1108 static constexpr size_t NumFields = TFieldsIndexSequence::size();
1111 std::array<TCHAR const*, NumFields>
const FieldNames;
1133 std::apply([&](
const auto&...
Value)
1135 (SerializeValue(
Value, Serializer), ...);
1158#if CPUPROFILERTRACE_ENABLED
1178 FCpuProfilerTrace::OutputEventMetadataSpec(
TraceCpuSpecId, StaticName, TFormatString::FormatString, Serializer.
GetData());
1187 template<
typename T>
1190 Item.Serialize(Serializer);
1196 template <
typename TDesc>
1208 template <
typename...
TValues>
1214#if RHI_BREADCRUMBS_EMIT_CPU
1218 if (Desc.NumValues > 0)
1221 Desc.SerializeValues(Serializer, *
this);
1228 TCHAR const* GetTCHAR(FBuffer&
Buffer)
const override
1230 return Desc.ToString(
Buffer, *
this);
1235 if (
uint32 SpecId = Desc.GetTraceGpuSpec())
1238 Desc.SerializeValues(Serializer, *
this);
1245 if (Desc.TraceGpuSpecId)
1271 if (Node && Node != FRHIBreadcrumbNode::Sentinel)
1278 operator bool()
const {
return !!Node; }
1325 #define RHI_BREADCRUMB_PRIVATE_DEFINE(StaticName, FormatString, ValueType, GPUStat) \
1326 [&](auto&&... Values) \
1328 using namespace UE::RHI::Breadcrumbs::Private; \
1330 TRHIBreadcrumbDesc< \
1331 TStringLiteralSize<decltype(FormatString)>::Value, \
1332 typename TFieldTraits<decltype(Values)>::TDescType... \
1333 > static const Desc( \
1334 FRHIBreadcrumbData(StaticName, __FILE__, __LINE__, GPUStat) \
1339 return std::tuple( \
1341 std::tuple<typename TFieldTraits<decltype(Values)>::ValueType...>( \
1342 TFieldTraits<decltype(Values)>::ForwardValue(Values)... \
1347 #define RHI_BREADCRUMB_DESC_FORWARD_VALUES(StaticName, FormatString, GPUStat) RHI_BREADCRUMB_PRIVATE_DEFINE(StaticName, FormatString, TValueRef , GPUStat)
1348 #define RHI_BREADCRUMB_DESC_COPY_VALUES( StaticName, FormatString, GPUStat) RHI_BREADCRUMB_PRIVATE_DEFINE(StaticName, FormatString, TValueType, GPUStat)
1350 #if RHI_NEW_GPU_PROFILER && HAS_GPU_STATS
1351 #define RHI_GPU_STAT_ARGS(StatName) FRHIBreadcrumbData_Stats(&GPUStat_##StatName)
1352 #define RHI_GPU_STAT_ARGS_NONE FRHIBreadcrumbData_Stats(nullptr)
1354 #define RHI_GPU_STAT_ARGS(StatName) FRHIBreadcrumbData_Stats(GET_STATID(Stat_GPU_##StatName), CSV_STAT_FNAME(StatName))
1355 #define RHI_GPU_STAT_ARGS_NONE FRHIBreadcrumbData_Stats(TStatId(), NAME_None)
1357 #define RHI_GPU_STAT_ARGS(StatName) FRHIBreadcrumbData_Stats()
1358 #define RHI_GPU_STAT_ARGS_NONE FRHIBreadcrumbData_Stats()
1363 #define RHI_BREADCRUMB_FIELD(Name, Value) std::forward_as_tuple(TEXT(Name), Value)
1365 #define RHI_BREADCRUMB_EVENT_PRIVATE_IMPL(RHICmdList_Or_RHIContext, Stat, Condition, StaticName, Format, ...)\
1366 TOptional<FRHIBreadcrumbScope> PREPROCESSOR_JOIN(BreadcrumbScope, __LINE__); \
1371 PREPROCESSOR_JOIN(BreadcrumbScope, __LINE__).Emplace( \
1372 UE::RHI::Breadcrumbs::Private::GetRHICmdList(RHICmdList_Or_RHIContext), \
1373 RHI_BREADCRUMB_DESC_FORWARD_VALUES( \
1384#if WITH_RHI_BREADCRUMBS_FULL
1387 #define RHI_BREADCRUMB_EVENT( RHICmdList_Or_RHIContext, StaticName, ...) RHI_BREADCRUMB_EVENT_PRIVATE_IMPL(RHICmdList_Or_RHIContext, RHI_GPU_STAT_ARGS_NONE , true, TEXT(StaticName), nullptr, ##__VA_ARGS__)
1388 #define RHI_BREADCRUMB_EVENT_CONDITIONAL( RHICmdList_Or_RHIContext, Condition, StaticName, ...) RHI_BREADCRUMB_EVENT_PRIVATE_IMPL(RHICmdList_Or_RHIContext, RHI_GPU_STAT_ARGS_NONE , Condition, TEXT(StaticName), nullptr, ##__VA_ARGS__)
1389 #define RHI_BREADCRUMB_EVENT_STAT( RHICmdList_Or_RHIContext, Stat, StaticName, ...) RHI_BREADCRUMB_EVENT_PRIVATE_IMPL(RHICmdList_Or_RHIContext, RHI_GPU_STAT_ARGS(Stat), true, TEXT(StaticName), nullptr, ##__VA_ARGS__)
1390 #define RHI_BREADCRUMB_EVENT_CONDITIONAL_STAT( RHICmdList_Or_RHIContext, Stat, Condition, StaticName, ...) RHI_BREADCRUMB_EVENT_PRIVATE_IMPL(RHICmdList_Or_RHIContext, RHI_GPU_STAT_ARGS(Stat), Condition, TEXT(StaticName), nullptr, ##__VA_ARGS__)
1393 #define RHI_BREADCRUMB_EVENT_F( RHICmdList_Or_RHIContext, StaticName, Format, ...) RHI_BREADCRUMB_EVENT_PRIVATE_IMPL(RHICmdList_Or_RHIContext, RHI_GPU_STAT_ARGS_NONE , true, TEXT(StaticName), TEXT(Format), ##__VA_ARGS__)
1394 #define RHI_BREADCRUMB_EVENT_CONDITIONAL_F( RHICmdList_Or_RHIContext, Condition, StaticName, Format, ...) RHI_BREADCRUMB_EVENT_PRIVATE_IMPL(RHICmdList_Or_RHIContext, RHI_GPU_STAT_ARGS_NONE , Condition, TEXT(StaticName), TEXT(Format), ##__VA_ARGS__)
1395 #define RHI_BREADCRUMB_EVENT_STAT_F( RHICmdList_Or_RHIContext, Stat, StaticName, Format, ...) RHI_BREADCRUMB_EVENT_PRIVATE_IMPL(RHICmdList_Or_RHIContext, RHI_GPU_STAT_ARGS(Stat), true, TEXT(StaticName), TEXT(Format), ##__VA_ARGS__)
1396 #define RHI_BREADCRUMB_EVENT_CONDITIONAL_STAT_F( RHICmdList_Or_RHIContext, Stat, Condition, StaticName, Format, ...) RHI_BREADCRUMB_EVENT_PRIVATE_IMPL(RHICmdList_Or_RHIContext, RHI_GPU_STAT_ARGS(Stat), Condition, TEXT(StaticName), TEXT(Format), ##__VA_ARGS__)
1399 #define RHI_BREADCRUMB_EVENT_F_STR_DEPRECATED( RHICmdList_Or_RHIContext, StaticName, Format, ...) RHI_BREADCRUMB_EVENT_PRIVATE_IMPL(RHICmdList_Or_RHIContext, RHI_GPU_STAT_ARGS_NONE , true, TEXT(StaticName), Format , ##__VA_ARGS__)
1400 #define RHI_BREADCRUMB_EVENT_F_CONDITIONAL_STR_DEPRECATED(RHICmdList_Or_RHIContext, Condition, StaticName, Format, ...) RHI_BREADCRUMB_EVENT_PRIVATE_IMPL(RHICmdList_Or_RHIContext, RHI_GPU_STAT_ARGS_NONE , Condition, TEXT(StaticName), Format , ##__VA_ARGS__)
1402#elif WITH_RHI_BREADCRUMBS_MINIMAL
1410 #define RHI_BREADCRUMB_EVENT( RHICmdList_Or_RHIContext, StaticName, ...)
1411 #define RHI_BREADCRUMB_EVENT_CONDITIONAL( RHICmdList_Or_RHIContext, Condition, StaticName, ...)
1412 #define RHI_BREADCRUMB_EVENT_STAT( RHICmdList_Or_RHIContext, Stat, StaticName, ...) RHI_BREADCRUMB_EVENT_PRIVATE_IMPL(RHICmdList_Or_RHIContext, RHI_GPU_STAT_ARGS(Stat), true, TEXT(StaticName), nullptr)
1413 #define RHI_BREADCRUMB_EVENT_CONDITIONAL_STAT( RHICmdList_Or_RHIContext, Stat, Condition, StaticName, ...) RHI_BREADCRUMB_EVENT_PRIVATE_IMPL(RHICmdList_Or_RHIContext, RHI_GPU_STAT_ARGS(Stat), Condition, TEXT(StaticName), nullptr)
1416 #define RHI_BREADCRUMB_EVENT_F( RHICmdList_Or_RHIContext, StaticName, Format, ...)
1417 #define RHI_BREADCRUMB_EVENT_CONDITIONAL_F( RHICmdList_Or_RHIContext, Condition, StaticName, Format, ...)
1418 #define RHI_BREADCRUMB_EVENT_STAT_F( RHICmdList_Or_RHIContext, Stat, StaticName, Format, ...) RHI_BREADCRUMB_EVENT_PRIVATE_IMPL(RHICmdList_Or_RHIContext, RHI_GPU_STAT_ARGS(Stat), true, TEXT(StaticName), nullptr)
1419 #define RHI_BREADCRUMB_EVENT_CONDITIONAL_STAT_F( RHICmdList_Or_RHIContext, Stat, Condition, StaticName, Format, ...) RHI_BREADCRUMB_EVENT_PRIVATE_IMPL(RHICmdList_Or_RHIContext, RHI_GPU_STAT_ARGS(Stat), Condition, TEXT(StaticName), nullptr)
1422 #define RHI_BREADCRUMB_EVENT_F_STR_DEPRECATED( RHICmdList_Or_RHIContext, StaticName, Format, ...)
1423 #define RHI_BREADCRUMB_EVENT_F_CONDITIONAL_STR_DEPRECATED(RHICmdList_Or_RHIContext, Condition, StaticName, Format, ...)
1427 #define RHI_BREADCRUMB_FIELD( ...)
1428 #define RHI_BREADCRUMB_EVENT( ...)
1429 #define RHI_BREADCRUMB_EVENT_CONDITIONAL( ...)
1430 #define RHI_BREADCRUMB_EVENT_STAT( ...)
1431 #define RHI_BREADCRUMB_EVENT_CONDITIONAL_STAT( ...)
1432 #define RHI_BREADCRUMB_EVENT_F( ...)
1433 #define RHI_BREADCRUMB_EVENT_CONDITIONAL_F( ...)
1434 #define RHI_BREADCRUMB_EVENT_STAT_F( ...)
1435 #define RHI_BREADCRUMB_EVENT_CONDITIONAL_STAT_F( ...)
1436 #define RHI_BREADCRUMB_EVENT_F_STR_DEPRECATED( ...)
1437 #define RHI_BREADCRUMB_EVENT_F_CONDITIONAL_STR_DEPRECATED(...)
1441#if WITH_RHI_BREADCRUMBS_FULL
1444 #define RHI_BREADCRUMB_LOG( RHICmdList_Or_RHIContext, CategoryName, Verbosity, Format, ...) UE_LOG( CategoryName, Verbosity, Format TEXT("\nBreadcrumbs: %s"), ##__VA_ARGS__, *UE::RHI::Breadcrumbs::Private::GetSafeBreadcrumbPath(RHICmdList_Or_RHIContext))
1445 #define RHI_BREADCRUMB_CLOG( RHICmdList_Or_RHIContext, Condition, CategoryName, Verbosity, Format, ...) UE_CLOG(Condition, CategoryName, Verbosity, Format TEXT("\nBreadcrumbs: %s"), ##__VA_ARGS__, *UE::RHI::Breadcrumbs::Private::GetSafeBreadcrumbPath(RHICmdList_Or_RHIContext))
1446 #define RHI_BREADCRUMB_CHECKF(RHICmdList_Or_RHIContext, Condition, Format, ...) checkf( Condition, Format TEXT("\nBreadcrumbs: %s"), ##__VA_ARGS__, *UE::RHI::Breadcrumbs::Private::GetSafeBreadcrumbPath(RHICmdList_Or_RHIContext))
1451 #define RHI_BREADCRUMB_LOG( RHICmdList_Or_RHIContext, CategoryName, Verbosity, Format, ...) UE_LOG( CategoryName, Verbosity, Format, ##__VA_ARGS__)
1452 #define RHI_BREADCRUMB_CLOG( RHICmdList_Or_RHIContext, Condition, CategoryName, Verbosity, Format, ...) UE_CLOG(Condition, CategoryName, Verbosity, Format, ##__VA_ARGS__)
1453 #define RHI_BREADCRUMB_CHECKF(RHICmdList_Or_RHIContext, Condition, Format, ...) checkf( Condition, Format, ##__VA_ARGS__)
1458 #define RHI_BREADCRUMB_CHECK_SHIPPINGF(RHICmdList_Or_RHIContext, Condition, Format, ...) RHI_BREADCRUMB_CHECKF(RHICmdList_Or_RHIContext, Condition, Format, ##__VA_ARGS__)
1460 #define RHI_BREADCRUMB_CHECK_SHIPPINGF(RHICmdList_Or_RHIContext, Condition, Format, ...) RHI_BREADCRUMB_CLOG(RHICmdList_Or_RHIContext, !(Condition), LogRHI, Error, TEXT("Check '%s' failed. ") Format, TEXT(#Condition), ##__VA_ARGS__)
1463#define RHI_BREADCRUMB_CHECK_SHIPPING(RHICmdList_Or_RHIContext, Condition) RHI_BREADCRUMB_CHECK_SHIPPINGF(RHICmdList_Or_RHIContext, Condition, TEXT(""))
1464#define RHI_BREADCRUMB_CHECK( RHICmdList_Or_RHIContext, Condition) RHI_BREADCRUMB_CHECKF( RHICmdList_Or_RHIContext, Condition, TEXT(""))
1474#define RHI_BREADCRUMB_FORCE_STRING_LITERAL [](auto&& TCharPointer) -> TCHAR const(&)[1]\
1476 return *reinterpret_cast<TCHAR const(*)[1]>(TCharPointer); \
constexpr T Align(T Val, uint64 Alignment)
Definition AlignmentTemplates.h:18
#define check(expr)
Definition AssertionMacros.h:314
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
UE_FORCEINLINE_HINT FLinearColor operator*(float Scalar, const FLinearColor &Color)
Definition Color.h:473
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
@ InPlace
Definition CoreMiscDefines.h:162
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define TRACE_CPUPROFILER_EVENT_MANUAL_IS_ENABLED()
Definition CpuProfilerTrace.h:520
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
return true
Definition ExternalRpcRegistry.cpp:601
UE_FORCEINLINE_HINT bool operator!=(const FIndexedPointer &Other) const
Definition LockFreeList.h:76
const bool
Definition NetworkReplayStreaming.h:178
#define RHI_BREADCRUMBS_EMIT_LOCATION
Definition RHIBreadcrumbs.h:38
constexpr uint32 GetRHIPipelineIndex(ERHIPipeline Pipeline)
Definition RHIPipeline.h:28
ERHIPipeline
Definition RHIPipeline.h:13
constexpr uint32 HashCombineFast(uint32 A, uint32 B)
Definition TypeHash.h:74
uint32 PointerHash(const void *Key)
Definition TypeHash.h:91
#define UE_ARRAY_COUNT(array)
Definition UnrealTemplate.h:212
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
FRWLock Lock
Definition UnversionedPropertySerialization.cpp:921
uint32 Size
Definition VulkanMemory.cpp:4034
Definition RHIDefinitions.h:95
Definition NameTypes.h:617
Definition RHICommandList.h:2735
Definition ScopeLock.h:141
Definition RHIContext.h:257
UE_FORCEINLINE_HINT SizeType AddUnique(ElementType &&Item)
Definition Array.h:2993
Definition UnrealString.h.inl:34
Definition RHIPipeline.h:55
Definition SharedPointer.h:1640
Definition SharedPointer.h:692
Definition SharedPointer.h:153
Definition StaticArray.h:26
FORCEINLINE void InsertAfter(const ElementType &NewNode, ListType &List, NodeType *Node)
Definition ChunkSearch.h:32
GeometryCollection::Facades::FMuscleActivationData Data
Definition MuscleActivationConstraints.h:15
@ Range
Definition EnvQueryTypes.h:81
uint32 GetTypeHash(const FKey &Key)
Definition BlackboardKey.h:35
FString ToString(uint16 Value)
Definition PathFollowingComponent.cpp:82
FORCEINLINE T * Get(const FObjectPtr &ObjectPtr)
Definition ObjectPtr.h:426
FORCEINLINE FStridedReferenceIterator begin(FStridedReferenceView View)
Definition FastReferenceCollector.h:490
FORCEINLINE FStridedReferenceIterator end(FStridedReferenceView View)
Definition FastReferenceCollector.h:491
TValueOrError< void, UE::UnifiedError::FError > FResult
Definition OnDemandError.h:32
FString ToStringImpl(const IdType &Id)
Definition CoreOnline.cpp:495
Definition GpuProfilerTrace.cpp:270
UE_STRING_CLASS Result(Forward< LhsType >(Lhs), RhsLen)
Definition String.cpp.inl:732
@ MaxLength
[PropertyMetadata] Used for FString and FText properties. Indicates the maximum length of the value t...
Definition ObjectMacros.h:1449
@ false
Definition radaudio_common.h:23
Definition GenericPlatformCrashContext.h:300
static int32 Snprintf(CharType *Dest, int32 DestSize, const FmtType &Fmt, Types... Args)
Definition CString.h:581
static CharType * Strncpy(CharType *Dest, const CharType *Src, SIZE_T MaxLen)
Definition CString.h:991
Definition LightweightStats.h:416
Definition GPUProfiler.h:524
static void BeginBreadcrumb(uint32 SpecId, uint32 QueueId, uint64 GPUTimestampTOP, const TArray< uint8 > &CborData)
Definition GpuProfilerTrace.h:211
static void EndBreadcrumb(uint32 QueueId, uint64 GPUTimestampBOP)
Definition GpuProfilerTrace.h:212
static uint32 BreadcrumbSpec(const TCHAR *StaticName, const TCHAR *NameFormat, const std::array< const TCHAR *, Size > &FieldNames)
Definition GpuProfilerTrace.h:221
static bool IsAvailable()
Definition GpuProfilerTrace.h:207