updating debug manager
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
diff --git a/include/freetype/config/ftoption.h b/include/freetype/config/ftoption.h
index 06ef56d..844a71f 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 f35aafb..011d699 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;
}