[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [28567] branches/render25: added a peak memory statistic

Joseph Eagar joeedh at gmail.com
Tue May 4 12:35:36 CEST 2010


Revision: 28567
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28567
Author:   joeedh
Date:     2010-05-04 12:35:36 +0200 (Tue, 04 May 2010)

Log Message:
-----------
added a peak memory statistic

Modified Paths:
--------------
    branches/render25/intern/guardedalloc/MEM_guardedalloc.h
    branches/render25/intern/guardedalloc/intern/mallocn.c
    branches/render25/source/blender/editors/render/render_internal.c
    branches/render25/source/blender/render/intern/source/pipeline.c

Modified: branches/render25/intern/guardedalloc/MEM_guardedalloc.h
===================================================================
--- branches/render25/intern/guardedalloc/MEM_guardedalloc.h	2010-05-04 10:16:32 UTC (rev 28566)
+++ branches/render25/intern/guardedalloc/MEM_guardedalloc.h	2010-05-04 10:35:36 UTC (rev 28567)
@@ -144,6 +144,12 @@
 	uintptr_t MEM_get_mapped_memory_in_use(void);
 	int MEM_get_memory_blocks_in_use(void);
 
+	/*reset the peak memory statistic to zero*/
+	void MEM_reset_peak_memory(void);
+
+	/*get the peak memory usage in bytes, including mmap allocations*/
+	uintptr_t MEM_get_peak_memory(void);
+
 #ifdef __cplusplus
 }
 #endif

Modified: branches/render25/intern/guardedalloc/intern/mallocn.c
===================================================================
--- branches/render25/intern/guardedalloc/intern/mallocn.c	2010-05-04 10:16:32 UTC (rev 28566)
+++ branches/render25/intern/guardedalloc/intern/mallocn.c	2010-05-04 10:35:36 UTC (rev 28567)
@@ -138,7 +138,7 @@
 	
 
 static volatile int totblock= 0;
-static volatile uintptr_t mem_in_use= 0, mmap_in_use= 0;
+static volatile uintptr_t mem_in_use= 0, mmap_in_use= 0, peak_mem = 0;
 
 static volatile struct localListBase _membase;
 static volatile struct localListBase *membase = &_membase;
@@ -293,6 +293,8 @@
 	
 	totblock++;
 	mem_in_use += len;
+
+	peak_mem = mem_in_use > peak_mem ? mem_in_use : peak_mem;
 }
 
 void *MEM_mallocN(size_t len, const char *str)
@@ -377,6 +379,7 @@
 		make_memhead_header(memh, len, str);
 		memh->mmap= 1;
 		mmap_in_use += len;
+		peak_mem = mmap_in_use > peak_mem ? mmap_in_use : peak_mem;
 		mem_unlock_thread();
 #ifdef DEBUG_MEMCOUNTER
 		if(_mallocn_count==DEBUG_MEMCOUNTER_ERROR_VAL)
@@ -802,6 +805,24 @@
 	return(name);
 }
 
