Merged in merge-541 (pull request #686)

Merge to latest 541
master
Euclid Linden 2021-09-15 20:35:45 +00:00
commit c09532ac13
2 changed files with 50 additions and 0 deletions

View File

@ -27,6 +27,14 @@
#ifndef LL_LINDEN_COMMON_H
#define LL_LINDEN_COMMON_H
#include "llprofiler.h"
#if (TRACY_ENABLE) // hooks for memory profiling
void *tracy_aligned_malloc(size_t size, size_t alignment);
void tracy_aligned_free(void *memblock);
#define _aligned_malloc(X, Y) tracy_aligned_malloc((X), (Y))
#define _aligned_free(X) tracy_aligned_free((X))
#endif
// *NOTE: Please keep includes here to a minimum!
//
// Files included here are included in every library .cpp file and

View File

@ -33,6 +33,48 @@
#include "lltracethreadrecorder.h"
#include "llcleanup.h"
#if (TRACY_ENABLE)
// Override new/delet for tracy memory profiling
void *operator new(size_t size)
{
auto ptr = (malloc) (size);
if (!ptr)
{
throw std::bad_alloc();
return nullptr;
}
TracyAlloc(ptr, size);
return ptr;
}
void operator delete(void *ptr) noexcept
{
TracyFree(ptr);
(free)(ptr);
}
// C-style malloc/free can't be so easily overridden, so we define tracy versions and use
// a pre-processor #define in linden_common.h to redirect to them. The parens around the native
// functions below prevents recursive substitution by the preprocessor.
//
// Unaligned mallocs are rare in LL code but hooking them causes problems in 3p lib code (looking at
// you, Havok), so we'll only capture the aligned version.
void *tracy_aligned_malloc(size_t size, size_t alignment)
{
auto ptr = (_aligned_malloc) (size, alignment);
if (ptr) TracyAlloc(ptr, size);
return ptr;
}
void tracy_aligned_free(void *memblock)
{
TracyFree(memblock);
(_aligned_free)(memblock);
}
#endif
//static
BOOL LLCommon::sAprInitialized = FALSE;