Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/wolfpld/tracy.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBartosz Taudul <wolf.pld@gmail.com>2019-02-15 04:28:31 +0300
committerBartosz Taudul <wolf.pld@gmail.com>2019-02-15 04:28:31 +0300
commit8fd685c877ba2e07312bee4059fa3791db008bbf (patch)
treee365f2d7b58c8790f5b7a2f94c7c45c3dd510deb /server/TracySlab.hpp
parent23d12d26335ca3a85f48b1f1ab241ff06486d951 (diff)
Properly track memory usage in slab allocator.
Diffstat (limited to 'server/TracySlab.hpp')
-rw-r--r--server/TracySlab.hpp9
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;
};
}