Track more memory statistics

This commit is contained in:
Maxime Coste 2019-03-21 20:35:22 +11:00
parent 56611604b2
commit 31d67f51dd
3 changed files with 25 additions and 8 deletions

View File

@ -1254,9 +1254,14 @@ const CommandDesc debug_cmd = {
write_to_debug_buffer("Memory usage:"); write_to_debug_buffer("Memory usage:");
for (int domain = 0; domain < (int)MemoryDomain::Count; ++domain) for (int domain = 0; domain < (int)MemoryDomain::Count; ++domain)
{ {
size_t count = domain_allocated_bytes[domain]; auto& stats = memory_stats[domain];
total += count; total += stats.allocated_bytes;
write_to_debug_buffer(format(" {}: {}", domain_name((MemoryDomain)domain), count)); write_to_debug_buffer(
format(" {}: {} bytes, {} alloc active, {} alloc total",
domain_name((MemoryDomain)domain),
stats.allocated_bytes,
stats.allocation_count,
stats.total_allocation_count));
} }
write_to_debug_buffer(format(" Total: {}", total)); write_to_debug_buffer(format(" Total: {}", total));
#if defined(__GLIBC__) || defined(__CYGWIN__) #if defined(__GLIBC__) || defined(__CYGWIN__)

View File

@ -3,6 +3,6 @@
namespace Kakoune namespace Kakoune
{ {
size_t domain_allocated_bytes[(size_t)MemoryDomain::Count] = {}; MemoryStats memory_stats[(size_t)MemoryDomain::Count] = {};
} }

View File

@ -76,17 +76,29 @@ inline const char* domain_name(MemoryDomain domain)
return ""; return "";
} }
extern size_t domain_allocated_bytes[(size_t)MemoryDomain::Count]; struct MemoryStats
{
size_t allocated_bytes;
size_t allocation_count;
size_t total_allocation_count;
};
extern MemoryStats memory_stats[(size_t)MemoryDomain::Count];
inline void on_alloc(MemoryDomain domain, size_t size) inline void on_alloc(MemoryDomain domain, size_t size)
{ {
domain_allocated_bytes[(int)domain] += size; auto& stats = memory_stats[(int)domain];
stats.allocated_bytes += size;
++stats.allocation_count;
++stats.total_allocation_count;
} }
inline void on_dealloc(MemoryDomain domain, size_t size) inline void on_dealloc(MemoryDomain domain, size_t size)
{ {
kak_assert(domain_allocated_bytes[(int)domain] >= size); auto& stats = memory_stats[(int)domain];
domain_allocated_bytes[(int)domain] -= size; kak_assert(stats.allocated_bytes >= size);
stats.allocated_bytes -= size;
--stats.allocation_count;
} }
template<typename T, MemoryDomain domain> template<typename T, MemoryDomain domain>