Commit 8dc0fb855eb2d9d54525d4323bbd63a7c79c073e

David Turner 2001-10-22T20:15:29

updating debug manager

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;
   }