Krita Source Code Documentation
Loading...
Searching...
No Matches
SimpleJobCoordinator Class Reference

#include <simple_job_coordinator.h>

Classes

struct  Job
 

Public Member Functions

void end ()
 
JobloadConsume () const
 
void participate ()
 
void runOne (Job *job)
 
 SimpleJobCoordinator ()
 
void storeRelease (Job *job)
 

Private Attributes

QWaitCondition condVar
 
Atomic< quint64 > m_job
 
QMutex mutex
 

Detailed Description

Definition at line 23 of file simple_job_coordinator.h.

Constructor & Destructor Documentation

◆ SimpleJobCoordinator()

SimpleJobCoordinator::SimpleJobCoordinator ( )
inline

Definition at line 40 of file simple_job_coordinator.h.

40 : m_job(quint64(NULL))
41 {
42 }

Member Function Documentation

◆ end()

void SimpleJobCoordinator::end ( )
inline

Definition at line 96 of file simple_job_coordinator.h.

97 {
98 {
99 QMutexLocker guard(&mutex);
100 m_job.store(1, Release);
101 }
102
103 condVar.wakeAll();
104 }
@ Release
Definition atomic.h:60
void store(T value, MemoryOrder memoryOrder)
Definition atomic.h:99

References condVar, m_job, mutex, Release, and Atomic< T >::store().

◆ loadConsume()

Job * SimpleJobCoordinator::loadConsume ( ) const
inline

Definition at line 44 of file simple_job_coordinator.h.

45 {
46 return (Job*) m_job.load(Consume);
47 }
@ Consume
Definition atomic.h:58
T load(MemoryOrder memoryOrder) const
Definition atomic.h:89

References Consume, Atomic< T >::load(), and m_job.

◆ participate()

void SimpleJobCoordinator::participate ( )
inline

Definition at line 59 of file simple_job_coordinator.h.

60 {
61 quint64 prevJob = quint64(NULL);
62
63 for (;;) {
64 quint64 job = m_job.load(Consume);
65 if (job == prevJob) {
66 QMutexLocker guard(&mutex);
67
68 for (;;) {
69 job = m_job.loadNonatomic(); // No concurrent writes inside lock
70 if (job != prevJob) {
71 break;
72 }
73
74 condVar.wait(&mutex);
75 }
76 }
77
78 if (job == 1) {
79 return;
80 }
81
82 reinterpret_cast<Job*>(job)->run();
83 prevJob = job;
84 }
85 }
T loadNonatomic() const
Definition atomic.h:84

References condVar, Consume, Atomic< T >::load(), Atomic< T >::loadNonatomic(), m_job, and mutex.

◆ runOne()

void SimpleJobCoordinator::runOne ( Job * job)
inline

Definition at line 87 of file simple_job_coordinator.h.

88 {
89#ifdef SANITY_CHECK
91#endif // SANITY_CHECK
92 storeRelease(job);
93 job->run();
94 }
@ Relaxed
Definition atomic.h:57
#define KIS_ASSERT_RECOVER_NOOP(cond)
Definition kis_assert.h:97

References KIS_ASSERT_RECOVER_NOOP, Atomic< T >::load(), m_job, Relaxed, SimpleJobCoordinator::Job::run(), and storeRelease().

◆ storeRelease()

void SimpleJobCoordinator::storeRelease ( Job * job)
inline

Definition at line 49 of file simple_job_coordinator.h.

50 {
51 {
52 QMutexLocker guard(&mutex);
53 m_job.store(quint64(job), Release);
54 }
55
56 condVar.wakeAll();
57 }

References condVar, m_job, mutex, Release, and Atomic< T >::store().

Member Data Documentation

◆ condVar

QWaitCondition SimpleJobCoordinator::condVar
private

Definition at line 37 of file simple_job_coordinator.h.

◆ m_job

Atomic<quint64> SimpleJobCoordinator::m_job
private

Definition at line 35 of file simple_job_coordinator.h.

◆ mutex

QMutex SimpleJobCoordinator::mutex
private

Definition at line 36 of file simple_job_coordinator.h.


The documentation for this class was generated from the following file: