diff options
author | Erik Verbruggen <erik.verbruggen@theqtcompany.com> | 2016-04-21 14:12:41 +0200 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@qt.io> | 2016-05-25 08:22:40 +0000 |
commit | 5f3b1e81257ca94904720d0365454002756e12bc (patch) | |
tree | 3515aa600664f3448caca24296858fa830938b2e /src | |
parent | 0ba6dffd96a0dda8e3938b09395075c19e46644b (diff) |
V4: Get more code inlined in the MemoryManager.
Change-Id: I7cf6c5d3458b0c43283e63a7300ee9965ba803fb
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
Reviewed-by: Frank Meerkoetter <frank.meerkoetter@basyskom.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/qml/memory/qv4mm.cpp | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/src/qml/memory/qv4mm.cpp b/src/qml/memory/qv4mm.cpp index fe94a11082..5d715ad9d8 100644 --- a/src/qml/memory/qv4mm.cpp +++ b/src/qml/memory/qv4mm.cpp @@ -108,6 +108,8 @@ using namespace QV4; struct MemoryManager::Data { + const size_t pageSize; + struct ChunkHeader { Heap::Base freeItems; ChunkHeader *nextNonFull; @@ -130,7 +132,7 @@ struct MemoryManager::Data int totalAlloc; uint maxShift; std::size_t maxChunkSize; - QVector<PageAllocation> heapChunks; + std::vector<PageAllocation> heapChunks; std::size_t unmanagedHeapSize; // the amount of bytes of heap that is not managed by the memory manager, but which is held onto by managed items. std::size_t unmanagedHeapSizeGCLimit; @@ -153,7 +155,8 @@ struct MemoryManager::Data #endif // DETAILED_MM_STATS Data() - : gcBlocked(false) + : pageSize(WTF::pageSize()) + , gcBlocked(false) , aggressiveGC(!qEnvironmentVariableIsEmpty("QV4_MM_AGGRESSIVE_GC")) , gcStats(!qEnvironmentVariableIsEmpty("QV4_MM_STATS")) , engine(0) @@ -174,7 +177,7 @@ struct MemoryManager::Data ~Data() { - for (QVector<PageAllocation>::iterator i = heapChunks.begin(), ei = heapChunks.end(); i != ei; ++i) { + for (std::vector<PageAllocation>::iterator i = heapChunks.begin(), ei = heapChunks.end(); i != ei; ++i) { Q_V4_PROFILE_DEALLOC(engine, 0, i->size(), Profiling::HeapPage); i->deallocate(); } @@ -324,11 +327,11 @@ Heap::Base *MemoryManager::allocData(std::size_t size, std::size_t unmanagedSize if (shift > m_d->maxShift) shift = m_d->maxShift; std::size_t allocSize = m_d->maxChunkSize*(size_t(1) << shift); - allocSize = roundUpToMultipleOf(WTF::pageSize(), allocSize); + allocSize = roundUpToMultipleOf(m_d->pageSize, allocSize); PageAllocation allocation = PageAllocation::allocate( Q_V4_PROFILE_ALLOC(engine, allocSize, Profiling::HeapPage), OSAllocator::JSGCHeapPages); - m_d->heapChunks.append(allocation); + m_d->heapChunks.push_back(allocation); header = reinterpret_cast<Data::ChunkHeader *>(allocation.base()); header->itemSize = int(size); @@ -470,13 +473,13 @@ void MemoryManager::sweep(bool lastSweep) memset(itemsInUse, 0, sizeof(itemsInUse)); memset(m_d->nonFullChunks, 0, sizeof(m_d->nonFullChunks)); - for (int i = 0; i < m_d->heapChunks.size(); ++i) { + for (size_t i = 0; i < m_d->heapChunks.size(); ++i) { Data::ChunkHeader *header = reinterpret_cast<Data::ChunkHeader *>(m_d->heapChunks[i].base()); chunkIsEmpty[i] = sweepChunk(header, &itemsInUse[header->itemSize >> 4], engine, &m_d->unmanagedHeapSize); } - QVector<PageAllocation>::iterator chunkIter = m_d->heapChunks.begin(); - for (int i = 0; i < m_d->heapChunks.size(); ++i) { + std::vector<PageAllocation>::iterator chunkIter = m_d->heapChunks.begin(); + for (size_t i = 0; i < m_d->heapChunks.size(); ++i) { Q_ASSERT(chunkIter != m_d->heapChunks.end()); Data::ChunkHeader *header = reinterpret_cast<Data::ChunkHeader *>(chunkIter->base()); const size_t pos = header->itemSize >> 4; @@ -561,7 +564,7 @@ void MemoryManager::runGC() t.restart(); const size_t usedBefore = getUsedMem(); const size_t largeItemsBefore = getLargeItemsMem(); - int chunksBefore = m_d->heapChunks.size(); + size_t chunksBefore = m_d->heapChunks.size(); sweep(); const size_t usedAfter = getUsedMem(); const size_t largeItemsAfter = getLargeItemsMem(); @@ -589,7 +592,7 @@ void MemoryManager::runGC() size_t MemoryManager::getUsedMem() const { size_t usedMem = 0; - for (QVector<PageAllocation>::const_iterator i = m_d->heapChunks.cbegin(), ei = m_d->heapChunks.cend(); i != ei; ++i) { + for (std::vector<PageAllocation>::const_iterator i = m_d->heapChunks.cbegin(), ei = m_d->heapChunks.cend(); i != ei; ++i) { Data::ChunkHeader *header = reinterpret_cast<Data::ChunkHeader *>(i->base()); for (char *item = header->itemStart; item <= header->itemEnd; item += header->itemSize) { Heap::Base *m = reinterpret_cast<Heap::Base *>(item); @@ -604,7 +607,7 @@ size_t MemoryManager::getUsedMem() const size_t MemoryManager::getAllocatedMem() const { size_t total = 0; - for (int i = 0; i < m_d->heapChunks.size(); ++i) + for (size_t i = 0; i < m_d->heapChunks.size(); ++i) total += m_d->heapChunks.at(i).size(); return total; } |