renderd7/source/Memory.cpp

57 lines
1.2 KiB
C++
Raw Permalink Normal View History

2024-02-19 19:20:37 +01:00
#include <cstdlib>
#include <map>
#include <renderd7/Memory.hpp>
static RenderD7::Memory::memory_metrics metrics;
2024-07-01 18:06:54 +02:00
bool rd7i_enable_memtrack;
2024-02-19 19:20:37 +01:00
void *operator new(size_t size) {
void *ptr = malloc(size);
2024-07-01 18:06:54 +02:00
if (rd7i_enable_memtrack) metrics.t_TotalAllocated += size;
2024-02-19 19:20:37 +01:00
return ptr;
}
void operator delete(void *memory, size_t size) {
2024-07-01 18:06:54 +02:00
if (rd7i_enable_memtrack) metrics.t_TotalFreed += size;
2024-02-19 19:20:37 +01:00
free(memory);
}
int allocations = 0;
int total_size = 0;
std::map<void *, size_t> sizes;
void *operator new[](size_t size) {
void *ptr = malloc(size);
2024-07-01 18:06:54 +02:00
if (rd7i_enable_memtrack) {
allocations++;
total_size += size;
sizes[ptr] = size;
metrics.t_TotalAllocated += size;
}
2024-02-19 19:20:37 +01:00
return ptr;
}
void operator delete[](void *ptr) {
2024-07-01 18:06:54 +02:00
if (rd7i_enable_memtrack) {
allocations--;
total_size -= sizes[ptr];
metrics.t_TotalFreed += sizes[ptr];
sizes.erase(ptr);
}
2024-02-19 19:20:37 +01:00
free(ptr);
}
namespace RenderD7 {
namespace Memory {
size_t GetTotalAllocated() { return metrics.t_TotalAllocated; }
size_t GetTotalFreed() { return metrics.t_TotalFreed; }
size_t GetCurrent() { return metrics.t_CurrentlyAllocated(); }
} // namespace Memory
} // namespace RenderD7