diff --git a/NazaraModuleTemplate/include/Nazara/ModuleName/Config.hpp b/NazaraModuleTemplate/include/Nazara/ModuleName/Config.hpp index fd5d5c958..c9e04ae5e 100644 --- a/NazaraModuleTemplate/include/Nazara/ModuleName/Config.hpp +++ b/NazaraModuleTemplate/include/Nazara/ModuleName/Config.hpp @@ -29,8 +29,8 @@ /// Chaque modification d'un paramètre du module nécessite une recompilation de celui-ci -// Utilise un tracker pour repérer les éventuels leaks (Ralentit l'exécution) -#define NAZARA_MODULENAME_MEMORYLEAKTRACKER 0 +// Utilise un manager de mémoire pour gérer les allocations dynamiques (détecte les leaks, ralenti l'exécution) +#define NAZARA_MODULENAME_MEMORYMANAGER 0 // Active les tests de sécurité basés sur le code (Conseillé pour le développement) #define NAZARA_MODULENAME_SAFE 1 diff --git a/NazaraModuleTemplate/include/Nazara/ModuleName/Debug.hpp b/NazaraModuleTemplate/include/Nazara/ModuleName/Debug.hpp index 1072852ee..70a0d3030 100644 --- a/NazaraModuleTemplate/include/Nazara/ModuleName/Debug.hpp +++ b/NazaraModuleTemplate/include/Nazara/ModuleName/Debug.hpp @@ -3,7 +3,7 @@ // For conditions of distribution and use, see copyright notice in Config.hpp #include -#if NAZARA_MODULENAME_MEMORYLEAKTRACKER || defined(NAZARA_DEBUG) +#if NAZARA_MODULENAME_MEMORYMANAGER || defined(NAZARA_DEBUG) #include #define delete NzMemoryManager::NextFree(__FILE__, __LINE__), delete diff --git a/NazaraModuleTemplate/include/Nazara/ModuleName/DebugOff.hpp b/NazaraModuleTemplate/include/Nazara/ModuleName/DebugOff.hpp index c42e8fe05..7ba52e986 100644 --- a/NazaraModuleTemplate/include/Nazara/ModuleName/DebugOff.hpp +++ b/NazaraModuleTemplate/include/Nazara/ModuleName/DebugOff.hpp @@ -2,7 +2,7 @@ // This file is part of the "Nazara Engine - Module name" // For conditions of distribution and use, see copyright notice in Config.hpp -#if NAZARA_MODULENAME_MEMORYLEAKTRACKER || defined(NAZARA_DEBUG) +#if NAZARA_MODULENAME_MEMORYMANAGER || defined(NAZARA_DEBUG) #undef delete #undef new #endif diff --git a/NazaraModuleTemplate/src/Nazara/ModuleName/Debug/Leaks.cpp b/NazaraModuleTemplate/src/Nazara/ModuleName/Debug/Leaks.cpp index 6c812a799..433220fae 100644 --- a/NazaraModuleTemplate/src/Nazara/ModuleName/Debug/Leaks.cpp +++ b/NazaraModuleTemplate/src/Nazara/ModuleName/Debug/Leaks.cpp @@ -3,7 +3,8 @@ // For conditions of distribution and use, see copyright notice in Config.hpp #include -#if NAZARA_MODULENAME_MEMORYLEAKTRACKER || defined(NAZARA_DEBUG) +#if NAZARA_MODULENAME_MEMORYMANAGER || defined(NAZARA_DEBUG) +#define NAZARA_DEBUG_MEMORYMANAGER_DISABLE_REDEFINITION #include #include diff --git a/include/Nazara/Audio/Config.hpp b/include/Nazara/Audio/Config.hpp index 1f815bc47..26f7e7c36 100644 --- a/include/Nazara/Audio/Config.hpp +++ b/include/Nazara/Audio/Config.hpp @@ -29,8 +29,8 @@ /// Chaque modification d'un paramètre du module nécessite une recompilation de celui-ci -// Utilise un tracker pour repérer les éventuels leaks (Ralentit l'exécution) -#define NAZARA_AUDIO_MEMORYLEAKTRACKER 0 +// Utilise un manager de mémoire pour gérer les allocations dynamiques (détecte les leaks, ralenti l'exécution) +#define NAZARA_AUDIO_MEMORYMANAGER 0 // Active les tests de sécurité basés sur le code (Conseillé pour le développement) #define NAZARA_AUDIO_SAFE 1 diff --git a/include/Nazara/Audio/Debug.hpp b/include/Nazara/Audio/Debug.hpp index dccffa01e..84443d217 100644 --- a/include/Nazara/Audio/Debug.hpp +++ b/include/Nazara/Audio/Debug.hpp @@ -3,6 +3,6 @@ // For conditions of distribution and use, see copyright notice in Config.hpp #include -#if NAZARA_AUDIO_MEMORYLEAKTRACKER || defined(NAZARA_DEBUG) - #include +#if NAZARA_AUDIO_MEMORYMANAGER || defined(NAZARA_DEBUG) + #include #endif diff --git a/include/Nazara/Audio/DebugOff.hpp b/include/Nazara/Audio/DebugOff.hpp index 9ed048629..12cbf8a80 100644 --- a/include/Nazara/Audio/DebugOff.hpp +++ b/include/Nazara/Audio/DebugOff.hpp @@ -2,7 +2,7 @@ // This file is part of the "Nazara Engine - Audio module" // For conditions of distribution and use, see copyright notice in Config.hpp -#if NAZARA_AUDIO_MEMORYLEAKTRACKER || defined(NAZARA_DEBUG) +#if NAZARA_AUDIO_MEMORYMANAGER || defined(NAZARA_DEBUG) #undef delete #undef new #endif diff --git a/include/Nazara/Core/Config.hpp b/include/Nazara/Core/Config.hpp index 0f6c41984..d1df252c9 100644 --- a/include/Nazara/Core/Config.hpp +++ b/include/Nazara/Core/Config.hpp @@ -44,8 +44,8 @@ // Incorpore la table Unicode Character Data (Nécessaires pour faire fonctionner le flag NzString::HandleUTF8) #define NAZARA_CORE_INCLUDE_UNICODEDATA 0 -// Utilise un tracker pour repérer les éventuels leaks (Ralentit l'exécution) -#define NAZARA_CORE_MEMORYLEAKTRACKER 0 +// Utilise un manager de mémoire pour gérer les allocations dynamiques (détecte les leaks, ralenti l'exécution) +#define NAZARA_CORE_MEMORYMANAGER 0 // Précision des réels lors de la transformation en texte (Max. chiffres après la virgule) #define NAZARA_CORE_REAL_PRECISION 6 diff --git a/include/Nazara/Core/Debug.hpp b/include/Nazara/Core/Debug.hpp index be5966cd2..229014063 100644 --- a/include/Nazara/Core/Debug.hpp +++ b/include/Nazara/Core/Debug.hpp @@ -3,6 +3,6 @@ // For conditions of distribution and use, see copyright notice in Config.hpp #include -#if NAZARA_CORE_MEMORYLEAKTRACKER || defined(NAZARA_DEBUG) - #include +#if NAZARA_CORE_MEMORYMANAGER || defined(NAZARA_DEBUG) + #include #endif diff --git a/include/Nazara/Core/Debug/MemoryLeakTracker.hpp b/include/Nazara/Core/Debug/MemoryManager.hpp similarity index 74% rename from include/Nazara/Core/Debug/MemoryLeakTracker.hpp rename to include/Nazara/Core/Debug/MemoryManager.hpp index 4db7fa3f2..9c3677a9d 100644 --- a/include/Nazara/Core/Debug/MemoryLeakTracker.hpp +++ b/include/Nazara/Core/Debug/MemoryManager.hpp @@ -2,10 +2,8 @@ // This file is part of the "Nazara Engine - Core module" // For conditions of distribution and use, see copyright notice in Config.hpp -#pragma once - -#ifndef NAZARA_DEBUG_MEMORYLEAKTRACKER_HPP -#define NAZARA_DEBUG_MEMORYLEAKTRACKER_HPP +#ifndef NAZARA_DEBUG_MEMORYMANAGER_HPP +#define NAZARA_DEBUG_MEMORYMANAGER_HPP #include #include @@ -15,7 +13,12 @@ class NAZARA_API NzMemoryManager { public: static void* Allocate(std::size_t size, bool multi, const char* file = nullptr, unsigned int line = 0); + static void Free(void* pointer, bool multi); + + static unsigned int GetAllocatedBlockCount(); + static std::size_t GetAllocatedSize(); + static void NextFree(const char* file, unsigned int line); private: @@ -23,18 +26,18 @@ class NAZARA_API NzMemoryManager ~NzMemoryManager(); static void Initialize(); - static char* TimeInfo(); + static void TimeInfo(char buffer[23]); static void Uninitialize(); }; NAZARA_API void* operator new(std::size_t size, const char* file, unsigned int line); NAZARA_API void* operator new[](std::size_t size, const char* file, unsigned int line); -NAZARA_API void operator delete(void* ptr, const char* file, unsigned int line) throw(); -NAZARA_API void operator delete[](void* ptr, const char* file, unsigned int line) throw(); +NAZARA_API void operator delete(void* ptr, const char* file, unsigned int line) noexcept; +NAZARA_API void operator delete[](void* ptr, const char* file, unsigned int line) noexcept; -#endif // NAZARA_DEBUG_MEMORYLEAKTRACKER_HPP +#endif // NAZARA_DEBUG_MEMORYMANAGER_HPP -#ifndef NAZARA_DEBUG_MEMORYLEAKTRACKER_DISABLE_REDEFINITION +#ifndef NAZARA_DEBUG_MEMORYMANAGER_DISABLE_REDEFINITION #define delete NzMemoryManager::NextFree(__FILE__, __LINE__), delete #define new new(__FILE__, __LINE__) #endif diff --git a/include/Nazara/Core/DebugOff.hpp b/include/Nazara/Core/DebugOff.hpp index 14df62a1b..0231febdb 100644 --- a/include/Nazara/Core/DebugOff.hpp +++ b/include/Nazara/Core/DebugOff.hpp @@ -2,7 +2,7 @@ // This file is part of the "Nazara Engine - Core module" // For conditions of distribution and use, see copyright notice in Config.hpp -#if NAZARA_CORE_MEMORYLEAKTRACKER || defined(NAZARA_DEBUG) +#if NAZARA_CORE_MEMORYMANAGER || defined(NAZARA_DEBUG) #undef delete #undef new #endif diff --git a/include/Nazara/Graphics/Config.hpp b/include/Nazara/Graphics/Config.hpp index f52e07443..99b26dde3 100644 --- a/include/Nazara/Graphics/Config.hpp +++ b/include/Nazara/Graphics/Config.hpp @@ -32,8 +32,8 @@ // À partir de combien d'instances d'un même mesh/matériau l'instancing doit-il être utilisé ? #define NAZARA_GRAPHICS_INSTANCING_MIN_INSTANCES_COUNT 10 -// Utilise un tracker pour repérer les éventuels leaks (Ralentit l'exécution) -#define NAZARA_GRAPHICS_MEMORYLEAKTRACKER 0 +// Utilise un manager de mémoire pour gérer les allocations dynamiques (détecte les leaks, ralenti l'exécution) +#define NAZARA_GRAPHICS_MEMORYMANAGER 0 // Active les tests de sécurité basés sur le code (Conseillé pour le développement) #define NAZARA_GRAPHICS_SAFE 1 diff --git a/include/Nazara/Graphics/Debug.hpp b/include/Nazara/Graphics/Debug.hpp index dcc23cc3b..2a57e4d60 100644 --- a/include/Nazara/Graphics/Debug.hpp +++ b/include/Nazara/Graphics/Debug.hpp @@ -3,6 +3,6 @@ // For conditions of distribution and use, see copyright notice in Config.hpp #include -#if NAZARA_GRAPHICS_MEMORYLEAKTRACKER || defined(NAZARA_DEBUG) - #include +#if NAZARA_GRAPHICS_MEMORYMANAGER || defined(NAZARA_DEBUG) + #include #endif diff --git a/include/Nazara/Graphics/DebugOff.hpp b/include/Nazara/Graphics/DebugOff.hpp index 0a2bed30a..e259e96d8 100644 --- a/include/Nazara/Graphics/DebugOff.hpp +++ b/include/Nazara/Graphics/DebugOff.hpp @@ -2,7 +2,7 @@ // This file is part of the "Nazara Engine - Graphics module" // For conditions of distribution and use, see copyright notice in Config.hpp -#if NAZARA_GRAPHICS_MEMORYLEAKTRACKER || defined(NAZARA_DEBUG) +#if NAZARA_GRAPHICS_MEMORYMANAGER || defined(NAZARA_DEBUG) #undef delete #undef new #endif diff --git a/include/Nazara/Lua/Config.hpp b/include/Nazara/Lua/Config.hpp index 97204505b..eca07b135 100644 --- a/include/Nazara/Lua/Config.hpp +++ b/include/Nazara/Lua/Config.hpp @@ -29,8 +29,8 @@ /// Chaque modification d'un paramètre du module nécessite une recompilation de celui-ci -// Utilise un tracker pour repérer les éventuels leaks (Ralentit l'exécution) -#define NAZARA_LUA_MEMORYLEAKTRACKER 0 +// Utilise un manager de mémoire pour gérer les allocations dynamiques (détecte les leaks, ralenti l'exécution) +#define NAZARA_LUA_MEMORYMANAGER 0 // Active les tests de sécurité basés sur le code (Conseillé pour le développement) #define NAZARA_LUA_SAFE 1 diff --git a/include/Nazara/Lua/Debug.hpp b/include/Nazara/Lua/Debug.hpp index cedeceb4b..8c60a54e9 100644 --- a/include/Nazara/Lua/Debug.hpp +++ b/include/Nazara/Lua/Debug.hpp @@ -3,6 +3,6 @@ // For conditions of distribution and use, see copyright notice in Config.hpp #include -#if NAZARA_LUA_MEMORYLEAKTRACKER || defined(NAZARA_DEBUG) - #include +#if NAZARA_LUA_MEMORYMANAGER || defined(NAZARA_DEBUG) + #include #endif diff --git a/include/Nazara/Lua/DebugOff.hpp b/include/Nazara/Lua/DebugOff.hpp index 9fce88e85..e142ba270 100644 --- a/include/Nazara/Lua/DebugOff.hpp +++ b/include/Nazara/Lua/DebugOff.hpp @@ -2,7 +2,7 @@ // This file is part of the "Nazara Engine - Lua scripting module" // For conditions of distribution and use, see copyright notice in Config.hpp -#if NAZARA_LUA_MEMORYLEAKTRACKER || defined(NAZARA_DEBUG) +#if NAZARA_LUA_MEMORYMANAGER || defined(NAZARA_DEBUG) #undef delete #undef new #endif diff --git a/include/Nazara/Noise/Config.hpp b/include/Nazara/Noise/Config.hpp index b3bb79398..d8ec10ba4 100644 --- a/include/Nazara/Noise/Config.hpp +++ b/include/Nazara/Noise/Config.hpp @@ -29,8 +29,8 @@ /// Chaque modification d'un paramètre du module nécessite une recompilation de celui-ci -// Utilise un tracker pour repérer les éventuels leaks (Ralentit l'exécution) -#define NAZARA_NOISE_MEMORYLEAKTRACKER 0 +// Utilise un manager de mémoire pour gérer les allocations dynamiques (détecte les leaks, ralenti l'exécution) +#define NAZARA_NOISE_MEMORYMANAGER 0 // Active les tests de sécurité basés sur le code (Conseillé pour le développement) #define NAZARA_NOISE_SAFE 1 diff --git a/include/Nazara/Noise/Debug.hpp b/include/Nazara/Noise/Debug.hpp index 2755e74a3..67f0bfadb 100644 --- a/include/Nazara/Noise/Debug.hpp +++ b/include/Nazara/Noise/Debug.hpp @@ -3,6 +3,6 @@ // For conditions of distribution and use, see copyright notice in Config.hpp #include -#if NAZARA_NOISE_MEMORYLEAKTRACKER || defined(NAZARA_DEBUG) - #include +#if NAZARA_NOISE_MEMORYMANAGER || defined(NAZARA_DEBUG) + #include #endif diff --git a/include/Nazara/Noise/DebugOff.hpp b/include/Nazara/Noise/DebugOff.hpp index d1dafe7c7..f4b40fb55 100644 --- a/include/Nazara/Noise/DebugOff.hpp +++ b/include/Nazara/Noise/DebugOff.hpp @@ -2,7 +2,7 @@ // This file is part of the "Nazara Engine - Noise module" // For conditions of distribution and use, see copyright notice in Config.hpp -#if NAZARA_NOISE_MEMORYLEAKTRACKER || defined(NAZARA_DEBUG) +#if NAZARA_NOISE_MEMORYMANAGER || defined(NAZARA_DEBUG) #undef delete #undef new #endif diff --git a/include/Nazara/Physics/Config.hpp b/include/Nazara/Physics/Config.hpp index dd300ee8a..101c54444 100644 --- a/include/Nazara/Physics/Config.hpp +++ b/include/Nazara/Physics/Config.hpp @@ -29,8 +29,8 @@ /// Chaque modification d'un paramètre du module nécessite une recompilation de celui-ci -// Utilise un tracker pour repérer les éventuels leaks (Ralentit l'exécution) -#define NAZARA_PHYSICS_MEMORYLEAKTRACKER 0 +// Utilise un manager de mémoire pour gérer les allocations dynamiques (détecte les leaks, ralenti l'exécution) +#define NAZARA_PHYSICS_MEMORYMANAGER 0 // Active les tests de sécurité basés sur le code (Conseillé pour le développement) #define NAZARA_PHYSICS_SAFE 1 diff --git a/include/Nazara/Physics/Debug.hpp b/include/Nazara/Physics/Debug.hpp index ad3645499..c20cb6c56 100644 --- a/include/Nazara/Physics/Debug.hpp +++ b/include/Nazara/Physics/Debug.hpp @@ -3,6 +3,6 @@ // For conditions of distribution and use, see copyright notice in Config.hpp #include -#if NAZARA_PHYSICS_MEMORYLEAKTRACKER || defined(NAZARA_DEBUG) - #include +#if NAZARA_PHYSICS_MEMORYMANAGER || defined(NAZARA_DEBUG) + #include #endif diff --git a/include/Nazara/Physics/DebugOff.hpp b/include/Nazara/Physics/DebugOff.hpp index 86b5ffbf6..40964a5dc 100644 --- a/include/Nazara/Physics/DebugOff.hpp +++ b/include/Nazara/Physics/DebugOff.hpp @@ -2,7 +2,7 @@ // This file is part of the "Nazara Engine - Physics module" // For conditions of distribution and use, see copyright notice in Config.hpp -#if NAZARA_PHYSICS_MEMORYLEAKTRACKER || defined(NAZARA_DEBUG) +#if NAZARA_PHYSICS_MEMORYMANAGER || defined(NAZARA_DEBUG) #undef delete #undef new #endif diff --git a/include/Nazara/Renderer/Config.hpp b/include/Nazara/Renderer/Config.hpp index b9b97925c..479983228 100644 --- a/include/Nazara/Renderer/Config.hpp +++ b/include/Nazara/Renderer/Config.hpp @@ -32,8 +32,8 @@ // La taille du buffer d'Instancing (définit le nombre maximum d'instances en un rendu) #define NAZARA_RENDERER_INSTANCE_BUFFER_SIZE 8192*64 // 8192 matrices 4x4 flottantes -// Utilise un tracker pour repérer les éventuels leaks (Ralentit l'exécution) -#define NAZARA_RENDERER_MEMORYLEAKTRACKER 0 +// Utilise un manager de mémoire pour gérer les allocations dynamiques (détecte les leaks, ralenti l'exécution) +#define NAZARA_RENDERER_MEMORYMANAGER 0 // Active le paramère debug des paramètres des contextes par défaut (Perte de performances mais capable de recevoir des messages d'OpenGL) #define NAZARA_RENDERER_OPENGL_DEBUG 0 diff --git a/include/Nazara/Renderer/Debug.hpp b/include/Nazara/Renderer/Debug.hpp index b610043ec..0554bfe88 100644 --- a/include/Nazara/Renderer/Debug.hpp +++ b/include/Nazara/Renderer/Debug.hpp @@ -3,6 +3,6 @@ // For conditions of distribution and use, see copyright notice in Config.hpp #include -#if NAZARA_RENDERER_MEMORYLEAKTRACKER || defined(NAZARA_DEBUG) - #include +#if NAZARA_RENDERER_MEMORYMANAGER || defined(NAZARA_DEBUG) + #include #endif diff --git a/include/Nazara/Renderer/DebugOff.hpp b/include/Nazara/Renderer/DebugOff.hpp index 947b427c7..8a417cd2b 100644 --- a/include/Nazara/Renderer/DebugOff.hpp +++ b/include/Nazara/Renderer/DebugOff.hpp @@ -2,7 +2,7 @@ // This file is part of the "Nazara Engine - Renderer module" // For conditions of distribution and use, see copyright notice in Config.hpp -#if NAZARA_RENDERER_MEMORYLEAKTRACKER || defined(NAZARA_DEBUG) +#if NAZARA_RENDERER_MEMORYMANAGER || defined(NAZARA_DEBUG) #undef delete #undef new #endif diff --git a/include/Nazara/Utility/Config.hpp b/include/Nazara/Utility/Config.hpp index 327a72157..f0fc1b90d 100644 --- a/include/Nazara/Utility/Config.hpp +++ b/include/Nazara/Utility/Config.hpp @@ -32,8 +32,8 @@ // Force les buffers à posséder un stride multiple de 32 bytes (Gain de performances sur certaines cartes/plus de consommation mémoire) #define NAZARA_UTILITY_FORCE_DECLARATION_STRIDE_MULTIPLE_OF_32 0 ///FIXME: Ne peut pas être utilisé pour l'instant -// Utilise un tracker pour repérer les éventuels leaks (Ralentit l'exécution) -#define NAZARA_UTILITY_MEMORYLEAKTRACKER 0 +// Utilise un manager de mémoire pour gérer les allocations dynamiques (détecte les leaks, ralenti l'exécution) +#define NAZARA_UTILITY_MEMORYMANAGER 0 // Le skinning doit-il prendre avantage du multi-threading ? (Boost de performances sur les processeurs multi-coeurs) #define NAZARA_UTILITY_MULTITHREADED_SKINNING 0 diff --git a/include/Nazara/Utility/Debug.hpp b/include/Nazara/Utility/Debug.hpp index 1670f1f30..ee1dc9d4e 100644 --- a/include/Nazara/Utility/Debug.hpp +++ b/include/Nazara/Utility/Debug.hpp @@ -3,6 +3,6 @@ // For conditions of distribution and use, see copyright notice in Config.hpp #include -#if NAZARA_UTILITY_MEMORYLEAKTRACKER || defined(NAZARA_DEBUG) - #include +#if NAZARA_UTILITY_MEMORYMANAGER || defined(NAZARA_DEBUG) + #include #endif diff --git a/include/Nazara/Utility/DebugOff.hpp b/include/Nazara/Utility/DebugOff.hpp index 21a042223..e94bd4e5a 100644 --- a/include/Nazara/Utility/DebugOff.hpp +++ b/include/Nazara/Utility/DebugOff.hpp @@ -2,7 +2,7 @@ // This file is part of the "Nazara Engine - Utility module" // For conditions of distribution and use, see copyright notice in Config.hpp -#if NAZARA_UTILITY_MEMORYLEAKTRACKER || defined(NAZARA_DEBUG) +#if NAZARA_UTILITY_MEMORYMANAGER || defined(NAZARA_DEBUG) #undef delete #undef new #endif diff --git a/src/Nazara/Audio/Debug/Leaks.cpp b/src/Nazara/Audio/Debug/Leaks.cpp index e9fae0a5a..5de4383c0 100644 --- a/src/Nazara/Audio/Debug/Leaks.cpp +++ b/src/Nazara/Audio/Debug/Leaks.cpp @@ -3,11 +3,9 @@ // For conditions of distribution and use, see copyright notice in Config.hpp #include -#if NAZARA_AUDIO_MEMORYLEAKTRACKER || defined(NAZARA_DEBUG) - -#define NAZARA_DEBUG_MEMORYLEAKTRACKER_DISABLE_REDEFINITION - -#include +#if NAZARA_AUDIO_MEMORYMANAGER || defined(NAZARA_DEBUG) +#define NAZARA_DEBUG_MEMORYMANAGER_DISABLE_REDEFINITION +#include #include void* operator new(std::size_t size) diff --git a/src/Nazara/Core/Debug/Leaks.cpp b/src/Nazara/Core/Debug/Leaks.cpp index 470c86cb2..d4f2c0099 100644 --- a/src/Nazara/Core/Debug/Leaks.cpp +++ b/src/Nazara/Core/Debug/Leaks.cpp @@ -3,11 +3,9 @@ // For conditions of distribution and use, see copyright notice in Config.hpp #include -#if NAZARA_CORE_MEMORYLEAKTRACKER || defined(NAZARA_DEBUG) - -#define NAZARA_DEBUG_MEMORYLEAKTRACKER_DISABLE_REDEFINITION - -#include +#if NAZARA_CORE_MEMORYMANAGER || defined(NAZARA_DEBUG) +#define NAZARA_DEBUG_MEMORYMANAGER_DISABLE_REDEFINITION +#include #include void* operator new(std::size_t size) diff --git a/src/Nazara/Core/Debug/MemoryLeakTracker.cpp b/src/Nazara/Core/Debug/MemoryManager.cpp similarity index 51% rename from src/Nazara/Core/Debug/MemoryLeakTracker.cpp rename to src/Nazara/Core/Debug/MemoryManager.cpp index 2f1dec0ab..a79854c55 100644 --- a/src/Nazara/Core/Debug/MemoryLeakTracker.cpp +++ b/src/Nazara/Core/Debug/MemoryManager.cpp @@ -2,30 +2,20 @@ // This file is part of the "Nazara Engine - Core module" // For conditions of distribution and use, see copyright notice in Config.hpp -#define NAZARA_DEBUG_MEMORYLEAKTRACKER_DISABLE_REDEFINITION +#define NAZARA_DEBUG_MEMORYMANAGER_DISABLE_REDEFINITION -#include +#include #include #include #include #include #if defined(NAZARA_PLATFORM_WINDOWS) -#include + #include #elif defined(NAZARA_PLATFORM_POSIX) -#include + #include #endif -// C'est malheureux mais le spécificateur %z de (f)printf n'est pas supporté partout -#ifdef NAZARA_COMPILER_MINGW - #ifdef NAZARA_PLATFORM_x64 - #define SIZE_T_SPECIFIER "%llu" - #else - #define SIZE_T_SPECIFIER "%u" - #endif -#else - #define SIZE_T_SPECIFIER "%zu" // Standard -#endif // Le seul fichier n'ayant pas à inclure Debug.hpp namespace @@ -41,27 +31,29 @@ namespace unsigned int magic; }; - bool initialized = false; - const unsigned int magic = 0x51429EE; - const char* MLTFileName = "NazaraLeaks.log"; - const char* nextFreeFile = "(Internal error)"; - unsigned int nextFreeLine = 0; + bool s_initialized = false; + const unsigned int s_magic = 0x51429EE; + const char* s_MLTFileName = "NazaraLeaks.log"; + const char* s_nextFreeFile = "(Internal error)"; + unsigned int s_nextFreeLine = 0; - Block ptrList = + Block s_list = { 0, nullptr, - &ptrList, - &ptrList, + &s_list, + &s_list, false, 0, - magic + s_magic }; + unsigned int s_allocatedBlock = 0; + std::size_t s_allocatedSize = 0; #if defined(NAZARA_PLATFORM_WINDOWS) - CRITICAL_SECTION mutex; + CRITICAL_SECTION s_mutex; #elif defined(NAZARA_PLATFORM_POSIX) - pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; + pthread_mutex_t s_mutex = PTHREAD_MUTEX_INITIALIZER; #endif } @@ -76,21 +68,21 @@ NzMemoryManager::~NzMemoryManager() void* NzMemoryManager::Allocate(std::size_t size, bool multi, const char* file, unsigned int line) { - if (!initialized) + if (!s_initialized) Initialize(); #if defined(NAZARA_PLATFORM_WINDOWS) - EnterCriticalSection(&mutex); + EnterCriticalSection(&s_mutex); #elif defined(NAZARA_PLATFORM_POSIX) - pthread_mutex_lock(&mutex); + pthread_mutex_lock(&s_mutex); #endif Block* ptr = reinterpret_cast(std::malloc(size+sizeof(Block))); if (!ptr) { // Pas d'information de temps (Car nécessitant une allocation) - FILE* log = std::fopen(MLTFileName, "a"); - std::fprintf(log, "Failed to allocate memory (" SIZE_T_SPECIFIER " bytes)\n", size); + FILE* log = std::fopen(s_MLTFileName, "a"); + std::fprintf(log, "Failed to allocate memory (%zu bytes)\n", size); std::fclose(log); return nullptr; // Impossible d'envoyer une exception car cela allouerait de la mémoire avec new (boucle infinie) @@ -100,20 +92,23 @@ void* NzMemoryManager::Allocate(std::size_t size, bool multi, const char* file, ptr->file = file; ptr->line = line; ptr->size = size; - ptr->magic = magic; + ptr->magic = s_magic; - ptr->prev = ptrList.prev; - ptr->next = &ptrList; - ptrList.prev->next = ptr; - ptrList.prev = ptr; + ptr->prev = s_list.prev; + ptr->next = &s_list; + s_list.prev->next = ptr; + s_list.prev = ptr; + + s_allocatedBlock++; + s_allocatedSize += size; #if defined(NAZARA_PLATFORM_WINDOWS) - LeaveCriticalSection(&mutex); + LeaveCriticalSection(&s_mutex); #elif defined(NAZARA_PLATFORM_POSIX) - pthread_mutex_unlock(&mutex); + pthread_mutex_unlock(&s_mutex); #endif - return reinterpret_cast(ptr)+sizeof(Block); + return reinterpret_cast(ptr) + sizeof(Block); } void NzMemoryManager::Free(void* pointer, bool multi) @@ -121,144 +116,148 @@ void NzMemoryManager::Free(void* pointer, bool multi) if (!pointer) return; - Block* ptr = reinterpret_cast(reinterpret_cast(pointer)-sizeof(Block)); - if (ptr->magic != magic) + Block* ptr = reinterpret_cast(reinterpret_cast(pointer) - sizeof(Block)); + if (ptr->magic != s_magic) return; #if defined(NAZARA_PLATFORM_WINDOWS) - EnterCriticalSection(&mutex); + EnterCriticalSection(&s_mutex); #elif defined(NAZARA_PLATFORM_POSIX) - pthread_mutex_lock(&mutex); + pthread_mutex_lock(&s_mutex); #endif if (ptr->array != multi) { - char* time = TimeInfo(); + char timeStr[23]; + TimeInfo(timeStr); - FILE* log = std::fopen(MLTFileName, "a"); + FILE* log = std::fopen(s_MLTFileName, "a"); - if (nextFreeFile) + if (s_nextFreeFile) { if (multi) - std::fprintf(log, "%s Warning: delete[] after new at %s:%u\n", time, nextFreeFile, nextFreeLine); + std::fprintf(log, "%s Warning: delete[] after new at %s:%u\n", timeStr, s_nextFreeFile, s_nextFreeLine); else - std::fprintf(log, "%s Warning: delete after new[] at %s:%u\n", time, nextFreeFile, nextFreeLine); + std::fprintf(log, "%s Warning: delete after new[] at %s:%u\n", timeStr, s_nextFreeFile, s_nextFreeLine); } else { if (multi) - std::fprintf(log, "%s Warning: delete[] after new at unknown position\n", time); + std::fprintf(log, "%s Warning: delete[] after new at unknown position\n", timeStr); else - std::fprintf(log, "%s Warning: delete after new[] at unknown position\n", time); + std::fprintf(log, "%s Warning: delete after new[] at unknown position\n", timeStr); } std::fclose(log); - - std::free(time); } - ptr->magic = 0; + ptr->magic = 0; // Évitons des problèmes ptr->prev->next = ptr->next; ptr->next->prev = ptr->prev; + s_allocatedBlock--; + s_allocatedSize -= ptr->size; + std::free(ptr); - nextFreeFile = nullptr; - nextFreeLine = 0; + s_nextFreeFile = nullptr; + s_nextFreeLine = 0; #if defined(NAZARA_PLATFORM_WINDOWS) - LeaveCriticalSection(&mutex); + LeaveCriticalSection(&s_mutex); #elif defined(NAZARA_PLATFORM_POSIX) - pthread_mutex_unlock(&mutex); + pthread_mutex_unlock(&s_mutex); #endif } +unsigned int NzMemoryManager::GetAllocatedBlockCount() +{ + return s_allocatedBlock; +} + +std::size_t NzMemoryManager::GetAllocatedSize() +{ + return s_allocatedSize; +} + void NzMemoryManager::NextFree(const char* file, unsigned int line) { - nextFreeFile = file; - nextFreeLine = line; + s_nextFreeFile = file; + s_nextFreeLine = line; } void NzMemoryManager::Initialize() { - char* time = TimeInfo(); + char timeStr[23]; + TimeInfo(timeStr); - FILE* file = std::fopen(MLTFileName, "w"); - std::fprintf(file, "%s ==============================\n", time); - std::fprintf(file, "%s Nazara Memory Leak Tracker \n", time); - std::fprintf(file, "%s ==============================\n", time); + FILE* file = std::fopen(s_MLTFileName, "w"); + std::fprintf(file, "%s ==============================\n", timeStr); + std::fprintf(file, "%s Nazara Memory Leak Tracker \n", timeStr); + std::fprintf(file, "%s ==============================\n", timeStr); std::fclose(file); - std::free(time); - if (std::atexit(Uninitialize) != 0) { static NzMemoryManager manager; } #ifdef NAZARA_PLATFORM_WINDOWS - InitializeCriticalSection(&mutex); + InitializeCriticalSection(&s_mutex); #endif - initialized = true; + s_initialized = true; } -char* NzMemoryManager::TimeInfo() +void NzMemoryManager::TimeInfo(char buffer[23]) { - char* buffer = reinterpret_cast(std::malloc(23*sizeof(char))); - time_t currentTime = std::time(nullptr); std::strftime(buffer, 23, "%d/%m/%Y - %H:%M:%S:", std::localtime(¤tTime)); - - return buffer; } void NzMemoryManager::Uninitialize() { #ifdef NAZARA_PLATFORM_WINDOWS - DeleteCriticalSection(&mutex); + DeleteCriticalSection(&s_mutex); #endif - FILE* log = std::fopen(MLTFileName, "a"); + FILE* log = std::fopen(s_MLTFileName, "a"); - char* time = TimeInfo(); + char timeStr[23]; + TimeInfo(timeStr); - std::fprintf(log, "%s Application finished, checking leaks...\n", time); + std::fprintf(log, "%s Application finished, checking leaks...\n", timeStr); - if (ptrList.next == &ptrList) + if (s_allocatedBlock == 0) { - std::fprintf(log, "%s ==============================\n", time); - std::fprintf(log, "%s No leak detected \n", time); - std::fprintf(log, "%s ==============================", time); + std::fprintf(log, "%s ==============================\n", timeStr); + std::fprintf(log, "%s No leak detected \n", timeStr); + std::fprintf(log, "%s ==============================", timeStr); } else { - std::fprintf(log, "%s ==============================\n", time); - std::fprintf(log, "%s Leaks have been detected \n", time); - std::fprintf(log, "%s ==============================\n\n", time); + std::fprintf(log, "%s ==============================\n", timeStr); + std::fprintf(log, "%s Leaks have been detected \n", timeStr); + std::fprintf(log, "%s ==============================\n\n", timeStr); std::fputs("Leak list:\n", log); - std::size_t totalSize = 0; - Block* ptr = ptrList.next; - unsigned int count = 0; - while (ptr != &ptrList) + Block* ptr = s_list.next; + while (ptr != &s_list) { - count++; - totalSize += ptr->size; if (ptr->file) - std::fprintf(log, "-0x%p -> " SIZE_T_SPECIFIER " bytes allocated at %s:%u\n", reinterpret_cast(ptr)+sizeof(Block), ptr->size, ptr->file, ptr->line); + std::fprintf(log, "-0x%p -> %zu bytes allocated at %s:%u\n", reinterpret_cast(ptr) + sizeof(Block), ptr->size, ptr->file, ptr->line); else - std::fprintf(log, "-0x%p -> " SIZE_T_SPECIFIER " bytes allocated at unknown position\n", reinterpret_cast(ptr)+sizeof(Block), ptr->size); + std::fprintf(log, "-0x%p -> %zu bytes allocated at unknown position\n", reinterpret_cast(ptr) + sizeof(Block), ptr->size); void* pointer = ptr; ptr = ptr->next; + std::free(pointer); } - std::fprintf(log, "\n%u blocks leaked (" SIZE_T_SPECIFIER " bytes)", count, totalSize); + std::fprintf(log, "\n%u blocks leaked (%zu bytes)", s_allocatedBlock, s_allocatedSize); } - std::free(time); std::fclose(log); } @@ -272,13 +271,13 @@ void* operator new[](std::size_t size, const char* file, unsigned int line) return NzMemoryManager::Allocate(size, true, file, line); } -void operator delete(void* ptr, const char* file, unsigned int line) throw() +void operator delete(void* ptr, const char* file, unsigned int line) noexcept { NzMemoryManager::NextFree(file, line); NzMemoryManager::Free(ptr, false); } -void operator delete[](void* ptr, const char* file, unsigned int line) throw() +void operator delete[](void* ptr, const char* file, unsigned int line) noexcept { NzMemoryManager::NextFree(file, line); NzMemoryManager::Free(ptr, true); diff --git a/src/Nazara/Core/ParameterList.cpp b/src/Nazara/Core/ParameterList.cpp index c341f98b2..bb8b6bc7b 100644 --- a/src/Nazara/Core/ParameterList.cpp +++ b/src/Nazara/Core/ParameterList.cpp @@ -3,7 +3,7 @@ // For conditions of distribution and use, see copyright notice in Config.hpp // Notre utilisation du placement new n'est pas (encore ?) compatible avec les définitions du MLT -#define NAZARA_DEBUG_MEMORYLEAKTRACKER_DISABLE_REDEFINITION +#define NAZARA_DEBUG_MEMORYMANAGER_DISABLE_REDEFINITION #include #include diff --git a/src/Nazara/Graphics/Debug/Leaks.cpp b/src/Nazara/Graphics/Debug/Leaks.cpp index 95eec00d1..232f969df 100644 --- a/src/Nazara/Graphics/Debug/Leaks.cpp +++ b/src/Nazara/Graphics/Debug/Leaks.cpp @@ -3,11 +3,9 @@ // For conditions of distribution and use, see copyright notice in Config.hpp #include -#if NAZARA_GRAPHICS_MEMORYLEAKTRACKER || defined(NAZARA_DEBUG) - -#define NAZARA_DEBUG_MEMORYLEAKTRACKER_DISABLE_REDEFINITION - -#include +#if NAZARA_GRAPHICS_MEMORYMANAGER || defined(NAZARA_DEBUG) +#define NAZARA_DEBUG_MEMORYMANAGER_DISABLE_REDEFINITION +#include #include void* operator new(std::size_t size) diff --git a/src/Nazara/Lua/Debug/Leaks.cpp b/src/Nazara/Lua/Debug/Leaks.cpp index 319224a37..ba662680c 100644 --- a/src/Nazara/Lua/Debug/Leaks.cpp +++ b/src/Nazara/Lua/Debug/Leaks.cpp @@ -3,11 +3,9 @@ // For conditions of distribution and use, see copyright notice in Config.hpp #include -#if NAZARA_LUA_MEMORYLEAKTRACKER || defined(NAZARA_DEBUG) - -#define NAZARA_DEBUG_MEMORYLEAKTRACKER_DISABLE_REDEFINITION - -#include +#if NAZARA_LUA_MEMORYMANAGER || defined(NAZARA_DEBUG) +#define NAZARA_DEBUG_MEMORYMANAGER_DISABLE_REDEFINITION +#include #include void* operator new(std::size_t size) diff --git a/src/Nazara/Lua/LuaInstance.cpp b/src/Nazara/Lua/LuaInstance.cpp index 6b054529d..23c3ab9fe 100644 --- a/src/Nazara/Lua/LuaInstance.cpp +++ b/src/Nazara/Lua/LuaInstance.cpp @@ -2,6 +2,8 @@ // This file is part of the "Nazara Engine - Lua scripting module" // For conditions of distribution and use, see copyright notice in Config.hpp +#define NAZARA_DEBUG_MEMORYMANAGER_DISABLE_REDEFINITION + #include #include #include diff --git a/src/Nazara/Noise/Debug/Leaks.cpp b/src/Nazara/Noise/Debug/Leaks.cpp index 5b7c4aff7..73f49b69e 100644 --- a/src/Nazara/Noise/Debug/Leaks.cpp +++ b/src/Nazara/Noise/Debug/Leaks.cpp @@ -3,11 +3,9 @@ // For conditions of distribution and use, see copyright notice in Config.hpp #include -#if NAZARA_NOISE_MEMORYLEAKTRACKER || defined(NAZARA_DEBUG) - -#define NAZARA_DEBUG_MEMORYLEAKTRACKER_DISABLE_REDEFINITION - -#include +#if NAZARA_NOISE_MEMORYMANAGER || defined(NAZARA_DEBUG) +#define NAZARA_DEBUG_MEMORYMANAGER_DISABLE_REDEFINITION +#include #include void* operator new(std::size_t size) diff --git a/src/Nazara/Physics/Debug/Leaks.cpp b/src/Nazara/Physics/Debug/Leaks.cpp index 34891a1f0..02cc3e294 100644 --- a/src/Nazara/Physics/Debug/Leaks.cpp +++ b/src/Nazara/Physics/Debug/Leaks.cpp @@ -3,11 +3,9 @@ // For conditions of distribution and use, see copyright notice in Config.hpp #include -#if NAZARA_PHYSICS_MEMORYLEAKTRACKER || defined(NAZARA_DEBUG) - -#define NAZARA_DEBUG_MEMORYLEAKTRACKER_DISABLE_REDEFINITION - -#include +#if NAZARA_PHYSICS_MEMORYMANAGER || defined(NAZARA_DEBUG) +#define NAZARA_DEBUG_MEMORYMANAGER_DISABLE_REDEFINITION +#include #include void* operator new(std::size_t size) diff --git a/src/Nazara/Renderer/Debug/Leaks.cpp b/src/Nazara/Renderer/Debug/Leaks.cpp index 7762695e6..938f05c91 100644 --- a/src/Nazara/Renderer/Debug/Leaks.cpp +++ b/src/Nazara/Renderer/Debug/Leaks.cpp @@ -3,11 +3,9 @@ // For conditions of distribution and use, see copyright notice in Config.hpp #include -#if NAZARA_RENDERER_MEMORYLEAKTRACKER || defined(NAZARA_DEBUG) - -#define NAZARA_DEBUG_MEMORYLEAKTRACKER_DISABLE_REDEFINITION - -#include +#if NAZARA_RENDERER_MEMORYMANAGER || defined(NAZARA_DEBUG) +#define NAZARA_DEBUG_MEMORYMANAGER_DISABLE_REDEFINITION +#include #include void* operator new(std::size_t size) diff --git a/src/Nazara/Utility/Debug/Leaks.cpp b/src/Nazara/Utility/Debug/Leaks.cpp index fde2100b5..3d3724324 100644 --- a/src/Nazara/Utility/Debug/Leaks.cpp +++ b/src/Nazara/Utility/Debug/Leaks.cpp @@ -3,11 +3,9 @@ // For conditions of distribution and use, see copyright notice in Config.hpp #include -#if NAZARA_UTILITY_MEMORYLEAKTRACKER || defined(NAZARA_DEBUG) - -#define NAZARA_DEBUG_MEMORYLEAKTRACKER_DISABLE_REDEFINITION - -#include +#if NAZARA_UTILITY_MEMORYMANAGER || defined(NAZARA_DEBUG) +#define NAZARA_DEBUG_MEMORYMANAGER_DISABLE_REDEFINITION +#include #include void* operator new(std::size_t size)