UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
CpuProfilerTrace.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreTypes.h"
9#include "Misc/Build.h"
10#include "Trace/Config.h"
13#include "Trace/Trace.h"
14
15#if !defined(CPUPROFILERTRACE_ENABLED)
16#if UE_TRACE_ENABLED && !UE_BUILD_SHIPPING
17#define CPUPROFILERTRACE_ENABLED 1
18#else
19#define CPUPROFILERTRACE_ENABLED 0
20#endif
21#endif
22
23#if CPUPROFILERTRACE_ENABLED
24
26
27class FName;
28
29/*
30 * Facilities for tracing timed CPU events. Two types of events are supported, static/constant events where the identifier is
31 * known at compile time or it is constant during execution, and dynamic events were identifier can change between calls.
32 * Static/constant events have lower overhead, so always prefer to use them if possible.
33 *
34 * Events are tracked per thread, so begin/end calls must be matched and called on the same thread. It is possible to use any channel
35 * to emit the events, but both that channel and the CpuChannel must then be enabled.
36 *
37 * Usage of the scope macros is highly encouraged in order to avoid mistakes.
38 */
40{
41 typedef const FName& FNameParam;
42
43 /*
44 * Output CPU event definition (spec).
45 * The trace event emitted by this function is an "important event" (so all events emitted will add to the Trace System's cache).
46 * It is the responsibility of the caller code to ensure this function is not abused.
47 * @param Name - The event name
48 * @param File - The source filename
49 * @param Line - The line number in source file
50 * @returns The event definition id
51 */
52 FORCENOINLINE CORE_API static uint32 OutputEventType(const ANSICHAR* Name, const ANSICHAR* File = nullptr, uint32 Line = 0);
53 FORCENOINLINE CORE_API static uint32 OutputEventType(const TCHAR* Name, const ANSICHAR* File = nullptr, uint32 Line = 0);
55
56 /*
57 * Output CPU event metadata spec.
58 * The trace event emitted by this function is an "important event" (so all events emitted will add to the Trace System's cache).
59 * It is the responsibility of the caller code to ensure this function is not abused.
60 * @param SpecId - The SpecId of the event to associate this metadata spec with
61 * @param StaticName - The static name of the event
62 * @param NameFormat - The format string for the event
63 * @param FieldNames - Cbor data representing the serialized field names. These should be descriptive names for the metadata values passed to OutputBeginEventWithMetadata.
64 */
65 FORCENOINLINE CORE_API static void OutputEventMetadataSpec(uint32 SpecId, const TCHAR* StaticName, const TCHAR* NameFormat, const TArray<uint8>& FieldNames);
66
67 /*
68 * Output CPU event metadata. This metadata can than be associated with multiple timing events emitted with OutputBeginEventWithMetadata.
69 * @param SpecId - The SpecId of the event to associate this metadata with.
70 * @param CborData - The serialized metadata associated with the event.
71 * @returns A MetadataId that can be used with OutputBeginEventWithMetadata. Returns 0 if the cpu channel is off.
72 */
73 FORCENOINLINE CORE_API static uint32 OutputMetadata(uint32 SpecId, const TArray<uint8>& CborData);
74
75 /*
76 * Output CPU event definition (spec) for a dynamic event.
77 * The Name will be cached and the trace event will only be emitted once (for each unique Name; even if File or Line changes).
78 * @param Name - The event name
79 * @param File - The source filename
80 * @param Line - The line number in source file
81 * @returns The event definition id
82 */
86
87 /*
88 * Output CPU event definition (spec) for a dynamic event identified by an FName.
89 * The Id will be cached and the trace event will only be emitted once (for each unique Id; even if Name, File or Line changes).
90 * This is faster and less memory expensive than \ref OutputDynamicEventType that receives ANSICHAR* or TCHAR* name.
91 * @param Id - The id of event
92 * @param Name - The name of event
93 * @param File - The source filename
94 * @param Line - The line number in source file
95 */
98
99 /*
100 * Output begin event marker for a given spec. Must always be matched with an end event.
101 * @param SpecId - The event definition id.
102 */
103 CORE_API static void OutputBeginEvent(uint32 SpecId);
104
105 /*
106 * Output begin event marker with metadata for a given spec. Must always be matched with an end event.
107 * @param MetadataId - The MetadataId returned from OutputMetadata.
108 */
109 CORE_API static void OutputBeginEventWithMetadata(uint32 MetadataId);
110
111 /*
112 * Output end event marker for an event traced with OutputBeginEventWithMetadata.
113 */
115
116 /*
117 * Output begin event marker for a dynamic event name. This is more expensive than statically known event
118 * names using \ref OutputBeginEvent. Must always be matched with an end event.
119 * @param Name - The name of event
120 * @param File - The source filename
121 * @param Line - The line number in source file
122 */
123 CORE_API static void OutputBeginDynamicEvent(const ANSICHAR* Name, const ANSICHAR* File = nullptr, uint32 Line = 0);
124 CORE_API static void OutputBeginDynamicEvent(const TCHAR* Name, const ANSICHAR* File = nullptr, uint32 Line = 0);
125
126 /*
127 * Output begin event marker for a dynamic event identified by an FName. This is more expensive than
128 * statically known event names using \ref OutputBeginEvent, but it is faster than \ref OutputBeginDynamicEvent
129 * that receives ANSICHAR* / TCHAR* name. Must always be matched with an end event.
130 * @param Name - The name of event
131 * @param File - The source filename
132 * @param Line - The line number in source file
133 */
134 CORE_API static void OutputBeginDynamicEvent(FNameParam Name, const ANSICHAR* File = nullptr, uint32 Line = 0);
135
136 /*
137 * Output begin event marker for a dynamic event identified by an FName. This is more expensive than
138 * statically known event names using \ref OutputBeginEvent, but it is faster than \ref OutputBeginDynamicEvent
139 * that receives ANSICHAR* / TCHAR* name. Must always be matched with an end event.
140 * @param Id - The id of event
141 * @param Name - The name of event
142 * @param File - The source filename
143 * @param Line - The line number in source file
144 */
145 CORE_API static void OutputBeginDynamicEventWithId(FNameParam Id, const ANSICHAR* Name, const ANSICHAR* File = nullptr, uint32 Line = 0);
146 CORE_API static void OutputBeginDynamicEventWithId(FNameParam Id, const TCHAR* Name, const ANSICHAR* File = nullptr, uint32 Line = 0);
147
148 /*
149 * Output end event marker for static or dynamic event for the currently open scope.
150 */
151 CORE_API static void OutputEndEvent();
152
153 /*
154 * Output resume marker for a given spec. Must always be matched with an suspend event.
155 * @param SpecId - The unique Resume Event definition id
156 * @param TimerScopeDepth - updates the depth of the current OutputBeginEvent depth
157 */
159
160 /*
161 * Output suspend event marker for the currently open resume event.
162 */
163 CORE_API static void OutputSuspendEvent();
164
165 /*
166 * Make sure all thread data has reached the destination. Can be useful to call this before entering a wait condition that might take a while.
167 */
168 CORE_API static void FlushThreadBuffer();
169
170 /*
171 * Get or create a unique event definition id for the given parameters.
172 * @param InOutSpecId - The event definition id.
173 * @param Name - The name of event
174 * @param File - The source filename
175 * @param Line - The line number in source file
176 */
180
181 class FEventScope
182 {
183 public:
185 : bEnabled(bInCondition && CpuChannel)
186 {
188 }
189
191 : bEnabled(bInCondition && (CpuChannel | InChannel))
192 {
194 }
195
197 : bEnabled(bInCondition && CpuChannel)
198 {
200 }
201
203 : bEnabled(bInCondition && (CpuChannel | InChannel))
204 {
206 }
207
209 : bEnabled(bInCondition && CpuChannel)
210 {
212 }
213
215 : bEnabled(bInCondition && (CpuChannel | InChannel))
216 {
218 }
219
221 : bEnabled(bInCondition && CpuChannel)
222 {
224 }
225
227 : bEnabled(bInCondition && (CpuChannel | InChannel))
228 {
230 }
231
233 {
234 if (bEnabled)
235 {
237 }
238 }
239
240 private:
242 {
243 if (bEnabled)
244 {
246 }
247 }
248
250 {
251 if (bEnabled)
252 {
254 OutputBeginEvent(FPlatformAtomics::AtomicRead_Relaxed((volatile int32*)&InOutSpecId));
255 }
256 }
257
259 {
260 if (bEnabled)
261 {
263 OutputBeginEvent(FPlatformAtomics::AtomicRead_Relaxed((volatile int32*)&InOutSpecId));
264 }
265 }
266
268 {
269 if (bEnabled)
270 {
272 OutputBeginEvent(FPlatformAtomics::AtomicRead_Relaxed((volatile int32*)&InOutSpecId));
273 }
274 }
275
276 bool bEnabled;
277 };
278
279 struct FDynamicEventScope
280 {
282 : bEnabled(bInCondition && CpuChannel)
283 {
284 if (bEnabled)
285 {
287 }
288 }
289
291 : bEnabled(bInCondition && (CpuChannel | InChannel))
292 {
293 if (bEnabled)
294 {
296 }
297 }
298
300 : bEnabled(bInCondition && CpuChannel)
301 {
302 if (bEnabled)
303 {
305 }
306 }
307
309 : bEnabled(bInCondition && (CpuChannel | InChannel))
310 {
311 if (bEnabled)
312 {
314 }
315 }
316
318 : bEnabled(bInCondition && CpuChannel)
319 {
320 if (bEnabled)
321 {
323 }
324 }
325
327 : bEnabled(bInCondition && (CpuChannel | InChannel))
328 {
329 if (bEnabled)
330 {
332 }
333 }
334
336 {
337 if (bEnabled)
338 {
340 }
341 }
342
343 bool bEnabled;
344 };
345
346private:
347 static uint8 OnAbortKey;
348};
349
350// Advanced macro for integrating e.g. stats/named events with CPU trace.
351// Declares a CPU timing event for future use, conditionally and with a particular variable name for storing the id.
352#define TRACE_CPUPROFILER_EVENT_DECLARE(DeclName) \
353 static uint32 DeclName;
354
355// Advanced macro for integrating e.g. stats/named events with CPU trace.
356// Traces a scoped event previously declared with TRACE_CPUPROFILER_EVENT_DECLARE, conditionally.
357#define TRACE_CPUPROFILER_EVENT_SCOPE_USE(DeclName, NameStr, ScopeName, Condition) \
358 FCpuProfilerTrace::FEventScope ScopeName(DeclName, NameStr, Condition, __FILE__, __LINE__);
359
360// Advanced macro for integrating e.g. stats/named events with CPU trace
361// Traces a scoped event previously declared with TRACE_CPUPROFILER_EVENT_DECLARE, conditionally
362#define TRACE_CPUPROFILER_EVENT_SCOPE_USE_ON_CHANNEL(DeclName, NameStr, ScopeName, Channel, Condition) \
363 FCpuProfilerTrace::FEventScope ScopeName(DeclName, NameStr, Channel, Condition, __FILE__, __LINE__);
364
365// Advanced macro that will check if CpuChannel is enabled and, if so, declares a new CPU event and starts it.
366#define TRACE_CPUPROFILER_EVENT_MANUAL_START(EventNameStr) \
367 if (CpuChannel) \
368 { \
369 static uint32 PREPROCESSOR_JOIN(__CpuProfilerEventSpecId, __LINE__) = FCpuProfilerTrace::OutputEventType(EventNameStr, __FILE__, __LINE__); \
370 FCpuProfilerTrace::OutputBeginEvent(PREPROCESSOR_JOIN(__CpuProfilerEventSpecId, __LINE__)); \
371 }
372
373// Advanced macro that will check if CpuChannel is enabled and, if so, ends the previously started CPU event.
374#define TRACE_CPUPROFILER_EVENT_MANUAL_END() \
375 if (CpuChannel) \
376 { \
377 FCpuProfilerTrace::OutputEndEvent(); \
378 }
379
380// Advanced macro that can be used with TRACE_CPUPROFILER_EVENT_MANUAL_START to wrap code that should only be executed if
381// the event was actually started.
382#define TRACE_CPUPROFILER_EVENT_MANUAL_IS_ENABLED() \
383 bool(CpuChannel)
384
386// TRACE_CPUPROFILER_EVENT_SCOPE_STR* - scope name as static/constant string
388
389// Conditionally trace a scoped CPU timing event providing a static/constant string (const ANSICHAR*
390// or const TCHAR* or FName) as the scope name.
391// It will use the CPU trace channel.
392// Note: The name will be cached only once. If used with a string pointer or an FName,
393// the name should be guaranteed to not change between calls.
394// Example: TRACE_CPUPROFILER_EVENT_SCOPE_STR_CONDITIONAL("My Scoped Timer A", Condition)
395#define TRACE_CPUPROFILER_EVENT_SCOPE_STR_CONDITIONAL(NameStr, Condition) \
396 TRACE_CPUPROFILER_EVENT_DECLARE(PREPROCESSOR_JOIN(__CpuProfilerEventSpecId, __LINE__)); \
397 TRACE_CPUPROFILER_EVENT_SCOPE_USE(PREPROCESSOR_JOIN(__CpuProfilerEventSpecId, __LINE__), NameStr, PREPROCESSOR_JOIN(__CpuProfilerEventScope, __LINE__), (Condition));
398
399// Trace a scoped CPU timing event providing a static/constant string (const ANSICHAR* or
400// const TCHAR* or FName) as the scope name. It will use the CPU trace channel.
401// Note: The name will be cached only once. If used with a string pointer or an FName,
402// the name should be guaranteed to not change between calls.
403// Example: TRACE_CPUPROFILER_EVENT_SCOPE_STR("My Scoped Timer A")
404#define TRACE_CPUPROFILER_EVENT_SCOPE_STR(NameStr) \
405 TRACE_CPUPROFILER_EVENT_SCOPE_STR_CONDITIONAL(NameStr, true)
406
407// Conditionally trace a scoped CPU timing event providing a static/constant string (const ANSICHAR*
408// or const TCHAR* or FName) as the scope name and a trace channel.
409// Note: The name will be cached only once. If used with a string pointer or an FName,
410// the name should be guaranteed to not change between calls.
411// Note: The event will be emitted only if both the given channel and the CpuChannel are enabled.
412// Example: TRACE_CPUPROFILER_EVENT_SCOPE_STR_ON_CHANNEL_CONDITIONAL("My Scoped Timer A", CustomChannel, Condition)
413#define TRACE_CPUPROFILER_EVENT_SCOPE_STR_ON_CHANNEL_CONDITIONAL(NameStr, Channel, Condition) \
414 TRACE_CPUPROFILER_EVENT_DECLARE(PREPROCESSOR_JOIN(__CpuProfilerEventSpecId, __LINE__)); \
415 TRACE_CPUPROFILER_EVENT_SCOPE_USE_ON_CHANNEL(PREPROCESSOR_JOIN(__CpuProfilerEventSpecId, __LINE__), NameStr, PREPROCESSOR_JOIN(__CpuProfilerEventScope, __LINE__), Channel, (Condition));
416#define TRACE_CPUPROFILER_EVENT_SCOPE_ON_CHANNEL_STR_CONDITIONAL(NameStr, Channel, Condition) \
417 TRACE_CPUPROFILER_EVENT_SCOPE_STR_ON_CHANNEL_CONDITIONAL(NameStr, Channel, Condition)
418#define TRACE_CPUPROFILER_EVENT_SCOPE_ON_CHANNEL_CONDITIONAL_STR(NameStr, Channel, Condition) \
419 TRACE_CPUPROFILER_EVENT_SCOPE_STR_ON_CHANNEL_CONDITIONAL(NameStr, Channel, Condition)
420
421// Trace a scoped CPU timing event providing a static/constant string (const ANSICHAR* or
422// const TCHAR* or FName) as the scope name and a trace channel.
423// Note: The name will be cached only once. If used with a string pointer or an FName,
424// the name should be guaranteed to not change between calls.
425// Note: The event will be emitted only if both the given channel and the CpuChannel are enabled.
426// Example: TRACE_CPUPROFILER_EVENT_SCOPE_STR_ON_CHANNEL("My Scoped Timer A", CustomChannel)
427#define TRACE_CPUPROFILER_EVENT_SCOPE_STR_ON_CHANNEL(NameStr, Channel) \
428 TRACE_CPUPROFILER_EVENT_SCOPE_STR_ON_CHANNEL_CONDITIONAL(NameStr, Channel, true)
429#define TRACE_CPUPROFILER_EVENT_SCOPE_ON_CHANNEL_STR(NameStr, Channel) \
430 TRACE_CPUPROFILER_EVENT_SCOPE_STR_ON_CHANNEL(NameStr, Channel)
431
433// TRACE_CPUPROFILER_EVENT_SCOPE* - scope name as plain text
435
436// Conditionally trace a scoped CPU timing event providing a scope name (plain text).
437// It will use the CPU trace channel.
438// Note: Do not use this macro with a static string because, in that case, additional quotes will
439// be added around the event scope name.
440// Example: TRACE_CPUPROFILER_EVENT_SCOPE_CONDITIONAL(MyScopedTimer::A, Condition)
441#define TRACE_CPUPROFILER_EVENT_SCOPE_CONDITIONAL(Name, Condition) \
442 TRACE_CPUPROFILER_EVENT_SCOPE_STR_CONDITIONAL(#Name, (Condition))
443
444// Trace a scoped CPU timing event providing a scope name (plain text).
445// It will use the CPU trace channel.
446// Note: Do not use this macro with a static string because, in that case, additional quotes will
447// be added around the event scope name.
448// Example: TRACE_CPUPROFILER_EVENT_SCOPE(MyScopedTimer::A)
449#define TRACE_CPUPROFILER_EVENT_SCOPE(Name) \
450 TRACE_CPUPROFILER_EVENT_SCOPE_CONDITIONAL(Name, true)
451
452// Conditionally trace a scoped CPU timing event providing a scope name (plain text) and a trace channel.
453// Note: Do not use this macro with a static string because, in that case, additional quotes will
454// be added around the event scope name.
455// Note: The event will be emitted only if both the given channel and the CpuChannel are enabled.
456// Example: TRACE_CPUPROFILER_EVENT_SCOPE_ON_CHANNEL_CONDITIONAL(MyScopedTimer::A, CustomChannel, Condition)
457#define TRACE_CPUPROFILER_EVENT_SCOPE_ON_CHANNEL_CONDITIONAL(Name, Channel, Condition) \
458 TRACE_CPUPROFILER_EVENT_SCOPE_STR_ON_CHANNEL_CONDITIONAL(#Name, Channel, (Condition))
459
460// Trace a scoped CPU timing event providing a scope name (plain text) and a trace channel.
461// Note: Do not use this macro with a static string because, in that case, additional quotes will
462// be added around the event scope name.
463// Note: The event will be emitted only if both the given channel and the CpuChannel are enabled.
464// Example: TRACE_CPUPROFILER_EVENT_SCOPE_ON_CHANNEL(MyScopedTimer::A, CustomChannel)
465#define TRACE_CPUPROFILER_EVENT_SCOPE_ON_CHANNEL(Name, Channel) \
466 TRACE_CPUPROFILER_EVENT_SCOPE_ON_CHANNEL_CONDITIONAL(Name, Channel, true)
467
469// TRACE_CPUPROFILER_EVENT_SCOPE_TEXT* - scope name as dynamic string
471
472// Conditionally trace a scoped CPU timing event providing a dynamic string (const ANSICHAR* or
473// const TCHAR* or FName) as the scope name. It will use the CPU trace channel.
474// Note: This macro has a larger overhead compared to macro that accepts a plain text name
475// or a static string. Use it only if scope name really needs to be a dynamic string.
476// Example: TRACE_CPUPROFILER_EVENT_SCOPE_TEXT_CONDITIONAL(*MyScopedTimerNameString, Condition)
477#define TRACE_CPUPROFILER_EVENT_SCOPE_TEXT_CONDITIONAL(Name, Condition) \
478 FCpuProfilerTrace::FDynamicEventScope PREPROCESSOR_JOIN(__CpuProfilerEventScope, __LINE__)(Name, (Condition), __FILE__, __LINE__);
479
480// Trace a scoped CPU timing event providing a dynamic string (const ANSICHAR* or
481// const TCHAR* or FName) as the scope name. It will use the CPU trace channel.
482// Note: This macro has a larger overhead compared to macro that accepts a plain text name
483// or a static string. Use it only if scope name really needs to be a dynamic string.
484// Example: TRACE_CPUPROFILER_EVENT_SCOPE_TEXT(*MyScopedTimerNameString)
485#define TRACE_CPUPROFILER_EVENT_SCOPE_TEXT(Name) \
486 TRACE_CPUPROFILER_EVENT_SCOPE_TEXT_CONDITIONAL(Name, true)
487
488// Conditionally trace a scoped CPU timing event providing a dynamic string (const ANSICHAR* or
489// const TCHAR* or FName) as the scope name and a trace channel.
490// Note: This macro has a larger overhead compared to macro that accepts a plain text name
491// or a static string. Use it only if scope name really needs to be a dynamic string.
492// Note: The event will be emitted only if both the given channel and the CpuChannel are enabled.
493// Example: TRACE_CPUPROFILER_EVENT_SCOPE_TEXT_ON_CHANNEL_CONDITIONAL(*MyScopedTimerNameString, CustomChannel, Condition)
494#define TRACE_CPUPROFILER_EVENT_SCOPE_TEXT_ON_CHANNEL_CONDITIONAL(Name, Channel, Condition) \
495 FCpuProfilerTrace::FDynamicEventScope PREPROCESSOR_JOIN(__CpuProfilerEventScope, __LINE__)(Name, Channel, (Condition), __FILE__, __LINE__);
496
497// Trace a scoped CPU timing event providing a dynamic string (const ANSICHAR* or const TCHAR* or FName)
498// as the scope name and a trace channel.
499// Note: This macro has a larger overhead compared to macro that accepts a plain text name
500// or a static string. Use it only if scope name really needs to be a dynamic string.
501// Note: The event will be emitted only if both the given channel and the CpuChannel are enabled.
502// Example: TRACE_CPUPROFILER_EVENT_SCOPE_TEXT_ON_CHANNEL(*MyScopedTimerNameString, CustomChannel)
503#define TRACE_CPUPROFILER_EVENT_SCOPE_TEXT_ON_CHANNEL(Name, Channel) \
504 TRACE_CPUPROFILER_EVENT_SCOPE_TEXT_ON_CHANNEL_CONDITIONAL(Name, Channel, true)
505
507
508// Make sure all thread data has reached the destination.
509// Note: Can be useful to call this before entering a wait condition that might take a while.
510#define TRACE_CPUPROFILER_EVENT_FLUSH() \
511 FCpuProfilerTrace::FlushThreadBuffer();
512
513#else // CPUPROFILERTRACE_ENABLED
514
515#define TRACE_CPUPROFILER_EVENT_DECLARE(DeclName)
516#define TRACE_CPUPROFILER_EVENT_SCOPE_USE(DeclName, NameStr, ScopeName, Condition)
517#define TRACE_CPUPROFILER_EVENT_SCOPE_USE_ON_CHANNEL(DeclName, NameStr, ScopeName, Channel, Condition)
518#define TRACE_CPUPROFILER_EVENT_MANUAL_START(EventNameStr)
519#define TRACE_CPUPROFILER_EVENT_MANUAL_END()
520#define TRACE_CPUPROFILER_EVENT_MANUAL_IS_ENABLED() false
521#define TRACE_CPUPROFILER_EVENT_SCOPE_STR(NameStr)
522#define TRACE_CPUPROFILER_EVENT_SCOPE_STR_CONDITIONAL(NameStr, Condition)
523#define TRACE_CPUPROFILER_EVENT_SCOPE_STR_ON_CHANNEL(NameStr, Channel)
524#define TRACE_CPUPROFILER_EVENT_SCOPE_STR_ON_CHANNEL_CONDITIONAL(NameStr, Channel, Condition)
525#define TRACE_CPUPROFILER_EVENT_SCOPE_ON_CHANNEL_STR(NameStr, Channel)
526#define TRACE_CPUPROFILER_EVENT_SCOPE_ON_CHANNEL_STR_CONDITIONAL(NameStr, Channel, Condition)
527#define TRACE_CPUPROFILER_EVENT_SCOPE_ON_CHANNEL_CONDITIONAL_STR(NameStr, Channel, Condition)
528#define TRACE_CPUPROFILER_EVENT_SCOPE(Name)
529#define TRACE_CPUPROFILER_EVENT_SCOPE_CONDITIONAL(Name, Condition)
530#define TRACE_CPUPROFILER_EVENT_SCOPE_ON_CHANNEL(Name, Channel)
531#define TRACE_CPUPROFILER_EVENT_SCOPE_ON_CHANNEL_CONDITIONAL(Name, Channel, Condition)
532#define TRACE_CPUPROFILER_EVENT_SCOPE_TEXT(Name)
533#define TRACE_CPUPROFILER_EVENT_SCOPE_TEXT_CONDITIONAL(Name, Condition)
534#define TRACE_CPUPROFILER_EVENT_SCOPE_TEXT_ON_CHANNEL(Name, Channel)
535#define TRACE_CPUPROFILER_EVENT_SCOPE_TEXT_ON_CHANNEL_CONDITIONAL(Name, Channel, Condition)
536#define TRACE_CPUPROFILER_EVENT_FLUSH()
537
538#endif // CPUPROFILERTRACE_ENABLED
#define FORCENOINLINE
Definition AndroidPlatform.h:142
#define FORCEINLINE
Definition AndroidPlatform.h:140
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::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_CHANNEL_EXTERN(ChannelName,...)
Definition Trace.h:448
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition NameTypes.h:617
Definition Array.h:670
Definition Channel.h:136