Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_tile_data_pooler.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2009 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6#ifndef KIS_TILE_DATA_POOLER_H_
7#define KIS_TILE_DATA_POOLER_H_
8
9#include <QObject>
10#include <QThread>
11#include <QSemaphore>
12
13#include "kritaimage_export.h"
14
16class KisTileData;
17
18
19class KRITAIMAGE_EXPORT KisTileDataPooler : public QThread
20{
21 Q_OBJECT
22
23public:
24
25 KisTileDataPooler(KisTileDataStore *store, qint32 memoryLimit = -1);
26 ~KisTileDataPooler() override;
27
28 void kick();
29 void terminatePooler();
30
31 void testingRereadConfig();
32
33 qint64 lastPoolMemoryMetric() const;
34 qint64 lastRealMemoryMetric() const;
35 qint64 lastHistoricalMemoryMetric() const;
36
37
42 void forceUpdateMemoryStats();
43
44protected:
45 static const qint32 MAX_NUM_CLONES;
46 static const qint32 MAX_TIMEOUT;
47 static const qint32 MIN_TIMEOUT;
48 static const qint32 TIMEOUT_FACTOR;
49
50 void waitForWork();
51 qint32 numClonesNeeded(KisTileData *td) const;
52 void cloneTileData(KisTileData *td, qint32 numClones) const;
53 void run() override;
54
55 inline int clonesMetric(KisTileData *td, int numClones);
56 inline int clonesMetric(KisTileData *td);
57
58 inline void tryFreeOrphanedClones(KisTileData *td);
59 inline qint32 needMemory(KisTileData *td);
60 inline qint32 canDonorMemory(KisTileData *td);
61 qint32 tryGetMemory(QList<KisTileData*> &donors, qint32 memoryMetric);
62
63 template<class Iter>
64 void getLists(Iter *iter, QList<KisTileData*> &beggars,
65 QList<KisTileData*> &donors,
66 qint32 &memoryOccupied,
67 qint32 &statRealMemory,
68 qint32 &statHistoricalMemory);
69
70 bool processLists(QList<KisTileData*> &beggars,
71 QList<KisTileData*> &donors,
72 qint32 &memoryOccupied);
73
74private:
75 void debugTileStatistics();
76protected:
77 QSemaphore m_semaphore;
78 QAtomicInt m_shouldExitFlag;
80 qint32 m_timeout;
86};
87
88
89
90#endif /* KIS_TILE_DATA_POOLER_H_ */
91
static const qint32 MAX_NUM_CLONES
static const qint32 TIMEOUT_FACTOR
KisTileDataStore * m_store
static const qint32 MIN_TIMEOUT
static const qint32 MAX_TIMEOUT