Krita Source Code Documentation
Loading...
Searching...
No Matches
KisDabRenderingQueue::Private Struct Reference

Classes

struct  DumbCacheInterface
 

Public Member Functions

int calculateLastDabJobIndex (int startSearchIndex)
 
void cleanPaintedDabs ()
 
bool dabsHaveSeparateOriginal ()
 
KisDabCacheUtils::DabRenderingResourcesfetchResourcesFromCache ()
 
bool hasPreparedDabsImpl () const
 
 Private (const KoColorSpace *_colorSpace, KisDabCacheUtils::ResourcesFactory _resourcesFactory)
 
void putResourcesToCache (KisDabCacheUtils::DabRenderingResources *resources)
 
 ~Private ()
 

Public Attributes

qreal averageOpacity = 0.0
 
KisRollingMeanAccumulatorWrapper avgDabSize
 
KisRollingMeanAccumulatorWrapper avgExecutionTime
 
QList< KisDabCacheUtils::DabRenderingResources * > cachedResources
 
QScopedPointer< CacheInterfacecacheInterface
 
const KoColorSpacecolorSpace
 
QList< KisDabRenderingJobSPjobs
 
int lastDabJobInQueue = -1
 
int lastPaintedJob = -1
 
QMutex mutex
 
int nextSeqNoToUse = 0
 
QSharedPointer< KisOptimizedByteArray::MemoryAllocatorpaintDeviceAllocator
 
KisDabCacheUtils::ResourcesFactory resourcesFactory
 

Detailed Description

Definition at line 20 of file KisDabRenderingQueue.cpp.

Constructor & Destructor Documentation

◆ Private()

KisDabRenderingQueue::Private::Private ( const KoColorSpace * _colorSpace,
KisDabCacheUtils::ResourcesFactory _resourcesFactory )
inline

Definition at line 46 of file KisDabRenderingQueue.cpp.

48 : cacheInterface(new DumbCacheInterface),
49 colorSpace(_colorSpace),
50 resourcesFactory(_resourcesFactory),
53 avgDabSize(50)
54 {
56 }
#define KIS_SAFE_ASSERT_RECOVER_NOOP(cond)
Definition kis_assert.h:130
KisRollingMeanAccumulatorWrapper avgDabSize
KisRollingMeanAccumulatorWrapper avgExecutionTime
KisDabCacheUtils::ResourcesFactory resourcesFactory
QSharedPointer< KisOptimizedByteArray::MemoryAllocator > paintDeviceAllocator
QScopedPointer< CacheInterface > cacheInterface

References KIS_SAFE_ASSERT_RECOVER_NOOP, and resourcesFactory.

◆ ~Private()

KisDabRenderingQueue::Private::~Private ( )
inline

Definition at line 58 of file KisDabRenderingQueue.cpp.

58 {
59 // clear the jobs, so that they would not keep references to any
60 // paint devices anymore
61 jobs.clear();
62
63 qDeleteAll(cachedResources);
64 cachedResources.clear();
65 }
QList< KisDabRenderingJobSP > jobs
QList< KisDabCacheUtils::DabRenderingResources * > cachedResources

References cachedResources, and jobs.

Member Function Documentation

◆ calculateLastDabJobIndex()

int KisDabRenderingQueue::Private::calculateLastDabJobIndex ( int startSearchIndex)

Definition at line 105 of file KisDabRenderingQueue.cpp.

106{
107 if (startSearchIndex < 0) {
108 startSearchIndex = jobs.size() - 1;
109 }
110
111 // try to use cached value
112 if (startSearchIndex >= lastDabJobInQueue) {
113 return lastDabJobInQueue;
114 }
115
116 // if we are below the cached value, just iterate through the dabs
117 // (which is extremely(!) slow)
118 for (int i = startSearchIndex; i >= 0; i--) {
119 if (jobs[i]->type == KisDabRenderingJob::Dab) {
120 return i;
121 }
122 }
123
124 return -1;
125}

References KisDabRenderingJob::Dab, jobs, and lastDabJobInQueue.

◆ cleanPaintedDabs()

void KisDabRenderingQueue::Private::cleanPaintedDabs ( )

Definition at line 250 of file KisDabRenderingQueue.cpp.

251{
252 const int nextToBePainted = lastPaintedJob + 1;
253 const int lastSourceJob = calculateLastDabJobIndex(qMin(nextToBePainted, jobs.size() - 1));
254
255 if (lastPaintedJob >= 0) {
256 int numRemovedJobs = 0;
257 int numRemovedJobsBeforeLastSource = 0;
258
259 auto it = jobs.begin();
260 for (int i = 0; i <= lastPaintedJob; i++) {
261 KisDabRenderingJobSP job = *it;
262
263 if (i < lastSourceJob || job->type != KisDabRenderingJob::Dab){
264
265 KIS_ASSERT_RECOVER_NOOP(job->originalDevice);
266
267 it = jobs.erase(it);
268 numRemovedJobs++;
269 if (i < lastDabJobInQueue) {
270 numRemovedJobsBeforeLastSource++;
271 }
272
273 } else {
274 ++it;
275 }
276 }
277
279
280 lastPaintedJob -= numRemovedJobs;
281 lastDabJobInQueue -= numRemovedJobsBeforeLastSource;
282 }
283}
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:128
#define KIS_ASSERT_RECOVER_NOOP(cond)
Definition kis_assert.h:97
int calculateLastDabJobIndex(int startSearchIndex)

