Selaa lähdekoodia

Added optional bbGCAllocCount.

woollybah 6 vuotta sitten
vanhempi
commit
176131e2bb
3 muutettua tiedostoa jossa 23 lisäystä ja 0 poistoa
  1. 13 0
      blitz.mod/blitz_gc.c
  2. 7 0
      blitz.mod/blitz_gc.h
  3. 3 0
      blitz.mod/blitz_memory.c

+ 13 - 0
blitz.mod/blitz_gc.c

@@ -25,6 +25,10 @@ extern void *_end;
 #endif
 #endif
 #endif
 #endif
 
 
+#ifdef BBCC_ALLOCCOUNT
+BBUInt64 bbGCAllocCount = 0;
+#endif
+
 static void gc_finalizer( void *mem,void *pool ){
 static void gc_finalizer( void *mem,void *pool ){
 	((BBGCPool*)pool)->free( (BBGCMem*)mem );
 	((BBGCPool*)pool)->free( (BBGCMem*)mem );
 }
 }
@@ -73,6 +77,9 @@ BBGCMem *bbGCAlloc( int sz,BBGCPool *pool ){
 	GC_finalization_proc ofn;
 	GC_finalization_proc ofn;
 	void *ocd;
 	void *ocd;
 	BBGCMem *q=(BBGCMem*) GC_MALLOC( sz );
 	BBGCMem *q=(BBGCMem*) GC_MALLOC( sz );
+	#ifdef BBCC_ALLOCCOUNT
+	++bbGCAllocCount;
+	#endif
 	q->pool=pool;
 	q->pool=pool;
 	//q->refs=-1;
 	//q->refs=-1;
 	GC_REGISTER_FINALIZER_NO_ORDER( q,gc_finalizer,pool,&ofn,&ocd );
 	GC_REGISTER_FINALIZER_NO_ORDER( q,gc_finalizer,pool,&ofn,&ocd );
@@ -86,6 +93,9 @@ BBObject * bbGCAllocObject( int sz,BBClass *clas,int flags ){
 	}else{
 	}else{
 		q=(BBObject*)GC_MALLOC( sz );
 		q=(BBObject*)GC_MALLOC( sz );
 	}
 	}
+	#ifdef BBCC_ALLOCCOUNT
+	++bbGCAllocCount;
+	#endif
 	q->clas=clas;
 	q->clas=clas;
 	//q->refs=-1;
 	//q->refs=-1;
 	if( flags & BBGC_FINALIZE ){
 	if( flags & BBGC_FINALIZE ){
@@ -160,6 +170,9 @@ void bbGCRetain( BBObject *p ) {
 	struct retain_node * node = (struct retain_node *)GC_MALLOC(sizeof(struct retain_node));
 	struct retain_node * node = (struct retain_node *)GC_MALLOC(sizeof(struct retain_node));
 	node->count = 1;
 	node->count = 1;
 	node->obj = p;
 	node->obj = p;
+	#ifdef BBCC_ALLOCCOUNT
+	++bbGCAllocCount;
+	#endif
 	
 	
 	struct retain_node * old_node = (struct retain_node *)avl_map(&node->link, node_compare, &retain_root);
 	struct retain_node * old_node = (struct retain_node *)avl_map(&node->link, node_compare, &retain_root);
 	if (&node->link != &old_node->link) {
 	if (&node->link != &old_node->link) {

+ 7 - 0
blitz.mod/blitz_gc.h

@@ -9,6 +9,9 @@
 extern "C"{
 extern "C"{
 #endif
 #endif
 
 
+// uncomment to enable allocation counting
+//#define BBCC_ALLOCCOUNT
+
 #define BBGC_MANYREFS 0x40000000
 #define BBGC_MANYREFS 0x40000000
 
 
 //for bbGCSetMode
 //for bbGCSetMode
@@ -32,6 +35,10 @@ extern "C"{
 #endif
 #endif
 void*	bbGCRootRegs( void *p );
 void*	bbGCRootRegs( void *p );
 
 
+#ifdef BBCC_ALLOCCOUNT
+BBUInt64 bbGCAllocCount;
+#endif
+
 typedef struct BBGCMem BBGCMem;
 typedef struct BBGCMem BBGCMem;
 typedef struct BBGCPool BBGCPool;
 typedef struct BBGCPool BBGCPool;
 
 

+ 3 - 0
blitz.mod/blitz_memory.c

@@ -11,6 +11,9 @@ void *bbMemAlloc( size_t size ){
 	p=malloc( size );
 	p=malloc( size );
 #else
 #else
 	p=GC_MALLOC_ATOMIC_UNCOLLECTABLE( size );
 	p=GC_MALLOC_ATOMIC_UNCOLLECTABLE( size );
+	#ifdef BBCC_ALLOCCOUNT
+	++bbGCAllocCount;
+	#endif
 #endif
 #endif
 	return p;
 	return p;