diff options
author | Lars Knoll <lars.knoll@digia.com> | 2014-03-26 15:11:48 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-03-27 20:39:59 +0100 |
commit | 7ae796cb141b73a1b215b2b0fd64b7ffbbd1e510 (patch) | |
tree | 9f9b45d8f2036cc50b4298f8a3fdbe33d4d1eeda /src/qml/jsruntime/qv4mm.cpp | |
parent | b9bf708bf85ba062d009ccf5e13e3494dc88a5d1 (diff) |
Get rid of collectDeletables
The method is only required for the QObjectWrapper, but
there we can instead simply register the deletable in the
destroy method.
Change-Id: I944319d327859cce33ac31a174e8d56fc4babfc1
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/jsruntime/qv4mm.cpp')
-rw-r--r-- | src/qml/jsruntime/qv4mm.cpp | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/src/qml/jsruntime/qv4mm.cpp b/src/qml/jsruntime/qv4mm.cpp index 421cc2cf82..95d105c993 100644 --- a/src/qml/jsruntime/qv4mm.cpp +++ b/src/qml/jsruntime/qv4mm.cpp @@ -114,6 +114,7 @@ struct MemoryManager::Data LargeItem *largeItems; + GCDeletable *deletable; // statistics: #ifdef DETAILED_MM_STATS @@ -127,6 +128,7 @@ struct MemoryManager::Data , totalAlloc(0) , maxShift(10) , largeItems(0) + , deletable(0) { memset(smallItems, 0, sizeof(smallItems)); memset(nChunks, 0, sizeof(nChunks)); @@ -347,11 +349,8 @@ void MemoryManager::sweep(bool lastSweep) } } - GCDeletable *deletable = 0; - GCDeletable **firstDeletable = &deletable; - for (QVector<Data::Chunk>::iterator i = m_d->heapChunks.begin(), ei = m_d->heapChunks.end(); i != ei; ++i) - sweep(reinterpret_cast<char*>(i->memory.base()), i->memory.size(), i->chunkSize, &deletable); + sweep(reinterpret_cast<char*>(i->memory.base()), i->memory.size(), i->chunkSize); Data::LargeItem *i = m_d->largeItems; Data::LargeItem **last = &m_d->largeItems; @@ -370,16 +369,17 @@ void MemoryManager::sweep(bool lastSweep) i = *last; } - deletable = *firstDeletable; + GCDeletable *deletable = m_d->deletable; while (deletable) { GCDeletable *next = deletable->next; deletable->lastCall = lastSweep; delete deletable; deletable = next; } + m_d->deletable = 0; } -void MemoryManager::sweep(char *chunkStart, std::size_t chunkSize, size_t size, GCDeletable **deletable) +void MemoryManager::sweep(char *chunkStart, std::size_t chunkSize, size_t size) { // qDebug("chunkStart @ %p, size=%x, pos=%x (%x)", chunkStart, size, size>>4, m_d->smallItems[size >> 4]); Managed **f = &m_d->smallItems[size >> 4]; @@ -402,9 +402,6 @@ void MemoryManager::sweep(char *chunkStart, std::size_t chunkSize, size_t size, #ifdef V4_USE_VALGRIND VALGRIND_ENABLE_ERROR_REPORTING; #endif - Object *o = m->asObject(); - if (o && o->vtable()->collectDeletables) - o->vtable()->collectDeletables(m, deletable); m->internalClass->vtable->destroy(m); memset(m, 0, size); @@ -525,6 +522,12 @@ void MemoryManager::dumpStats() const #endif // DETAILED_MM_STATS } +void MemoryManager::registerDeletable(GCDeletable *d) +{ + d->next = m_d->deletable; + m_d->deletable = d; +} + ExecutionEngine *MemoryManager::engine() const { return m_d->engine; |