References KisDabRenderingJob::Dab, KIS_ASSERT_RECOVER_NOOP, and KIS_SAFE_ASSERT_RECOVER_RETURN.

◆ dabsHaveSeparateOriginal()

bool KisDabRenderingQueue::Private::dabsHaveSeparateOriginal ( )

Definition at line 387 of file KisDabRenderingQueue.cpp.

388{
390
391 const bool result = cacheInterface->hasSeparateOriginal(resources);
392
393 putResourcesToCache(resources);
394
395 return result;
396}
KisDabCacheUtils::DabRenderingResources * fetchResourcesFromCache()
void putResourcesToCache(KisDabCacheUtils::DabRenderingResources *resources)

References KisDabRenderingQueue::fetchResourcesFromCache(), and KisDabRenderingQueue::putResourcesToCache().

◆ fetchResourcesFromCache()

KisDabCacheUtils::DabRenderingResources * KisDabRenderingQueue::Private::fetchResourcesFromCache ( )

Definition at line 398 of file KisDabRenderingQueue.cpp.

399{
401
402 // fetch/create a temporary resources object
403 if (!cachedResources.isEmpty()) {
404 resources = cachedResources.takeLast();
405 } else {
406 resources = resourcesFactory();
407 }
408
409 return resources;
410}

◆ hasPreparedDabsImpl()

bool KisDabRenderingQueue::Private::hasPreparedDabsImpl ( ) const

Definition at line 344 of file KisDabRenderingQueue.cpp.

345{
346 const int nextToBePainted = lastPaintedJob + 1;
347
348 return
349 nextToBePainted >= 0 &&
350 nextToBePainted < jobs.size() &&
351 jobs[nextToBePainted]->status == KisDabRenderingJob::Completed;
352}

References KisDabRenderingJob::Completed.

◆ putResourcesToCache()

void KisDabRenderingQueue::Private::putResourcesToCache ( KisDabCacheUtils::DabRenderingResources * resources)

Definition at line 412 of file KisDabRenderingQueue.cpp.

413{
414 cachedResources << resources;
415}

Member Data Documentation

◆ averageOpacity

qreal KisDabRenderingQueue::Private::averageOpacity = 0.0

Definition at line 73 of file KisDabRenderingQueue.cpp.

◆ avgDabSize

KisRollingMeanAccumulatorWrapper KisDabRenderingQueue::Private::avgDabSize

Definition at line 83 of file KisDabRenderingQueue.cpp.

◆ avgExecutionTime

KisRollingMeanAccumulatorWrapper KisDabRenderingQueue::Private::avgExecutionTime

Definition at line 82 of file KisDabRenderingQueue.cpp.

◆ cachedResources

QList<KisDabCacheUtils::DabRenderingResources*> KisDabRenderingQueue::Private::cachedResources

Definition at line 77 of file KisDabRenderingQueue.cpp.

◆ cacheInterface

QScopedPointer<CacheInterface> KisDabRenderingQueue::Private::cacheInterface

Definition at line 71 of file KisDabRenderingQueue.cpp.

◆ colorSpace

const KoColorSpace* KisDabRenderingQueue::Private::colorSpace

Definition at line 72 of file KisDabRenderingQueue.cpp.

◆ jobs

QList<KisDabRenderingJobSP> KisDabRenderingQueue::Private::jobs

Definition at line 67 of file KisDabRenderingQueue.cpp.

◆ lastDabJobInQueue

int KisDabRenderingQueue::Private::lastDabJobInQueue = -1

Definition at line 70 of file KisDabRenderingQueue.cpp.

◆ lastPaintedJob

int KisDabRenderingQueue::Private::lastPaintedJob = -1

Definition at line 69 of file KisDabRenderingQueue.cpp.

◆ mutex

QMutex KisDabRenderingQueue::Private::mutex

Definition at line 80 of file KisDabRenderingQueue.cpp.

◆ nextSeqNoToUse

int KisDabRenderingQueue::Private::nextSeqNoToUse = 0

Definition at line 68 of file KisDabRenderingQueue.cpp.

◆ paintDeviceAllocator

QSharedPointer<KisOptimizedByteArray::MemoryAllocator> KisDabRenderingQueue::Private::paintDeviceAllocator

Definition at line 78 of file KisDabRenderingQueue.cpp.

◆ resourcesFactory

KisDabCacheUtils::ResourcesFactory KisDabRenderingQueue::Private::resourcesFactory

Definition at line 75 of file KisDabRenderingQueue.cpp.


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