7 #include "SDL_thread.h"
14 static const uint32_t MAX_THREADS = 64;
51 bool HasJob()
const {
return m_job !=
nullptr; }
64 static Uint64 s_nextId;
91 const Handle *GetHandle()
const {
return m_handle; }
92 void SetHandle(Handle *handle) { m_handle = handle; }
93 void ClearHandle() { m_handle =
nullptr; }
170 SDL_mutex *GetQueueDestroyingLock();
171 void SetQueueDestroyed();
174 static int Trampoline(
void *);
180 SDL_mutex *m_jobLock;
181 SDL_mutex *m_queueDestroyingLock;
183 SDL_Thread *m_threadId;
186 std::string m_threadName;
187 bool m_queueDestroyed;
191 void Finish(
Job *job,
const uint8_t threadIdx);
193 std::deque<Job *> m_queue;
194 SDL_mutex *m_queueLock;
195 SDL_cond *m_queueWaitCond;
197 std::deque<Job *> m_finished[MAX_THREADS];
198 SDL_mutex *m_finishedLock[MAX_THREADS];
200 std::vector<JobRunner *> m_runners;
202 std::vector<Job *> m_finishedScratch;
233 Uint32
RunJobs(Uint32 count = 1);
236 std::deque<Job *> m_queue;
237 std::deque<Job *> m_finished;
255 m_queue(other.m_queue),
256 m_jobs(std::move(other.m_jobs)) { other.m_queue =
nullptr; }
259 m_queue = other.m_queue;
260 m_jobs = std::move(other.m_jobs);
261 other.m_queue =
nullptr;
270 auto x = m_jobs.insert(m_queue->
Queue(job,
this));
276 bool IsEmpty()
const {
return m_jobs.empty(); }
280 std::set<Job::Handle> m_jobs;
Definition: JobQueue.h:135
virtual void Cancel(Job *job) override
Definition: JobQueue.cpp:242
virtual Uint32 FinishJobs() override
Definition: JobQueue.cpp:206
AsyncJobQueue(Uint32 numRunners)
Definition: JobQueue.cpp:93
virtual Job::Handle Queue(Job *job, JobClient *client=nullptr) override
Definition: JobQueue.cpp:151
virtual ~AsyncJobQueue()
Definition: JobQueue.cpp:108
Definition: JobQueue.h:241
virtual void Order(Job *job)=0
virtual ~JobClient()
Definition: JobQueue.h:245
virtual void RemoveJob(Job::Handle *handle)=0
Definition: JobQueue.h:101
JobQueue(const JobQueue &)=delete
virtual Uint32 FinishJobs()=0
JobQueue & operator=(const JobQueue &)=delete
virtual Job::Handle Queue(Job *job, JobClient *client=nullptr)=0
virtual void Cancel(Job *job)=0
virtual ~JobQueue()
Definition: JobQueue.h:109
Definition: JobQueue.h:250
JobSet & operator=(const JobSet &other)=delete
bool IsEmpty() const
Definition: JobQueue.h:276
virtual void RemoveJob(Job::Handle *handle)
Definition: JobQueue.h:274
JobSet(JobQueue *queue)
Definition: JobQueue.h:252
virtual void Order(Job *job)
Definition: JobQueue.h:268
JobSet & operator=(JobSet &&other)
Definition: JobQueue.h:257
JobSet(JobSet &&other)
Definition: JobQueue.h:254
JobSet(const JobSet &)=delete
Definition: JobQueue.h:37
Handle & operator=(const Handle &)=delete
Job * GetJob() const
Definition: JobQueue.h:52
Handle()
Definition: JobQueue.h:39
bool operator<(const Handle &other) const
Definition: JobQueue.h:54
Handle & operator=(Handle &&other)
Definition: JobQueue.cpp:63
Handle(const Handle &)=delete
~Handle()
Definition: JobQueue.cpp:82
bool HasJob() const
Definition: JobQueue.h:51
Definition: JobQueue.h:31
virtual ~Job()
Definition: JobQueue.cpp:15
friend class JobRunner
Definition: JobQueue.h:88
Job & operator=(const Job &)=delete
Job()
Definition: JobQueue.h:73
virtual void OnFinish()=0
virtual void OnCancel()
Definition: JobQueue.h:83
Definition: JobQueue.h:207
Uint32 RunJobs(Uint32 count=1)
Definition: JobQueue.cpp:447
virtual ~SyncJobQueue()
Definition: JobQueue.cpp:382
virtual Job::Handle Queue(Job *job, JobClient *client=nullptr) override
Definition: JobQueue.cpp:391
virtual void Cancel(Job *job) override
Definition: JobQueue.cpp:420
virtual Uint32 FinishJobs() override
Definition: JobQueue.cpp:399