25#define DEBUG_ACTION(action) dbgKrita << action
26#define DEBUG_VALUE(value) dbgKrita << "\t" << ppVar(value)
28#define DEBUG_ACTION(action)
29#define DEBUG_VALUE(value)
50 m_d->shouldExitFlag = 0;
61 m_d->semaphore.release();
66 unsigned long exitTimeout = 100;
68 m_d->shouldExitFlag =
true;
70 }
while(!wait(exitTimeout));
83 if (
m_d->shouldExitFlag)
86 QThread::msleep(
DELAY);
95 if(
m_d->store->memoryMetric() >
m_d->limits.emergencyThreshold())
105 QMutexLocker locker(&
m_d->cycleLock);
107 qint32 memoryMetric =
m_d->store->memoryMetric();
118 if(memoryMetric >
m_d->limits.softLimitThreshold()) {
119 qint32 softFree = memoryMetric -
m_d->limits.softLimit();
122 memoryMetric -= pass<SoftSwapStrategy>(softFree);
125 if(memoryMetric >
m_d->limits.hardLimitThreshold()) {
126 qint32 hardFree = memoryMetric -
m_d->limits.hardLimit();
129 memoryMetric -= pass<AggressiveSwapStrategy>(hardFree);
155 return td->
age() > 0;
179 return td->
age() > 0;
184template<
class strategy>
187 qint64 freedMetric = 0;
190 typename strategy::iterator *iter =
191 strategy::beginIteration(
m_d->store);
195 while (iter->hasNext()) {
198 if (freedMetric >= needToFreeMetric)
break;
200 if (!strategy::isInteresting(item))
continue;
202 if (strategy::swapOutFirst(item)) {
203 if (iter->trySwapOut(item)) {
209 additionalCandidates.append(item);
214 Q_FOREACH (item, additionalCandidates) {
215 if (freedMetric >= needToFreeMetric)
break;
217 if (iter->trySwapOut(item)) {
222 strategy::endIteration(
m_d->store, iter);
static bool isInteresting(KisTileData *td)
static bool swapOutFirst(KisTileData *td)
KisTileDataStoreClockIterator iterator
static iterator * beginIteration(KisTileDataStore *store)
static void endIteration(KisTileDataStore *store, iterator *iter)
KisTileDataStoreClockIterator * beginClockIteration()
void endIteration(KisTileDataStoreIterator *iterator)
KisTileDataStoreIterator * beginIteration()
quint32 pixelSize() const
static bool swapOutFirst(KisTileData *td)
static iterator * beginIteration(KisTileDataStore *store)
KisTileDataStoreIterator iterator
static bool isInteresting(KisTileData *td)
static void endIteration(KisTileDataStore *store, iterator *iter)
#define DEBUG_VALUE(value)
#define DEBUG_ACTION(action)
qint64 pass(qint64 needToFreeMetric)
static const qint32 DELAY
void testingRereadConfig()
~KisTileDataSwapper() override
static const qint32 TIMEOUT
KisTileDataSwapper(KisTileDataStore *store)
QAtomicInt shouldExitFlag