62#ifdef DEAD_TILES_SANITY_CHECK
72 qDebug() <<
this <<
ppVar(m_sanityNumCOWHappened);
73 qDebug() <<
this <<
ppVar(m_sanityHasBeenDetached);
74 qDebug() <<
this <<
ppVar(m_sanityMMHasBeenInitializedManually);
75 qDebug() <<
this <<
ppVar(m_sanityIsDead);
76 KIS_ASSERT(0 &&
"m_mementoManager is still initialized during destruction");
85#ifdef DEAD_TILES_SANITY_CHECK
86 sanityCheckIsNotLockedForWrite();
95#ifdef DEAD_TILES_SANITY_CHECK
96 m_sanityHasBeenDetached.ref();
102#ifdef DEAD_TILES_SANITY_CHECK
103 sanityCheckIsNotLockedForWrite();
108#ifdef DEAD_TILES_SANITY_CHECK
109 m_sanityIsDead.ref();
115#ifdef DEAD_TILES_SANITY_CHECK
116 sanityCheckIsNotDestroyedYet();
130#ifdef DEAD_TILES_SANITY_CHECK
131 m_sanityMMHasBeenInitializedManually.ref();
136#ifdef DEAD_TILES_SANITY_CHECK
137 sanityCheckIsNotDestroyedYet();
144#ifdef DEBUG_TILE_LOCKING
145#define DEBUG_LOG_ACTION(action) \
146 printf("### %s \ttile:\t0x%llX (%d, %d) (0x%llX) ###\n", action, (quintptr)this, m_col, m_row, (quintptr)m_tileData)
148#define DEBUG_LOG_ACTION(action)
151#ifdef DEBUG_TILE_COWING
152#define DEBUG_COWING(newTD) \
153 printf("### COW done \ttile:\t0x%X (%d, %d) (0x%X -> 0x%X) [mm: 0x%X] ###\n", (quintptr)this, m_col, m_row, (quintptr)m_tileData, (quintptr)newTD, m_mementoManager);
155#define DEBUG_COWING(newTD)
210#ifdef DEAD_TILES_SANITY_CHECK
211 m_sanityLockedForRead.ref();
219#define lazyCopying() (m_tileData->m_usersCount>1)
223#ifdef DEAD_TILES_SANITY_CHECK
224 m_sanityLockedForWrite.ref();
256#ifdef DEAD_TILES_SANITY_CHECK
257 m_sanityNumCOWHappened.ref();
269#ifdef DEAD_TILES_SANITY_CHECK
270 m_sanityLockedForWrite.deref();
271 KIS_ASSERT(m_sanityLockedForWrite.loadAcquire() >= 0);
280#ifdef DEAD_TILES_SANITY_CHECK
281 m_sanityLockedForRead.deref();
282 KIS_ASSERT(m_sanityLockedForRead.loadAcquire() >= 0);
291 "Tile:\t\t\t" <<
this
310#ifdef DEAD_TILES_SANITY_CHECK
312void KisTile::sanityCheckIsNotDestroyedYet()
315 qDebug() <<
this <<
ppVar(m_sanityLockedForRead);
316 qDebug() <<
this <<
ppVar(m_sanityLockedForWrite);
323void KisTile::sanityCheckIsNotLockedForWrite()
325 if (m_sanityHasBeenDetached.loadAcquire()) {
326 qDebug() <<
this <<
ppVar(m_sanityNumCOWHappened);
327 qDebug() <<
this <<
ppVar(m_sanityHasBeenDetached);
328 qDebug() <<
this <<
ppVar(m_sanityMMHasBeenInitializedManually);
329 qDebug() <<
this <<
ppVar(m_sanityIsDead);
330 KIS_ASSERT(0 &&
"sanityCheckIsNotLockedForWrite() failed");
void registerTileChange(KisTile *tile)
void registerTileDeleted(KisTile *tile)
static const qint32 HEIGHT
static const qint32 WIDTH
void blockSwapping() const
void notifyAttachedToDataManager(KisMementoManager *mm)
KisTile(qint32 col, qint32 row, KisTileData *defaultTileData, KisMementoManager *mm)
void notifyDeadWithoutDetaching()
QAtomicPointer< KisMementoManager > m_mementoManager
void notifyDetachedFromDataManager()
volatile int m_lockCounter
void init(qint32 col, qint32 row, KisTileData *defaultTileData, KisMementoManager *mm)
void safeReleaseOldTileData(KisTileData *td)
KisTileData * tileData() const
void unlockForRead() const
void unblockSwapping() const
QStack< KisTileData * > m_oldTileData
#define DEBUG_LOG_ACTION(action)
#define DEBUG_COWING(newTD)