refactor slighly memory domain handling
This commit is contained in:
parent
19797ae8d6
commit
e8b8070536
|
@ -826,33 +826,14 @@ const CommandDesc debug_cmd = {
|
||||||
}
|
}
|
||||||
else if (parser[0] == "memory")
|
else if (parser[0] == "memory")
|
||||||
{
|
{
|
||||||
auto string = UsedMemory<MemoryDomain::String>::byte_count;
|
auto total = 0;
|
||||||
auto interned_string = UsedMemory<MemoryDomain::InternedString>::byte_count;
|
|
||||||
auto buffer_content = UsedMemory<MemoryDomain::BufferContent>::byte_count;
|
|
||||||
auto buffer_meta = UsedMemory<MemoryDomain::BufferMeta>::byte_count;
|
|
||||||
auto options = UsedMemory<MemoryDomain::Options>::byte_count;
|
|
||||||
auto highlight = UsedMemory<MemoryDomain::Highlight>::byte_count;
|
|
||||||
auto word_db = UsedMemory<MemoryDomain::WordDB>::byte_count;
|
|
||||||
auto mapping = UsedMemory<MemoryDomain::Mapping>::byte_count;
|
|
||||||
auto commands = UsedMemory<MemoryDomain::Commands>::byte_count;
|
|
||||||
auto hooks = UsedMemory<MemoryDomain::Hooks>::byte_count;
|
|
||||||
auto undefined = UsedMemory<MemoryDomain::Undefined>::byte_count;
|
|
||||||
|
|
||||||
auto total = string + interned_string + buffer_content + buffer_meta +
|
|
||||||
options + highlight + word_db + mapping + commands + hooks + undefined;
|
|
||||||
|
|
||||||
write_debug("Memory usage:");
|
write_debug("Memory usage:");
|
||||||
write_debug("String: " + to_string(string));
|
for (int domain = 0; domain < (int)MemoryDomain::Count; ++domain)
|
||||||
write_debug("InternedString: " + to_string(interned_string));
|
{
|
||||||
write_debug("BufferContent: " + to_string(buffer_content));
|
size_t count = domain_allocated_bytes[domain];
|
||||||
write_debug("BufferMeta: " + to_string(buffer_meta));
|
total += count;
|
||||||
write_debug("Options: " + to_string(options));
|
write_debug(domain_name((MemoryDomain)domain) + (": " + to_string(count)));
|
||||||
write_debug("Highlight: " + to_string(highlight));
|
}
|
||||||
write_debug("WordDB: " + to_string(word_db));
|
|
||||||
write_debug("Mapping: " + to_string(mapping));
|
|
||||||
write_debug("Commands: " + to_string(commands));
|
|
||||||
write_debug("Hooks: " + to_string(hooks));
|
|
||||||
write_debug("Undefined: " + to_string(undefined));
|
|
||||||
write_debug("Total: " + to_string(total));
|
write_debug("Total: " + to_string(total));
|
||||||
write_debug("Malloced: " + to_string(mallinfo().uordblks));
|
write_debug("Malloced: " + to_string(mallinfo().uordblks));
|
||||||
}
|
}
|
||||||
|
|
8
src/memory.cc
Normal file
8
src/memory.cc
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
#include "memory.hh"
|
||||||
|
|
||||||
|
namespace Kakoune
|
||||||
|
{
|
||||||
|
|
||||||
|
size_t domain_allocated_bytes[(size_t)MemoryDomain::Count] = {};
|
||||||
|
|
||||||
|
}
|
|
@ -20,17 +20,32 @@ enum class MemoryDomain
|
||||||
Mapping,
|
Mapping,
|
||||||
Commands,
|
Commands,
|
||||||
Hooks,
|
Hooks,
|
||||||
WordDB
|
WordDB,
|
||||||
|
Count
|
||||||
};
|
};
|
||||||
|
|
||||||
template<MemoryDomain domain>
|
inline const char* domain_name(MemoryDomain domain)
|
||||||
struct UsedMemory
|
|
||||||
{
|
{
|
||||||
static size_t byte_count;
|
switch (domain)
|
||||||
};
|
{
|
||||||
|
case MemoryDomain::Undefined: return "Undefined";
|
||||||
|
case MemoryDomain::String: return "String";
|
||||||
|
case MemoryDomain::InternedString: return "InternedString";
|
||||||
|
case MemoryDomain::BufferContent: return "BufferContent";
|
||||||
|
case MemoryDomain::BufferMeta: return "BufferMeta";
|
||||||
|
case MemoryDomain::Options: return "Options";
|
||||||
|
case MemoryDomain::Highlight: return "Highlight";
|
||||||
|
case MemoryDomain::Mapping: return "Mapping";
|
||||||
|
case MemoryDomain::Commands: return "Commands";
|
||||||
|
case MemoryDomain::Hooks: return "Hooks";
|
||||||
|
case MemoryDomain::WordDB: return "WordDB";
|
||||||
|
case MemoryDomain::Count: break;
|
||||||
|
}
|
||||||
|
kak_assert(false);
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
template<MemoryDomain domain>
|
extern size_t domain_allocated_bytes[(size_t)MemoryDomain::Count];
|
||||||
size_t UsedMemory<domain>::byte_count = 0;
|
|
||||||
|
|
||||||
template<typename T, MemoryDomain domain>
|
template<typename T, MemoryDomain domain>
|
||||||
struct Allocator
|
struct Allocator
|
||||||
|
@ -54,15 +69,15 @@ struct Allocator
|
||||||
T* allocate(size_t n)
|
T* allocate(size_t n)
|
||||||
{
|
{
|
||||||
size_t size = sizeof(T) * n;
|
size_t size = sizeof(T) * n;
|
||||||
UsedMemory<domain>::byte_count += size;
|
domain_allocated_bytes[(int)domain] += size;
|
||||||
return reinterpret_cast<T*>(malloc(size));
|
return reinterpret_cast<T*>(malloc(size));
|
||||||
}
|
}
|
||||||
|
|
||||||
void deallocate(T* ptr, size_t n)
|
void deallocate(T* ptr, size_t n)
|
||||||
{
|
{
|
||||||
size_t size = sizeof(T) * n;
|
size_t size = sizeof(T) * n;
|
||||||
kak_assert(UsedMemory<domain>::byte_count >= size);
|
kak_assert(domain_allocated_bytes[(int)domain] >= size);
|
||||||
UsedMemory<domain>::byte_count -= size;
|
domain_allocated_bytes[(int)domain] -= size;
|
||||||
free(ptr);
|
free(ptr);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue
Block a user