diff options
author | Bartosz Taudul <wolf.pld@gmail.com> | 2019-02-15 04:28:31 +0300 |
---|---|---|
committer | Bartosz Taudul <wolf.pld@gmail.com> | 2019-02-15 04:28:31 +0300 |
commit | 8fd685c877ba2e07312bee4059fa3791db008bbf (patch) | |
tree | e365f2d7b58c8790f5b7a2f94c7c45c3dd510deb /server/TracySlab.hpp | |
parent | 23d12d26335ca3a85f48b1f1ab241ff06486d951 (diff) |
Properly track memory usage in slab allocator.
Diffstat (limited to 'server/TracySlab.hpp')
-rw-r--r-- | server/TracySlab.hpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/server/TracySlab.hpp b/server/TracySlab.hpp index 1d7dca09..01c9cb02 100644 --- a/server/TracySlab.hpp +++ b/server/TracySlab.hpp @@ -17,13 +17,14 @@ public: : m_ptr( new char[BlockSize] ) , m_offset( 0 ) , m_buffer( { m_ptr } ) + , m_usage( BlockSize ) { memUsage.fetch_add( BlockSize, std::memory_order_relaxed ); } ~Slab() { - memUsage.fetch_sub( BlockSize * m_buffer.size(), std::memory_order_relaxed ); + memUsage.fetch_sub( m_usage, std::memory_order_relaxed ); for( auto& v : m_buffer ) { delete[] v; @@ -93,6 +94,7 @@ public: else { memUsage.fetch_add( size ); + m_usage += size; auto ret = new char[size]; m_buffer.emplace_back( ret ); return ret; @@ -103,7 +105,8 @@ public: { if( m_buffer.size() > 1 ) { - memUsage.fetch_sub( BlockSize * ( m_buffer.size() - 1 ), std::memory_order_relaxed ); + memUsage.fetch_sub( m_usage - BlockSize, std::memory_order_relaxed ); + m_usage = BlockSize; for( int i=1; i<m_buffer.size(); i++ ) { delete[] m_buffer[i]; @@ -128,11 +131,13 @@ private: m_offset = 0; m_buffer.emplace_back( m_ptr ); memUsage.fetch_add( BlockSize, std::memory_order_relaxed ); + m_usage += BlockSize; } char* m_ptr; uint32_t m_offset; std::vector<char*> m_buffer; + size_t m_usage; }; } |