177 #if defined(JPH_EXTERNAL_PROFILE) || defined(JPH_PROFILE_ENABLED)
181 mJobSystem(inJobSystem),
182 mJobFunction(inJobFunction),
183 mNumDependencies(inNumDependencies)
194 mReferenceCount.fetch_add(1, memory_order_relaxed);
199 if (mReferenceCount.fetch_sub(1, memory_order_release) == 1)
202 atomic_thread_fence(memory_order_acquire);
221 intptr_t barrier = 0;
222 if (mBarrier.compare_exchange_strong(barrier,
reinterpret_cast<intptr_t
>(inBarrier), memory_order_relaxed))
233 if (!mNumDependencies.compare_exchange_strong(state,
cExecutingState, memory_order_acquire))
243 intptr_t barrier = mBarrier.load(memory_order_relaxed);
246 if (mBarrier.compare_exchange_weak(barrier,
cBarrierDoneState, memory_order_relaxed))
253 mNumDependencies.compare_exchange_strong(state,
cDoneState, memory_order_relaxed);
258 reinterpret_cast<Barrier *
>(barrier)->OnJobFinished(
this);
264 inline bool CanBeExecuted()
const {
return mNumDependencies.load(memory_order_relaxed) == 0; }
267 inline bool IsDone()
const {
return mNumDependencies.load(memory_order_relaxed) ==
cDoneState; }
275 #if defined(JPH_EXTERNAL_PROFILE) || defined(JPH_PROFILE_ENABLED)
276 const char * mJobName;
280 atomic<intptr_t> mBarrier = 0;
282 atomic<uint32> mReferenceCount = 0;
283 atomic<uint32> mNumDependencies;
uint32_t uint32
Definition Core.h:312
unsigned int uint
Definition Core.h:309
#define JPH_NAMESPACE_END
Definition Core.h:240
#define JPH_NAMESPACE_BEGIN
Definition Core.h:234
#define JPH_ASSERT(...)
Definition IssueReporting.h:33
#define JPH_OVERRIDE_NEW_DELETE
Macro to override the new and delete functions.
Definition Memory.h:29
#define JPH_PROFILE(...)
Definition Profiler.h:233
Class that holds an RGBA color with 8-bits per component.
Definition Color.h:16
uint32 GetUInt32() const
Convert to uint32.
Definition Color.h:30
A job barrier keeps track of a number of jobs and allows waiting until they are all completed.
Definition JobSystem.h:123
virtual ~Barrier()=default
Destructor, you should call JobSystem::DestroyBarrier instead of destructing this object directly.
virtual void OnJobFinished(Job *inJob)=0
Called by a Job to mark that it is finished.
virtual void AddJobs(const JobHandle *inHandles, uint inNumHandles)=0
virtual JPH_OVERRIDE_NEW_DELETE void AddJob(const JobHandle &inJob)=0
Definition JobSystem.h:80
JobHandle()=default
Constructor.
JobHandle(Job *inJob)
Constructor, only to be used by JobSystem.
Definition JobSystem.h:88
static void sRemoveDependencies(JobHandle *inHandles, uint inNumHandles, int inCount=1)
Remove a dependency from a batch of jobs at once, this can be more efficient than removing them one b...
Definition JobSystem.inl:28
void RemoveDependency(int inCount=1) const
Definition JobSystem.h:105
JobHandle(JobHandle &&inHandle) noexcept
Definition JobSystem.h:85
bool IsDone() const
Check if this job has finished executing.
Definition JobSystem.h:98
static void sRemoveDependencies(StaticArray< JobHandle, N > &inHandles, int inCount=1)
Helper function to remove dependencies on a static array of job handles.
Definition JobSystem.h:112
bool IsValid() const
Check if this handle contains a job.
Definition JobSystem.h:95
JobHandle(const JobHandle &inHandle)=default
JobHandle & operator=(const JobHandle &inHandle)=default
Assignment.
void AddDependency(int inCount=1) const
Add to the dependency counter.
Definition JobSystem.h:101
A class that contains information for a single unit of work.
Definition JobSystem.h:171
static constexpr intptr_t cBarrierDoneState
Value to use when the barrier has been triggered.
Definition JobSystem.h:272
void Release()
Definition JobSystem.h:196
JPH_OVERRIDE_NEW_DELETE Job(const char *inJobName, ColorArg inColor, JobSystem *inJobSystem, const JobFunction &inJobFunction, uint32 inNumDependencies)
Constructor.
Definition JobSystem.h:176
uint32 Execute()
Run the job function, returns the number of dependencies that this job still has or cExecutingState o...
Definition JobSystem.h:229
bool RemoveDependency(int inCount)
Definition JobSystem.inl:13
void AddDependency(int inCount)
Add to the dependency counter.
Definition JobSystem.inl:7
bool SetBarrier(Barrier *inBarrier)
Set the job barrier that this job belongs to and returns false if this was not possible because the j...
Definition JobSystem.h:219
static constexpr uint32 cDoneState
Value of mNumDependencies when job is done executing.
Definition JobSystem.h:270
JobSystem * GetJobSystem()
Get the jobs system to which this job belongs.
Definition JobSystem.h:188
bool CanBeExecuted() const
Test if the job can be executed.
Definition JobSystem.h:264
bool IsDone() const
Test if the job finished executing.
Definition JobSystem.h:267
void AddRef()
Add or release a reference to this object.
Definition JobSystem.h:191
static constexpr uint32 cExecutingState
Value of mNumDependencies when job is executing.
Definition JobSystem.h:269
void RemoveDependencyAndQueue(int inCount)
Definition JobSystem.inl:22
Definition JobSystem.h:70
virtual JobHandle CreateJob(const char *inName, ColorArg inColor, const JobFunction &inJobFunction, uint32 inNumDependencies=0)=0
virtual Barrier * CreateBarrier()=0
Create a new barrier, used to wait on jobs.
virtual void WaitForJobs(Barrier *inBarrier)=0
Wait for a set of jobs to be finished, note that only 1 thread can be waiting on a barrier at a time.
virtual void DestroyBarrier(Barrier *inBarrier)=0
Destroy a barrier when it is no longer used. The barrier should be empty at this point.
virtual void QueueJobs(Job **inJobs, uint inNumJobs)=0
Adds a number of jobs at once to the job queue.
virtual int GetMaxConcurrency() const =0
Get maximum number of concurrently executing jobs.
virtual void FreeJob(Job *inJob)=0
Frees a job.
virtual ~JobSystem()=default
Destructor.
function< void()> JobFunction
Main function of the job.
Definition JobSystem.h:147
virtual void QueueJob(Job *inJob)=0
Adds a job to the job queue.
Class that makes another class non-copyable. Usage: Inherit from NonCopyable.
Definition NonCopyable.h:11
Definition Reference.h:101
Job * GetPtr() const
Get pointer.
Definition Reference.h:131
Simple variable length array backed by a fixed size buffer.
Definition StaticArray.h:12
const T * data() const
Definition StaticArray.h:136
size_type size() const
Returns amount of elements in the array.
Definition StaticArray.h:87