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
10
11/*std::mutex tracy_mutex; // Mutex for thread safety
12
13// Regular new/delete
14void* 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
22void 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
29void* 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
37void 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)
44void* 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
52void 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
58void* 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
66void 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
77void* 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
85void 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
91void* 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
99void 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
108void* 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
116void 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
122void* 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
130void 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