UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
TaskSyncManager.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
10
11#include "TaskSyncManager.generated.h"
12
13// NOTE: This header file is considered Experimental and will remain so until the release of 5.6. It will be split into multiple headers
14
15namespace UE::Tick
16{
17
19UENUM()
39
41UENUM()
58
62USTRUCT()
64{
66
67
68 UPROPERTY(EditDefaultsOnly, Category="Task")
69 FName RegisteredName;
70
72 FName SourceName;
73
75 UPROPERTY(EditDefaultsOnly, Category="Task")
77
79 UPROPERTY(EditDefaultsOnly, Category="Task")
81
83 UPROPERTY(EditDefaultsOnly, Category="Task")
84 TEnumAsByte<enum ETickingGroup> FirstPossibleTickGroup = TG_PrePhysics;
85
87 UPROPERTY(EditDefaultsOnly, Category="Task")
89
91 UPROPERTY(EditDefaultsOnly, Category="Task")
92 TArray<FName> PrerequisiteSyncGroups;
93
95 inline bool IsValid() const
96 {
97 return !RegisteredName.IsNone();
98 }
99
101 inline bool WasLoadedFromSettings() const
102 {
103 return SourceName.IsNone();
104 }
105};
106
108UCLASS(config = Engine, defaultconfig, meta = (DisplayName = "Task Synchronization"), MinimalAPI)
110{
112
113#if WITH_EDITOR
114 virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override;
115 virtual bool SupportsAutoRegistration() const override;
116#endif
117
118public:
120 UPROPERTY(config, EditAnywhere, Category = "Task Synchronization")
121 TArray<FSyncPointDescription> RegisteredSyncPoints;
122};
123
126
129{
131 Invalid,
132
134 Success,
135
136 // Error conditions TODO some of these are redundant
137
146
153
160};
161
191
197{
200
206
212
214 inline bool IsValid() const
215 {
217 }
218
220 inline bool WasSuccessful() const
221 {
223 }
224
226 inline operator bool() const
227 {
228 return WasSuccessful();
229 }
230
232 inline bool WasTaskCreatedForFrame() const
233 {
235 }
236
238 inline bool WasActivatedForFrame() const
239 {
241 }
242};
243
244
246struct FWorldContextId final
247{
248 // TODO Consider moving this concept into World.h
250
251 static constexpr FInternalId InvalidWorldContextId = -1;
252
254 static constexpr FInternalId DefaultWorldContextId = 0;
255
258
263
268
274
276 inline bool IsValid() const
277 {
279 }
280
281 inline bool operator==(const FWorldContextId& Other) const
282 {
283 return WorldId == Other.WorldId;
284 }
285
286 inline bool operator!=(const FWorldContextId& Other) const
287 {
288 return !(*this == Other);
289 }
290
292 {
293 return static_cast<uint32>(Context.WorldId);
294 }
295
297};
298
300struct FBatchContextId final
301{
302 // Internal type is sometimes used as an array index
304
305 static constexpr FInternalId InvalidBatch = -1;
306
311
316
318 inline bool IsValid() const
319 {
320 return BatchId > InvalidBatch;
321 }
322
323 inline bool operator==(const FBatchContextId& Other) const
324 {
325 return BatchId == Other.BatchId;
326 }
327
328 inline bool operator!=(const FBatchContextId& Other) const
329 {
330 return !(*this == Other);
331 }
332
334 {
335 return static_cast<uint32>(Context.BatchId);
336 }
337
339};
340
342struct FSyncPointId final
343{
344 // Internal type is sometimes used as an array index
346
347 static constexpr FInternalId InvalidSyncPoint = -1;
348
353
359
361 inline bool IsValid() const
362 {
363 return SyncId > InvalidSyncPoint;
364 }
365
368 {
369 return BatchContext;
370 }
371
372 inline bool operator==(const FSyncPointId& Other) const
373 {
374 return BatchContext == Other.BatchContext && SyncId == Other.SyncId;
375 }
376
377 inline bool operator!=(const FSyncPointId& Other) const
378 {
379 return !(*this == Other);
380 }
381
382 friend inline uint32 GetTypeHash(const FSyncPointId& SyncPoint)
383 {
384 return GetTypeHash(SyncPoint.BatchContext) + SyncPoint.SyncId;
385 }
386
389};
390
393{
395 Never,
396
398 Once,
399
402};
403
409{
412
415
416 // These handles can be moved but not copied
419
421 ENGINE_API bool IsValid() const;
422
428
430 ENGINE_API bool HasReservedWork() const;
431
433 ENGINE_API bool HasRequestedWork() const;
434
436 ENGINE_API bool HasWorkQueue() const;
437
443
449
452
455
461 ENGINE_API bool AbandonWork();
462
464 ENGINE_API bool Reset();
465
466private:
469
471 uint32 WorkIndex : 24 = 0;
472
474 static constexpr uint32 MaxWorkIndex = (2 << 24) - 1;
475
477 uint32 bWorkReserved : 1 = 0;
478
480 uint32 bWorkRequested : 1 = 0;
481
483 uint32 bHasWorkQueue : 1 = 0;
484
486 inline int32 GetIndex() const
487 {
488 return static_cast<int32>(WorkIndex);
489 }
490
492 inline void ResetInternal()
493 {
494 SyncPoint.Reset();
495 WorkIndex = 0;
496 bWorkReserved = false;
497 bWorkRequested = false;
498 bHasWorkQueue = false;
499 }
500
501 friend struct FActiveSyncPoint;
502 friend class FTaskSyncManager;
503};
504
510{
513
515 inline bool IsWorkExecuting() const
516 {
518 }
519
521 inline bool HasQueuedWork() const
522 {
523 return IsWorkExecuting() || QueuedWork.Num() > 0;
524 }
525
527 inline bool IsQueueOpen() const
528 {
529 return !IsWorkExecuting() && bSetAsOpen;
530 }
531
534
536 ENGINE_API bool AddWork(FWorkFunction&& Work);
537
539 ENGINE_API void ClearWork();
540
542 ENGINE_API void ExecuteWork();
543
545 ENGINE_API void SetDebugName(FName InDebugName, const FString& InDetailString = FString());
546
549
552
553protected:
554
555 // FTickFunction interface
556 ENGINE_API void ExecuteTick(float DeltaTime, ELevelTick TickType, ENamedThreads::Type CurrentThread, const FGraphEventRef& MyCompletionGraphEvent) override;
557 ENGINE_API FString DiagnosticMessage() override;
559
564
567
568 // Simple queue of work to execute, could be changed to a different type in the future
570};
571
572
574struct FActiveSyncPoint final : public TSharedFromThis<FActiveSyncPoint, ESPMode::ThreadSafe>, private FTickFunction
575{
577
579 inline const FSyncPointDescription& GetDescription() const { return SyncPointDescription; }
580
582 inline const FSyncPointId& GetSyncPointId() const { return SyncPointId; }
583
585 inline const FWorldContextId& GetWorldContextId() const { return WorldContextId; }
586
588 inline ESyncPointStatus GetFrameStatus() const { return FrameStatus; }
589
591 inline bool IsTickGroupWork() const { return !SyncPointId.IsValid(); }
592
595
598
601
604
607
610
613
614private:
615
617 struct FActiveSyncWork
618 {
619 union
620 {
622 uint32 StateValue;
623
624 struct
625 {
627 uint32 bHasActiveHandle : 1;
628
630 uint32 bWorkReserved : 1;
631
633 uint32 bWorkRequested : 1;
634
636 uint32 bReserveEveryFrame : 1;
637
639 uint32 bRequestEveryFrame : 1;
640
642 uint32 bCurrentlyExecuting : 1;
643
645 uint32 bAlreadyExecuted : 1;
646
648 uint32 bLateWorkRequested : 1;
649
651 uint32 bIsWorkQueueFunction : 1;
652
654 uint32 bAllocatedTickFunction : 1;
655 };
656 };
657
659 FTickFunction* TickFunction;
660
661 FActiveSyncWork()
662 : StateValue(0)
663 , TickFunction(nullptr)
664 {
665 }
666
667 ~FActiveSyncWork()
668 {
669 if (bAllocatedTickFunction && TickFunction)
670 {
671 delete TickFunction;
672 }
673 }
674
675 inline void SetTickFunction(FTickFunction* InTickFunction, bool bWasAllocatedInternally)
676 {
677 if (bAllocatedTickFunction && TickFunction)
678 {
679 delete TickFunction;
680 }
681 TickFunction = InTickFunction;
682 bAllocatedTickFunction = bWasAllocatedInternally;
683 }
684
685 inline void Reset()
686 {
687 SetTickFunction(nullptr, false);
688 StateValue = 0;
689 }
690
691 inline bool IsInitialized() const
692 {
693 return StateValue != 0;
694 }
695
696 FActiveSyncWork(const FActiveSyncWork&) = delete;
697 FActiveSyncWork& operator=(const FActiveSyncWork&) = delete;
698 };
699
701 struct FExecutingSyncWork
702 {
704 int32 ActiveWorkIndex;
705
707 FTickFunction* TickFunction;
708
709 FExecutingSyncWork(int32 InIndex, const FActiveSyncWork& InWork)
710 : ActiveWorkIndex(InIndex),
711 TickFunction(InWork.TickFunction)
712 {}
713
714 inline bool IsValid() const
715 {
716 return TickFunction != nullptr;
717 }
718
720 inline void Invalidate()
721 {
722 TickFunction = nullptr;
723 }
724 };
725
726 // FTickFunction interface
727 virtual void ExecuteTick(float DeltaTime, ELevelTick TickType, ENamedThreads::Type CurrentThread, const FGraphEventRef& MyCompletionGraphEvent) override;
728 virtual FString DiagnosticMessage() override;
729 virtual FName DiagnosticContext(bool bDetailed) override;
730 virtual bool DispatchManually() override;
731
733 void ExecuteFromGameThread(float DeltaTime, ELevelTick TickType);
734
736 void ResetWorkForFrame();
737
739 bool HandleFirstTickGroup();
740
742 bool IsReadyToProcessWork() const;
743
745 bool IsTooLateToAddWork(bool bWorkReserved) const;
746
748 bool GetWorkToExecute(float DeltaTime, ELevelTick TickType, ENamedThreads::Type CurrentThread, const FGraphEventRef& MyCompletionGraphEvent);
749
751 void CancelRequestedWork(int32 ActiveWorkIndex, FActiveSyncWork& CurrentWork);
752
754 uint32 AllocateActiveWork();
755
757 void DispatchWorkTask(FGraphEventRef* TaskToExtend = nullptr);
758
760 FSyncPointDescription SyncPointDescription;
761
763 FSyncPointId SyncPointId;
764
766 FWorldContextId WorldContextId;
767
769 ESyncPointStatus FrameStatus;
770
772 FGraphEventRef ReactivationEvent;
773
776
778 TArray<FActiveSyncWork> ActiveWork;
779
781 TArray<FExecutingSyncWork> ExecutingWork;
782
783 friend class FTaskSyncManager;
785};
786
787
793{
794public:
797
798
799 // Thread safe accessors, safe at any time
800
803
806
813
815 ENGINE_API FSyncPointId FindSyncPoint(FWorldContextId WorldContext, FName RegisteredName);
816
817
818 // These functions are thread safe and can be called by worker or game threads during a tick, if the sync point is in the proper state
819
825
828
831
837
843
850 ENGINE_API FGraphEventRef CreateManualTickTask(FWorldContextId WorldContext, FTickFunction* TickFunction, float DeltaTime = -1.0f, ELevelTick TickType = LEVELTICK_All);
851
852
853 // Game thread-only functions, in general these will not affect the current frame
854
857
860
863
865 ENGINE_API bool UnregisterSyncPoint(FName RegisteredName, FName SourceName);
866
869
872
875
878
881
883 ENGINE_API void EndTickGroup(const UWorld* InWorld, ETickingGroup TickGroup);
884
886 ENGINE_API void EndFrame(const UWorld* InWorld);
887
890private:
891
892 struct FTemporaryWorkRequest
893 {
895 : RequestingSyncPoint(InRequestingSyncPoint)
896 , RequestingHandle(InRequestingHandle)
897 {}
898
899 FActiveSyncPoint* RequestingSyncPoint;
900 int32 RequestingHandle;
901 FActiveSyncWorkHandle WorkHandle;
902 };
903
904 struct FBatchData
905 {
907 FBatchContextId BatchContext;
908
910 FWorldContextId WorldContext;
911
914
917
919 TArray<FTemporaryWorkRequest> TemporaryWorkRequests;
920
921 inline void Reset()
922 {
923 SyncPointData.Reset();
924 TickGroupWork.Reset();
925 TemporaryWorkRequests.Reset();
926 BatchContext = FBatchContextId();
927 WorldContext = FWorldContextId();
928 }
929 };
930
931 struct FRegisteredSyncPointData
932 {
934 FSyncPointDescription RegisteredPoint;
935 };
936
937 // Store as a simple array for fast access, there are a small number of active batches
938 TArray<FBatchData> BatchList;
939
943
945 mutable FTransactionallySafeCriticalSection ManagerLock;
946
948 const UWorld* CurrentTickWorld = nullptr;
949 float CurrentDeltaTime = 0.0f;
950 ELevelTick CurrentTickType = LEVELTICK_All;
951 ETickingGroup CurrentTickGroup = ETickingGroup::TG_MAX;
952
954 inline bool IsTicking() const { return CurrentTickWorld != nullptr; }
955
957 FTaskSyncResult FindActiveSyncPoint(FSyncPointId SyncPoint, TSharedPtr<FActiveSyncPoint>& OutData);
958
960 bool HandleLateWorkRequest(FActiveSyncPoint* RequestedSyncPoint, int32 RequestingHandle, FTickFunction* TickFunction);
961
963 void CancelTemporaryWorkRequest(FActiveSyncPoint* RequestedSyncPoint, int32 RequestingHandle);
964
965 void RegisterSyncPointInternal(const FSyncPointDescription& InDescription);
966 void OnWorldContextRemove(FWorldContext& InWorldContext);
967 void InitializeBatchForFrame(FBatchData& BatchData, ULevel* PersistentLevel);
968 FActiveSyncPoint* GetOrCreateSyncPoint(FBatchData& BatchData, FRegisteredSyncPointData& SyncData);
969 FActiveSyncPoint* GetOrCreateTickGroupWork(FBatchData& BatchData, ETickingGroup TickGroup);
970
971 friend FActiveSyncPoint;
972};
973
974} // namespace UE::Task
@ INDEX_NONE
Definition CoreMiscDefines.h:150
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
ETickingGroup
Definition EngineBaseTypes.h:84
@ TG_MAX
Definition EngineBaseTypes.h:109
ELevelTick
Definition EngineBaseTypes.h:70
@ LEVELTICK_All
Definition EngineBaseTypes.h:76
const bool
Definition NetworkReplayStreaming.h:178
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UCLASS(...)
Definition ObjectMacros.h:776
#define UENUM(...)
Definition ObjectMacros.h:749
#define USTRUCT(...)
Definition ObjectMacros.h:746
UE_FORCEINLINE_HINT bool IsValid(const UObject *Test)
Definition Object.h:1875
::FCriticalSection FTransactionallySafeCriticalSection
Definition TransactionallySafeCriticalSection.h:16
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Engine.Build.cs:7
Definition NameTypes.h:617
FORCEINLINE bool IsNone() const
Definition NameTypes.h:827
Definition Array.h:670
void Reset(SizeType NewSize=0)
Definition Array.h:2246
Definition EnumAsByte.h:22
Definition UnrealString.h.inl:34
Definition SharedPointer.h:1640
Definition SharedPointer.h:692
UE_FORCEINLINE_HINT void Reset()
Definition SharedPointer.h:1120
Definition FunctionFwd.h:19
Definition DeveloperSettings.h:24
Definition TaskSyncManager.h:793
ENGINE_API FBatchContextId FindDefaultBatch(FWorldContextId WorldContext) const
Definition TaskSyncManager.cpp:1431
static ENGINE_API FTaskSyncManager * Get()
Definition TaskSyncManager.cpp:941
ENGINE_API FWorldContextId GetCurrentWorldContext() const
Definition TaskSyncManager.cpp:1420
ENGINE_API FTaskSyncResult GetTaskGraphEvent(FSyncPointId SyncPoint, FGraphEventRef &OutEventRef)
Definition TaskSyncManager.cpp:1517
ENGINE_API FSyncPointId FindSyncPoint(FBatchContextId Batch, FName RegisteredName)
Definition TaskSyncManager.cpp:1477
ENGINE_API bool RegisterNewSyncPoint(const FSyncPointDescription &NewDescription)
Definition TaskSyncManager.cpp:1057
ENGINE_API void StartTickGroup(const UWorld *InWorld, ETickingGroup TickGroup, TArray< FTickFunction * > &TicksToManualDispatch)
Definition TaskSyncManager.cpp:1320
ENGINE_API bool UnregisterSyncPoint(FName RegisteredName, FName SourceName)
Definition TaskSyncManager.cpp:1085
ENGINE_API FTaskSyncResult TriggerSyncPointAfterEvent(FSyncPointId SyncPoint, FGraphEventRef EventToWairFor)
Definition TaskSyncManager.cpp:1582
ENGINE_API FTaskSyncResult RegisterTickGroupWorkHandle(FWorldContextId WorldContext, ETickingGroup TickGroup, FActiveSyncWorkHandle &OutWorkHandle)
Definition TaskSyncManager.cpp:1653
ENGINE_API FGraphEventRef CreateManualTickTask(FWorldContextId WorldContext, FTickFunction *TickFunction, float DeltaTime=-1.0f, ELevelTick TickType=LEVELTICK_All)
Definition TaskSyncManager.cpp:1758
ENGINE_API FBatchContextId CreateNewBatch(FWorldContextId WorldContext)
Definition TaskSyncManager.cpp:1450
ENGINE_API void StartFrame(const UWorld *InWorld, float InDeltaSeconds, ELevelTick InTickType)
Definition TaskSyncManager.cpp:1129
ENGINE_API void ReloadRegisteredData()
Definition TaskSyncManager.cpp:993
ENGINE_API ~FTaskSyncManager()
Definition TaskSyncManager.cpp:973
ENGINE_API FTaskSyncManager()
Definition TaskSyncManager.cpp:963
ENGINE_API FTaskSyncResult TriggerSyncPoint(FSyncPointId SyncPoint)
Definition TaskSyncManager.cpp:1545
ENGINE_API bool GetSyncPointDescription(FName RegisteredName, FSyncPointDescription &OutDescription) const
Definition TaskSyncManager.cpp:1041
ENGINE_API FTickFunction * GetTickFunctionForSyncPoint(FSyncPointId SyncPoint)
Definition TaskSyncManager.cpp:1497
ENGINE_API FTaskSyncResult RegisterWorkHandle(FSyncPointId SyncPoint, FActiveSyncWorkHandle &OutWorkHandle)
Definition TaskSyncManager.cpp:1628
ENGINE_API void ReleaseWorldContext(FWorldContextId WorldContext)
Definition TaskSyncManager.cpp:1397
ENGINE_API void EndTickGroup(const UWorld *InWorld, ETickingGroup TickGroup)
Definition TaskSyncManager.cpp:1356
Definition TaskSyncManager.h:110
Definition Level.h:423
Definition World.h:918
bool IsInitialized(FD3D12ResidencyHandle &Object)
Definition D3D12Residency.h:67
Type
Definition TaskGraphInterfaces.h:57
Definition TaskSyncManager.h:16
ESyncWorkRepetition
Definition TaskSyncManager.h:393
ESyncOperationResult
Definition TaskSyncManager.h:129
ESyncPointEventType
Definition TaskSyncManager.h:21
ESyncPointStatus
Definition TaskSyncManager.h:164
ESyncPointActivationRules
Definition TaskSyncManager.h:43
Definition UnrealType.h:6865
Definition EngineBaseTypes.h:173
Definition Engine.h:334
Definition TaskSyncManager.h:575
const FSyncPointId & GetSyncPointId() const
Definition TaskSyncManager.h:582
const FSyncPointDescription & GetDescription() const
Definition TaskSyncManager.h:579
ENGINE_API bool ReserveFutureWork(FActiveSyncWorkHandle &Handle, ESyncWorkRepetition Repeat)
Definition TaskSyncManager.cpp:619
bool IsTickGroupWork() const
Definition TaskSyncManager.h:591
ENGINE_API bool QueueWorkFunction(FActiveSyncWorkHandle &Handle, FWorkFunction &&WorkFunction)
Definition TaskSyncManager.cpp:717
ENGINE_API FActiveSyncWorkHandle RegisterWorkHandle()
Definition TaskSyncManager.cpp:599
ENGINE_API bool SendQueuedWork(FActiveSyncWorkHandle &Handle, FGraphEventRef *TaskToExtend=nullptr)
Definition TaskSyncManager.cpp:755
ENGINE_API bool RequestWork(FActiveSyncWorkHandle &Handle, FTickFunction *WorkFunction, ESyncWorkRepetition Repeat)
Definition TaskSyncManager.cpp:661
ENGINE_API FActiveSyncPoint()
Definition TaskSyncManager.cpp:320
ESyncPointStatus GetFrameStatus() const
Definition TaskSyncManager.h:588
ENGINE_API bool ResetWorkHandle(FActiveSyncWorkHandle &Handle)
Definition TaskSyncManager.cpp:844
const FWorldContextId & GetWorldContextId() const
Definition TaskSyncManager.h:585
Definition TaskSyncManager.h:409
FActiveSyncWorkHandle & operator=(const FActiveSyncWorkHandle &)=delete
FActiveSyncWorkHandle & operator=(FActiveSyncWorkHandle &&)=default
FActiveSyncWorkHandle(FActiveSyncWorkHandle &&)=default
FActiveSyncWorkHandle(const FActiveSyncWorkHandle &)=delete
ENGINE_API bool QueueWorkFunction(FWorkFunction &&WorkFunction)
Definition TaskSyncManager.cpp:159
ENGINE_API bool SendQueuedWork(FGraphEventRef *TaskToExtend=nullptr)
Definition TaskSyncManager.cpp:168
ENGINE_API bool RequestWork(FTickFunction *FunctionToExecute, ESyncWorkRepetition Repeat)
Definition TaskSyncManager.cpp:149
ENGINE_API ~FActiveSyncWorkHandle()
Definition TaskSyncManager.cpp:83
ENGINE_API bool Reset()
Definition TaskSyncManager.cpp:131
ENGINE_API bool AbandonWork()
Definition TaskSyncManager.cpp:122
ENGINE_API bool HasWorkQueue() const
Definition TaskSyncManager.cpp:117
ENGINE_API bool ReserveFutureWork(ESyncWorkRepetition Repeat)
Definition TaskSyncManager.cpp:140
ENGINE_API bool HasReservedWork() const
Definition TaskSyncManager.cpp:107
ENGINE_API bool IsValid() const
Definition TaskSyncManager.cpp:88
ENGINE_API FTickFunction * GetDependencyTickFunction()
Definition TaskSyncManager.cpp:93
ENGINE_API bool HasRequestedWork() const
Definition TaskSyncManager.cpp:112
Definition TaskSyncManager.h:301
int32 FInternalId
Definition TaskSyncManager.h:303
FBatchContextId()
Definition TaskSyncManager.h:308
FBatchContextId(FInternalId InBatchId)
Definition TaskSyncManager.h:313
bool IsValid() const
Definition TaskSyncManager.h:318
static constexpr FInternalId InvalidBatch
Definition TaskSyncManager.h:305
FInternalId BatchId
Definition TaskSyncManager.h:338
bool operator!=(const FBatchContextId &Other) const
Definition TaskSyncManager.h:328
bool operator==(const FBatchContextId &Other) const
Definition TaskSyncManager.h:323
friend uint32 GetTypeHash(const FBatchContextId &Context)
Definition TaskSyncManager.h:333
Definition TaskSyncManager.h:64
bool WasLoadedFromSettings() const
Definition TaskSyncManager.h:101
Definition TaskSyncManager.h:343
static constexpr FInternalId InvalidSyncPoint
Definition TaskSyncManager.h:347
bool operator!=(const FSyncPointId &Other) const
Definition TaskSyncManager.h:377
friend uint32 GetTypeHash(const FSyncPointId &SyncPoint)
Definition TaskSyncManager.h:382
FSyncPointId(FInternalId InSyncId, FBatchContextId InBatchContext)
Definition TaskSyncManager.h:355
FInternalId SyncId
Definition TaskSyncManager.h:387
bool IsValid() const
Definition TaskSyncManager.h:361
int32 FInternalId
Definition TaskSyncManager.h:345
bool operator==(const FSyncPointId &Other) const
Definition TaskSyncManager.h:372
FBatchContextId BatchContext
Definition TaskSyncManager.h:388
FBatchContextId GetBatchContext() const
Definition TaskSyncManager.h:367
FSyncPointId()
Definition TaskSyncManager.h:350
Definition TaskSyncManager.h:197
bool WasSuccessful() const
Definition TaskSyncManager.h:220
bool WasTaskCreatedForFrame() const
Definition TaskSyncManager.h:232
bool IsValid() const
Definition TaskSyncManager.h:214
FTaskSyncResult()
Definition TaskSyncManager.h:202
FTaskSyncResult(ESyncOperationResult Result, ESyncPointStatus Status=ESyncPointStatus::Unknown)
Definition TaskSyncManager.h:208
ESyncOperationResult OperationResult
Definition TaskSyncManager.h:198
ESyncPointStatus SyncStatus
Definition TaskSyncManager.h:199
bool WasActivatedForFrame() const
Definition TaskSyncManager.h:238
Definition TaskSyncManager.h:510
FName DebugName
Definition TaskSyncManager.h:565
ENGINE_API void SetDebugName(FName InDebugName, const FString &InDetailString=FString())
Definition TaskSyncManager.cpp:243
ENGINE_API void ClearWork()
Definition TaskSyncManager.cpp:214
bool IsWorkExecuting() const
Definition TaskSyncManager.h:515
ENGINE_API bool AddWork(FWorkFunction &&Work)
Definition TaskSyncManager.cpp:202
virtual ENGINE_API ~FWorkQueueTickFunction()
Definition TaskSyncManager.cpp:192
FString DebugDetailString
Definition TaskSyncManager.h:566
bool bOpenAfterExecute
Definition TaskSyncManager.h:562
bool HasQueuedWork() const
Definition TaskSyncManager.h:521
ENGINE_API FString DiagnosticMessage() override
Definition TaskSyncManager.cpp:254
ENGINE_API FWorkQueueTickFunction()
Definition TaskSyncManager.cpp:177
int32 WorkExecutionIndex
Definition TaskSyncManager.h:563
ENGINE_API void ExecuteWork()
Definition TaskSyncManager.cpp:220
bool IsQueueOpen() const
Definition TaskSyncManager.h:527
ENGINE_API void SetClearAfterExecute(bool bShouldClear)
Definition TaskSyncManager.cpp:269
ENGINE_API void SetQueueOpen(bool bShouldBeOpen)
Definition TaskSyncManager.cpp:197
ENGINE_API FName DiagnosticContext(bool bDetailed) override
Definition TaskSyncManager.cpp:259
ENGINE_API void SetOpenAfterExecute(bool bShouldOpen)
Definition TaskSyncManager.cpp:275
bool bSetAsOpen
Definition TaskSyncManager.h:560
bool bClearAfterExecute
Definition TaskSyncManager.h:561
ENGINE_API void ExecuteTick(float DeltaTime, ELevelTick TickType, ENamedThreads::Type CurrentThread, const FGraphEventRef &MyCompletionGraphEvent) override
Definition TaskSyncManager.cpp:249
TArray< FWorkFunction > QueuedWork
Definition TaskSyncManager.h:569
Definition TaskSyncManager.h:247
int32 FInternalId
Definition TaskSyncManager.h:249
bool IsValid() const
Definition TaskSyncManager.h:276
bool operator==(const FWorldContextId &Other) const
Definition TaskSyncManager.h:281
static constexpr FInternalId DefaultWorldContextId
Definition TaskSyncManager.h:254
static ENGINE_API FWorldContextId GetContextIdForWorld(const UWorld *World)
Definition TaskSyncManager.cpp:37
static constexpr FInternalId InvalidWorldContextId
Definition TaskSyncManager.h:251
friend uint32 GetTypeHash(const FWorldContextId &Context)
Definition TaskSyncManager.h:291
FWorldContextId(const UWorld *InWorld)
Definition TaskSyncManager.h:270
FInternalId WorldId
Definition TaskSyncManager.h:296
FWorldContextId()
Definition TaskSyncManager.h:260
bool operator!=(const FWorldContextId &Other) const
Definition TaskSyncManager.h:286
FWorldContextId(FInternalId InWorldId)
Definition TaskSyncManager.h:265