11#include "TaskSyncManager.generated.h"
68 UPROPERTY(EditDefaultsOnly, Category=
"Task")
97 return !RegisteredName.
IsNone();
103 return SourceName.IsNone();
108UCLASS(config =
Engine, defaultconfig, meta = (DisplayName =
"Task Synchronization"), MinimalAPI)
120 UPROPERTY(config, EditAnywhere, Category =
"Task Synchronization")
288 return !(*
this ==
Other);
330 return !(*
this ==
Other);
379 return !(*
this ==
Other);
471 uint32 WorkIndex : 24 = 0;
474 static constexpr uint32 MaxWorkIndex = (2 << 24) - 1;
477 uint32 bWorkReserved : 1 = 0;
480 uint32 bWorkRequested : 1 = 0;
483 uint32 bHasWorkQueue : 1 = 0;
486 inline int32 GetIndex()
const
488 return static_cast<int32>(WorkIndex);
492 inline void ResetInternal()
496 bWorkReserved =
false;
497 bWorkRequested =
false;
498 bHasWorkQueue =
false;
617 struct FActiveSyncWork
627 uint32 bHasActiveHandle : 1;
633 uint32 bWorkRequested : 1;
636 uint32 bReserveEveryFrame : 1;
639 uint32 bRequestEveryFrame : 1;
642 uint32 bCurrentlyExecuting : 1;
645 uint32 bAlreadyExecuted : 1;
648 uint32 bLateWorkRequested : 1;
651 uint32 bIsWorkQueueFunction : 1;
654 uint32 bAllocatedTickFunction : 1;
663 , TickFunction(nullptr)
669 if (bAllocatedTickFunction && TickFunction)
677 if (bAllocatedTickFunction && TickFunction)
687 SetTickFunction(
nullptr,
false);
693 return StateValue != 0;
696 FActiveSyncWork(
const FActiveSyncWork&) =
delete;
697 FActiveSyncWork& operator=(
const FActiveSyncWork&) =
delete;
701 struct FExecutingSyncWork
704 int32 ActiveWorkIndex;
711 TickFunction(
InWork.TickFunction)
716 return TickFunction !=
nullptr;
722 TickFunction =
nullptr;
728 virtual FString DiagnosticMessage()
override;
730 virtual bool DispatchManually()
override;
733 void ExecuteFromGameThread(
float DeltaTime,
ELevelTick TickType);
736 void ResetWorkForFrame();
739 bool HandleFirstTickGroup();
742 bool IsReadyToProcessWork()
const;
745 bool IsTooLateToAddWork(
bool bWorkReserved)
const;
751 void CancelRequestedWork(
int32 ActiveWorkIndex, FActiveSyncWork&
CurrentWork);
754 uint32 AllocateActiveWork();
760 FSyncPointDescription SyncPointDescription;
763 FSyncPointId SyncPointId;
766 FWorldContextId WorldContextId;
892 struct FTemporaryWorkRequest
900 int32 RequestingHandle;
923 SyncPointData.Reset();
924 TickGroupWork.
Reset();
925 TemporaryWorkRequests.
Reset();
931 struct FRegisteredSyncPointData
948 const UWorld* CurrentTickWorld =
nullptr;
949 float CurrentDeltaTime = 0.0f;
954 inline bool IsTicking()
const {
return CurrentTickWorld !=
nullptr; }
967 void InitializeBatchForFrame(FBatchData& BatchData,
ULevel* PersistentLevel);
@ INDEX_NONE
Definition CoreMiscDefines.h:150
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
Definition Engine.Build.cs:7
Definition NameTypes.h:617
FORCEINLINE bool IsNone() const
Definition NameTypes.h:827
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
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
@ ActivationRulesIncorrect
@ SyncPointStatusIncorrect
ESyncPointEventType
Definition TaskSyncManager.h:21
@ WorkerThreadTask_HighPriority
@ GameThreadTask_HighPriority
ESyncPointStatus
Definition TaskSyncManager.h:164
@ DispatchWaitingForTrigger
ESyncPointActivationRules
Definition TaskSyncManager.h:43
Definition UnrealType.h:6865
Definition EngineBaseTypes.h:173
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
FActiveSyncWorkHandle()=default
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