Vulkan Schnee
0.0.1
High-performance rendering engine
Loading...
Searching...
No Matches
MemoryProfiling.cpp
Go to the documentation of this file.
1
#ifdef ENABLE_TRACY
2
3
#include <iostream>
4
#include <cstdlib>
5
#include <new>
6
#include <mutex>
7
8
#include <tracy/Tracy.hpp>
// Assuming Tracy headers are in your include path
9
#include <
Engine/Profiler/MemoryProfiling.h
>
10
11
/*std::mutex tracy_mutex; // Mutex for thread safety
12
13
// Regular new/delete
14
void* operator new(std::size_t count) {
15
std::lock_guard<std::mutex> lock(tracy_mutex);
16
void* ptr = std::malloc(count);
17
if (!ptr) throw std::bad_alloc{};
18
TracyAlloc(ptr, count);
19
return ptr;
20
}
21
22
void operator delete(void* ptr) noexcept {
23
std::lock_guard<std::mutex> lock(tracy_mutex);
24
TracyFree(ptr);
25
std::free(ptr);
26
}
27
28
// Array new/delete
29
void* operator new[](std::size_t count) {
30
std::lock_guard<std::mutex> lock(tracy_mutex);
31
void* ptr = std::malloc(count);
32
if (!ptr) throw std::bad_alloc{};
33
TracyAlloc(ptr, count);
34
return ptr;
35
}
36
37
void operator delete[](void* ptr) noexcept {
38
std::lock_guard<std::mutex> lock(tracy_mutex);
39
TracyFree(ptr);
40
std::free(ptr);
41
}
42
43
// Placement new/delete (noexcept)
44
void* operator new(std::size_t count, const std::nothrow_t& tag) noexcept {
45
std::lock_guard<std::mutex> lock(tracy_mutex);
46
void* ptr = std::malloc(count);
47
if (!ptr) return nullptr; // Important for noexcept
48
TracyAlloc(ptr, count);
49
return ptr;
50
}
51
52
void operator delete(void* ptr, const std::nothrow_t& tag) noexcept {
53
std::lock_guard<std::mutex> lock(tracy_mutex);
54
TracyFree(ptr);
55
std::free(ptr);
56
}
57
58
void* operator new[](std::size_t count, const std::nothrow_t& tag) noexcept {
59
std::lock_guard<std::mutex> lock(tracy_mutex);
60
void* ptr = std::malloc(count);
61
if (!ptr) return nullptr; // Important for noexcept
62
TracyAlloc(ptr, count);
63
return ptr;
64
}
65
66
void operator delete[](void* ptr, const std::nothrow_t& tag) noexcept {
67
std::lock_guard<std::mutex> lock(tracy_mutex);
68
TracyFree(ptr);
69
std::free(ptr);
70
}
71
72
73
// Aligned new/delete
74
#ifdef _WIN32
75
#include <malloc.h> // For _aligned_malloc, _aligned_free (Windows)
76
77
void* operator new(std::size_t count, std::align_val_t al) {
78
std::lock_guard<std::mutex> lock(tracy_mutex);
79
void* ptr = _aligned_malloc(count, static_cast<size_t>(al));
80
if (!ptr) throw std::bad_alloc{};
81
TracyAlloc(ptr, count);
82
return ptr;
83
}
84
85
void operator delete(void* ptr, std::align_val_t al) noexcept {
86
std::lock_guard<std::mutex> lock(tracy_mutex);
87
TracyFree(ptr);
88
_aligned_free(ptr);
89
}
90
91
void* operator new[](std::size_t count, std::align_val_t al) {
92
std::lock_guard<std::mutex> lock(tracy_mutex);
93
void* ptr = _aligned_malloc(count, static_cast<size_t>(al));
94
if (!ptr) throw std::bad_alloc{};
95
TracyAlloc(ptr, count);
96
return ptr;
97
}
98
99
void operator delete[](void* ptr, std::align_val_t al) noexcept {
100
std::lock_guard<std::mutex> lock(tracy_mutex);
101
TracyFree(ptr);
102
_aligned_free(ptr);
103
}
104
105
#else // Linux/macOS (POSIX)
106
#include <stdlib.h> // For aligned_alloc, free
107
108
void* operator new(std::size_t count, std::align_val_t al) {
109
std::lock_guard<std::mutex> lock(tracy_mutex);
110
void* ptr = aligned_alloc(static_cast<size_t>(al), count);
111
if (!ptr) throw std::bad_alloc{};
112
TracyAlloc(ptr, count);
113
return ptr;
114
}
115
116
void operator delete(void* ptr, std::align_val_t al) noexcept {
117
std::lock_guard<std::mutex> lock(tracy_mutex);
118
TracyFree(ptr);
119
free(ptr); // Use free, not aligned_free
120
}
121
122
void* operator new[](std::size_t count, std::align_val_t al) {
123
std::lock_guard<std::mutex> lock(tracy_mutex);
124
void* ptr = aligned_alloc(static_cast<size_t>(al), count);
125
if (!ptr) throw std::bad_alloc{};
126
TracyAlloc(ptr, count);
127
return ptr;
128
}
129
130
void operator delete[](void* ptr, std::align_val_t al) noexcept {
131
std::lock_guard<std::mutex> lock(tracy_mutex);
132
TracyFree(ptr);
133
free(ptr); // Use free, not aligned_free
134
}
135
#endif
136
*/
137
#endif
MemoryProfiling.h
Engine
src
Engine
Profiler
MemoryProfiling.cpp
Generated by
1.14.0