+uintptr_t MEM_get_peak_memory(void)
+{
+	uintptr_t _peak_mem;
+
+	mem_lock_thread();
+	_peak_mem = peak_mem;
+	mem_unlock_thread();
+
+	return _peak_mem;
+}
+
+void MEM_reset_peak_memory(void)
+{
+	mem_lock_thread();
+	peak_mem = 0;
+	mem_unlock_thread();
+}
+
 uintptr_t MEM_get_memory_in_use(void)
 {
 	uintptr_t _mem_in_use;

Modified: branches/render25/source/blender/editors/render/render_internal.c
===================================================================
--- branches/render25/source/blender/editors/render/render_internal.c	2010-05-04 10:16:32 UTC (rev 28566)
+++ branches/render25/source/blender/editors/render/render_internal.c	2010-05-04 10:35:36 UTC (rev 28567)
@@ -455,15 +455,17 @@
 static void make_renderinfo_string(RenderStats *rs, Scene *scene, char *str)
 {
 	char info_time_str[32];	// used to be extern to header_info.c
-	uintptr_t mem_in_use, mmap_in_use;
-	float megs_used_memory, mmap_used_memory;
+	uintptr_t mem_in_use, mmap_in_use, peak_memory;
+	float megs_used_memory, mmap_used_memory, megs_peak_memory;
 	char *spos= str;
 
 	mem_in_use= MEM_get_memory_in_use();
 	mmap_in_use= MEM_get_mapped_memory_in_use();
+	peak_memory = MEM_get_peak_memory();
 
 	megs_used_memory= (mem_in_use-mmap_in_use)/(1024.0*1024.0);
 	mmap_used_memory= (mmap_in_use)/(1024.0*1024.0);
+	megs_peak_memory = (peak_memory)/(1024.0*1024.0);
 
 	if(scene->lay & 0xFF000000)
 		spos+= sprintf(spos, "Localview | ");
@@ -477,7 +479,7 @@
 		spos+= sprintf(spos, "Fra:%d  Ve:%d Fa:%d ", (scene->r.cfra), rs->totvert, rs->totface);
 		if(rs->tothalo) spos+= sprintf(spos, "Ha:%d ", rs->tothalo);
 		if(rs->totstrand) spos+= sprintf(spos, "St:%d ", rs->totstrand);
-		spos+= sprintf(spos, "La:%d Mem:%.2fM (%.2fM) ", rs->totlamp, megs_used_memory, mmap_used_memory);
+		spos+= sprintf(spos, "La:%d Mem:%.2fM (%.2fM, combined peak %.2fM) ", rs->totlamp, megs_used_memory, mmap_used_memory, megs_peak_memory);
 
 		if(rs->curfield)
 			spos+= sprintf(spos, "Field %d ", rs->curfield);

Modified: branches/render25/source/blender/render/intern/source/pipeline.c
===================================================================
--- branches/render25/source/blender/render/intern/source/pipeline.c	2010-05-04 10:16:32 UTC (rev 28566)
+++ branches/render25/source/blender/render/intern/source/pipeline.c	2010-05-04 10:35:36 UTC (rev 28567)
@@ -137,12 +137,21 @@
 
 static void stats_background(void *unused, RenderStats *rs)
 {
-	uintptr_t mem_in_use= MEM_get_memory_in_use();
-	float megs_used_memory= mem_in_use/(1024.0*1024.0);
 	char str[400], *spos= str;
+	uintptr_t mem_in_use, mmap_in_use, peak_memory;
+	float megs_used_memory, mmap_used_memory, megs_peak_memory;
+
+	mem_in_use= MEM_get_memory_in_use();
+	mmap_in_use= MEM_get_mapped_memory_in_use();
+	peak_memory = MEM_get_peak_memory();
+
+	megs_used_memory= (mem_in_use-mmap_in_use)/(1024.0*1024.0);
+	mmap_used_memory= (mmap_in_use)/(1024.0*1024.0);
+	megs_peak_memory = (peak_memory)/(1024.0*1024.0);
+
+	spos+= sprintf(spos, "Fra:%d Mem:%.2fM (%.2fM, combined peak %.2fM) ", rs->cfra,
+				   megs_used_memory, mmap_used_memory, megs_peak_memory);
 	
-	spos+= sprintf(spos, "Fra:%d Mem:%.2fM ", rs->cfra, megs_used_memory);
-	
 	if(rs->curfield)
 		spos+= sprintf(spos, "Field %d ", rs->curfield);
 	if(rs->curblur)
@@ -1521,6 +1530,7 @@
 	scene->r.cfra= frame;
 	
 	if(render_initialize_from_scene(re, scene, srl, lay, 0, 0)) {
+		MEM_reset_peak_memory();
 		do_render_all_options(re);
 	}
 	





More information about the Bf-blender-cvs mailing list