[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13088] trunk/blender: while trying to debug memory leaks, extended MEM_printmemlist to print a python dict and some lines at the end to format it in a useful way when run as a python script .

Campbell Barton ideasman42 at gmail.com
Tue Jan 1 17:14:08 CET 2008


Revision: 13088
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13088
Author:   campbellbarton
Date:     2008-01-01 17:14:08 +0100 (Tue, 01 Jan 2008)

Log Message:
-----------
while trying to debug memory leaks, extended MEM_printmemlist to print a python dict and some lines at the end to format it in a useful way when run as a python script.

Modified Paths:
--------------
    trunk/blender/intern/guardedalloc/intern/mallocn.c
    trunk/blender/source/blender/src/editscreen.c

Modified: trunk/blender/intern/guardedalloc/intern/mallocn.c
===================================================================
--- trunk/blender/intern/guardedalloc/intern/mallocn.c	2008-01-01 15:53:38 UTC (rev 13087)
+++ trunk/blender/intern/guardedalloc/intern/mallocn.c	2008-01-01 16:14:08 UTC (rev 13088)
@@ -333,6 +333,7 @@
 }
 
 
+/* Prints in python syntax for easy */
 void MEM_printmemlist()
 {
 	MemHead *membl;
@@ -341,13 +342,33 @@
 
 	membl = membase->first;
 	if (membl) membl = MEMNEXT(membl);
+	
+	print_error("# membase_debug.py\n");
+	print_error("membase = [\\\n");
 	while(membl) {
-		print_error("%s len: %d %p\n",membl->name,membl->len, membl+1);
+		fprintf(stderr, "{'len':%i, 'name':'''%s''', 'pointer':'%p'},\\\n", membl->len, membl->name, membl+1);
 		if(membl->next)
 			membl= MEMNEXT(membl->next);
 		else break;
 	}
-
+	fprintf(stderr, "]\n\n");
+	fprintf(stderr,
+"mb_userinfo = {}\n"
+"totmem = 0\n"
+"for mb_item in membase:\n"
+"\tmb_item_user_size = mb_userinfo.setdefault(mb_item['name'], [0,0])\n"
+"\tmb_item_user_size[0] += 1 # Add a user\n"
+"\tmb_item_user_size[1] += mb_item['len'] # Increment the size\n"
+"\ttotmem += mb_item['len']\n"
+"print '(membase) items:', len(membase), '| unique-names:', len(mb_userinfo), '| total-mem:', totmem\n"
+"mb_userinfo_sort = mb_userinfo.items()\n"
+"for sort_name, sort_func in (('size', lambda a: -a[1][1]), ('users', lambda a: -a[1][0]), ('name', lambda a: a[0])):\n"
+"\tprint '\\nSorting by:', sort_name\n"
+"\tmb_userinfo_sort.sort(key = sort_func)\n"
+"\tfor item in mb_userinfo_sort:\n"
+"\t\tprint 'name:%%s, users:%%i, len:%%i' %% (item[0], item[1][0], item[1][1])\n"
+	);
+	
 	mem_unlock_thread();
 }
 

Modified: trunk/blender/source/blender/src/editscreen.c
===================================================================
--- trunk/blender/source/blender/src/editscreen.c	2008-01-01 15:53:38 UTC (rev 13087)
+++ trunk/blender/source/blender/src/editscreen.c	2008-01-01 16:14:08 UTC (rev 13088)
@@ -1397,9 +1397,14 @@
 			towin= 0;
 		}
 		else if (event==QKEY) {
-			if((G.obedit && G.obedit->type==OB_FONT && g_activearea->spacetype==SPACE_VIEW3D)||g_activearea->spacetype==SPACE_TEXT||g_activearea->spacetype==SPACE_SCRIPT);
+			/* Temp place to print mem debugging info ctrl+alt+shift + qkey */
+			if ( G.qual == (LR_SHIFTKEY | LR_ALTKEY | LR_CTRLKEY) ) {
+				MEM_printmemlist();
+			}
+			
+			else if((G.obedit && G.obedit->type==OB_FONT && g_activearea->spacetype==SPACE_VIEW3D)||g_activearea->spacetype==SPACE_TEXT||g_activearea->spacetype==SPACE_SCRIPT);
 			else {
-				if(val && (G.qual & LR_CTRLKEY)) {
+				if(val && (G.qual == LR_CTRLKEY)) {
 					if(okee("Quit Blender")) exit_usiblender();
 				}
 				towin= 0;





More information about the Bf-blender-cvs mailing list