11#include <QMutexLocker>
21 if(threadCount <= 0) {
22 threadCount = QThread::idealThreadCount();
23 threadCount = threadCount > 0 ? threadCount : 1;
41 qint32 &numStrokeJobs)
79 switch (item->strokeJobSequentiality()) {
115 if(!item->isRunning()) {
126 if (lod >= 0 && walker->
levelOfDetail() != lod)
return false;
128 bool intersects =
false;
168 Q_ASSERT(jobIndex >= 0);
170 const bool shouldStartThread =
m_jobs[jobIndex]->setWalker(walker);
183 Q_ASSERT(jobIndex >= 0);
185 const bool shouldStartThread =
m_jobs[jobIndex]->setStrokeJob(strokeJob);
198 Q_ASSERT(jobIndex >= 0);
200 const bool shouldStartThread =
m_jobs[jobIndex]->setSpontaneousJob(spontaneousJob);
232 for(qint32 i=0; i <
m_jobs.size(); i++)
233 if(!
m_jobs[i]->isRunning())
253 for (
int i = 0; i <
m_jobs.size(); i++) {
258 for (
int i = 0; i <
m_jobs.size(); i++) {
264 for(qint32 i = 0; i <
m_jobs.size(); i++) {
float value(const T *src, size_t ch)
@ HasUniquelyConcurrentJob
int levelOfDetail() const
virtual int levelOfDetail() const =0
int levelOfDetail() const
KisTestableUpdaterContext(qint32 threadCount)
const QRect & accessRect() const
KisUpdaterContextSnapshotEx getContextSnapshotEx() const
void getJobsSnapshot(qint32 &numMergeJobs, qint32 &numStrokeJobs)
KisLockFreeLodCounter m_lodCounter
void addStrokeJob(KisStrokeJob *strokeJob)
friend class KisUpdateJobItem
bool isJobAllowed(KisBaseRectsWalkerSP walker)
void startThread(int index)
void setThreadsLimit(int value)
QMutex m_runningThreadsMutex
void addMergeJob(KisBaseRectsWalkerSP walker)
void addSpontaneousJob(KisSpontaneousJob *spontaneousJob)
void setTestingMode(bool value)
void continueUpdate(const QRect &rc)
QVector< KisUpdateJobItem * > m_jobs
static bool walkerIntersectsJob(KisBaseRectsWalkerSP walker, const KisUpdateJobItem *job)
const QVector< KisUpdateJobItem * > getJobs()
KisUpdaterContext(qint32 threadCount=useIdealThreadCountTag, KisUpdateScheduler *parent=0)
int currentLevelOfDetail() const
static const int useIdealThreadCountTag
KisUpdateScheduler * m_scheduler
QWaitCondition m_waitForDoneCondition
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
#define KIS_SAFE_ASSERT_RECOVER_NOOP(cond)
void spareThreadAppeared()
void continueUpdate(const QRect &rect)