12#include "Containers/Array.h"
78 static void*
operator new(
size_t Size);
79 static void operator delete(
void* Ptr);
105 static constexpr uint32 WorkerSpinCycles = 53;
155 CORE_API void IncrementOversubscription();
156 CORE_API void DecrementOversubscription();
157 template<
typename QueueType, FTask* (QueueType::*DequeueFunction)(
bool),
bool bIsStandbyWorker>
162 Private::FWaitingQueue WaitingQueue[2] = { { WorkerEvents, OversubscriptionLimitReachedEvent }, { WorkerEvents, OversubscriptionLimitReachedEvent } };
169 std::atomic_uint ActiveWorkers { 0 };
170 std::atomic_uint NextWorkerId { 0 };
171 std::atomic<int32> ForegroundCreationIndex{ 0 };
172 std::atomic<int32> BackgroundCreationIndex{ 0 };
173 uint64 WorkerAffinity = 0;
174 uint64 BackgroundAffinity = 0;
177 std::atomic_bool TemporaryShutdown{
false };
191 if(
Task.TryPrepareLaunch())
201 return ActiveWorkers.load(std::memory_order_relaxed);
207 return WorkerLocalQueues.Num();
226#if UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_6
#define UE_NONCOPYABLE(TypeName)
Definition CoreMiscDefines.h:457
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
const bool
Definition NetworkReplayStreaming.h:178
uint32 Size
Definition VulkanMemory.cpp:4034
EForkable
Definition Thread.h:27
@ NonForkable
Definition Thread.h:27
Definition Scheduler.cpp:61
Definition Scheduler.h:41
Private::TLocalQueueRegistry<> FQueueRegistry
Definition Scheduler.h:45
EWorkerType
Definition Scheduler.h:49
CORE_API bool HasPendingWakeUp() const
Definition Scheduler.cpp:485
static FTlsValues & GetTlsValuesRef()
Definition Scheduler.cpp:171
CORE_API bool IsWorkerThread() const
Definition Scheduler.cpp:662
Definition Scheduler.h:103
EThreadPriority GetBackgroundPriority() const
Definition Scheduler.h:133
CORE_API void RestartWorkers(uint32 NumForegroundWorkers=0, uint32 NumBackgroundWorkers=0, FThread::EForkable IsForkable=FThread::NonForkable, EThreadPriority WorkerPriority=EThreadPriority::TPri_Normal, EThreadPriority BackgroundPriority=EThreadPriority::TPri_BelowNormal, uint64 InWorkerAffinity=0, uint64 InBackgroundAffinity=0)
Definition Scheduler.cpp:511
friend class FOversubscriptionScope
Definition Scheduler.h:160
CORE_API void StopWorkers(bool DrainGlobalQueue=true)
Definition Scheduler.cpp:433
bool TryLaunch(FTask &Task, EQueuePreference QueuePreference=EQueuePreference::DefaultPreference, bool bWakeUpWorker=true)
Definition Scheduler.h:189
CORE_API void StartWorkers(uint32 NumForegroundWorkers=0, uint32 NumBackgroundWorkers=0, FThread::EForkable IsForkable=FThread::NonForkable, EThreadPriority InWorkerPriority=EThreadPriority::TPri_Normal, EThreadPriority InBackgroundPriority=EThreadPriority::TPri_BelowNormal, uint64 InWorkerAffinity=0, uint64 InBackgroundAffinity=0)
Definition Scheduler.cpp:225
CORE_API bool IsOversubscriptionLimitReached(ETaskPriority TaskPriority) const
Definition Scheduler.cpp:365
uint32 GetNumWorkers() const
Definition Scheduler.h:199
uint32 GetMaxNumWorkers() const
Definition Scheduler.h:205
CORE_API FOversubscriptionLimitReached & GetOversubscriptionLimitReachedEvent()
Definition Scheduler.cpp:383
static FScheduler & Get()
Definition Scheduler.h:215
~FScheduler()
Definition Scheduler.h:220
EThreadPriority GetWorkerPriority() const
Definition Scheduler.h:130
Definition TaskShared.h:20
Definition WaitingQueue.h:43
int32 Notify(int32 Count=1)
Definition WaitingQueue.h:94
Definition LocalQueue.h:176
Definition LocalQueue.h:157
Definition TaskDelegate.h:40
Definition UniquePtr.h:107
Definition Scheduler.cpp:25
EQueuePreference
Definition Scheduler.h:34
ETaskPriority
Definition Task.h:18
UE_FORCEINLINE_HINT bool TryLaunch(FTask &Task, EQueuePreference QueuePreference=EQueuePreference::DefaultPreference, bool bWakeUpWorker=true)
Definition Scheduler.h:181
FPThreadsRecursiveMutex FPlatformRecursiveMutex
Definition AndroidPlatformMutex.h:12
Definition Scheduler.h:83
CORE_API FTlsValuesHolder()
Definition Scheduler.cpp:94
FTlsValues * TlsValues
Definition Scheduler.h:87
CORE_API ~FTlsValuesHolder()
Definition Scheduler.cpp:114
Definition Scheduler.h:56
bool bIsStandbyWorker
Definition Scheduler.h:61
EWorkerType WorkerType
Definition Scheduler.h:59
std::atomic< bool > bPendingWakeUp
Definition Scheduler.h:60
void SetStandbyWorker(bool bInIsStandbyWorker)
Definition Scheduler.h:73
bool IsBackgroundWorker()
Definition Scheduler.h:63
FLocalQueueType * LocalQueue
Definition Scheduler.h:58
bool IsStandbyWorker()
Definition Scheduler.h:68
FSchedulerTls * ActiveScheduler
Definition Scheduler.h:57
Definition WaitingQueue.h:34