diff --git a/include/freetype/config/ftoption.h b/include/freetype/config/ftoption.h index 06ef56d3c..844a71f36 100644 --- a/include/freetype/config/ftoption.h +++ b/include/freetype/config/ftoption.h @@ -236,12 +236,11 @@ FT_BEGIN_HEADER /* */ /* FreeType now comes with an integrated memory debugger that is */ /* capable of detecting simple errors like memory leaks or double */ - /* deletes. You should define the FT_DEBUG_MEMORY macro to enable */ - /* it.. */ + /* deletes. To compile it within your build of the library, you should */ + /* define FT_DEBUG_MEMORY here. */ /* */ - /* beware that when the debugging memory allocator is used, FreeType */ - /* will use a _lot_ more memory. You should always ensure that this */ - /* macro is undefined in release or testing builds.. */ + /* note that the memory debugger is only activated at runtime when */ + /* when the _environment_ variable "FT_DEBUG_MEMORY" is also defined ! */ /* */ #define FT_DEBUG_MEMORY diff --git a/src/base/ftdbgmem.c b/src/base/ftdbgmem.c index f35aafb30..011d69982 100644 --- a/src/base/ftdbgmem.c +++ b/src/base/ftdbgmem.c @@ -39,6 +39,7 @@ FT_ULong alloc_total; FT_ULong alloc_current; + FT_ULong alloc_max; const char* file_name; FT_Long line_no; @@ -167,7 +168,6 @@ } - static FT_MemTable ft_mem_table_new( void ) { @@ -242,11 +242,14 @@ table->size = 0; table->nodes = 0; free( table ); + + printf( "FreeType: total memory allocations = %ld\n", table->alloc_total ); + printf( "FreeType: maximum memory footprint = %ld\n", table->alloc_max ); if ( leak_count > 0 ) - ft_mem_debug_panic( "%ld bytes of memory leaked in %ld blocks\n", + ft_mem_debug_panic( "FreeType: %ld bytes of memory leaked in %ld blocks\n", leaks, leak_count ); - printf( "no FreeType memory leaks detected !!\n" ); + printf( "FreeType: no memory leaks detected !!\n" ); } } @@ -325,6 +328,8 @@ table->alloc_total += size; table->alloc_current += size; + if ( table->alloc_current > table->alloc_max ) + table->alloc_max = table->alloc_current; if ( table->nodes*3 < table->size || table->size *3 < table->nodes ) @@ -446,15 +451,18 @@ { FT_MemTable table; FT_Int result = 0; - - table = ft_mem_table_new(); - if ( table ) - { - memory->user = table; - memory->alloc = ft_mem_debug_alloc; - memory->realloc = ft_mem_debug_realloc; - memory->free = ft_mem_debug_free; - result = 1; + + if ( getenv( "FT_DEBUG_MEMORY") ) + { + table = ft_mem_table_new(); + if ( table ) + { + memory->user = table; + memory->alloc = ft_mem_debug_alloc; + memory->realloc = ft_mem_debug_realloc; + memory->free = ft_mem_debug_free; + result = 1; + } } return result; }