[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23099] branches/bmesh/blender/source/ blender: another optimization pass.

Joseph Eagar joeedh at gmail.com
Thu Sep 10 03:46:55 CEST 2009


Revision: 23099
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23099
Author:   joeedh
Date:     2009-09-10 03:46:52 +0200 (Thu, 10 Sep 2009)

Log Message:
-----------
another optimization pass.  biggest change is MDeformGroup->dw is now allocated via a somewhat simplistic, if effective allocator.  This needs a little bit more work; I'd really prefer building this into guardedalloc, but the method requires mempools, which currently live in blenlib.  and I'm not sure if we can have guardedalloc linking with blenlib?  anyway, current allocator code is more of a temporary fix until I figure that out.

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/blenkernel/intern/BME_tools.c
    branches/bmesh/blender/source/blender/blenkernel/intern/armature.c
    branches/bmesh/blender/source/blender/blenkernel/intern/cloth.c
    branches/bmesh/blender/source/blender/blenkernel/intern/constraint.c
    branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c
    branches/bmesh/blender/source/blender/blenkernel/intern/deform.c
    branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/key.c
    branches/bmesh/blender/source/blender/blenkernel/intern/lattice.c
    branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/modifier.c
    branches/bmesh/blender/source/blender/blenkernel/intern/modifiers_bmesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/particle.c
    branches/bmesh/blender/source/blender/blenkernel/intern/softbody.c
    branches/bmesh/blender/source/blender/blenlib/intern/BLI_mempool.c
    branches/bmesh/blender/source/blender/blenloader/intern/readfile.c
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mesh.c
    branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c
    branches/bmesh/blender/source/blender/editors/object/object_vgroup.c
    branches/bmesh/blender/source/blender/editors/sculpt_paint/paint_vertex.c
    branches/bmesh/blender/source/blender/windowmanager/intern/wm_init_exit.c

Added Paths:
-----------
    branches/bmesh/blender/source/blender/blenlib/BLI_cellalloc.h
    branches/bmesh/blender/source/blender/blenlib/intern/BLI_cellalloc.c

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/BME_tools.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/BME_tools.c	2009-09-10 01:14:21 UTC (rev 23098)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/BME_tools.c	2009-09-10 01:46:52 UTC (rev 23099)
@@ -44,6 +44,7 @@
 #include "BKE_bmesh.h"
 #include "BLI_arithb.h"
 #include "BLI_blenlib.h"
+#include "BLI_cellalloc.h"
 
 /*split this all into a seperate bevel.c file in src*/
 

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/armature.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/armature.c	2009-09-10 01:14:21 UTC (rev 23098)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/armature.c	2009-09-10 01:46:52 UTC (rev 23099)
@@ -38,6 +38,7 @@
 
 #include "BLI_arithb.h"
 #include "BLI_blenlib.h"
+#include "BLI_cellalloc.h"
 
 #include "DNA_armature_types.h"
 #include "DNA_action_types.h"

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/cloth.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/cloth.c	2009-09-10 01:14:21 UTC (rev 23098)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/cloth.c	2009-09-10 01:46:52 UTC (rev 23099)
@@ -48,6 +48,7 @@
 #include "BKE_pointcache.h"
 
 #include "BLI_kdopbvh.h"
+#include "BLI_cellalloc.h"
 
 #ifdef _WIN32
 void tstart ( void )

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/constraint.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/constraint.c	2009-09-10 01:14:21 UTC (rev 23098)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/constraint.c	2009-09-10 01:46:52 UTC (rev 23099)
@@ -38,6 +38,7 @@
 #include "BLI_blenlib.h"
 #include "BLI_arithb.h"
 #include "BLI_editVert.h"
+#include "BLI_cellalloc.h"
 
 #include "DNA_armature_types.h"
 #include "DNA_constraint_types.h"

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c	2009-09-10 01:14:21 UTC (rev 23098)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c	2009-09-10 01:46:52 UTC (rev 23099)
@@ -38,6 +38,7 @@
 #include "BLI_blenlib.h"
 #include "BLI_linklist.h"
 #include "BLI_mempool.h"
+#include "BLI_cellalloc.h"
 
 #include "DNA_customdata_types.h"
 #include "DNA_listBase.h"
@@ -112,7 +113,7 @@
 		MDeformVert *dvert = (MDeformVert *)((char *)dest + i * size);
 
 		if(dvert->totweight) {
-			MDeformWeight *dw = MEM_callocN(dvert->totweight * sizeof(*dw),
+			MDeformWeight *dw = BLI_cellalloc_calloc(dvert->totweight * sizeof(*dw),
 											"layerCopy_mdeformvert dw");
 
 			memcpy(dw, dvert->dw, dvert->totweight * sizeof(*dw));
@@ -131,7 +132,7 @@
 		MDeformVert *dvert = (MDeformVert *)((char *)data + i * size);
 
 		if(dvert->dw) {
-			MEM_freeN(dvert->dw);
+			BLI_cellalloc_free(dvert->dw);
 			dvert->dw = NULL;
 			dvert->totweight = 0;
 		}
@@ -173,7 +174,7 @@
 
 			/* if this def_nr is not in the list, add it */
 			if(!node) {
-				MDeformWeight *tmp_dw = MEM_callocN(sizeof(*tmp_dw),
+				MDeformWeight *tmp_dw = BLI_cellalloc_calloc(sizeof(*tmp_dw),
 				                            "layerInterp_mdeformvert tmp_dw");
 				tmp_dw->def_nr = dw->def_nr;
 				tmp_dw->weight = dw->weight * interp_weight;
@@ -184,10 +185,10 @@
 	}
 
 	/* now we know how many unique deform weights there are, so realloc */
-	if(dvert->dw) MEM_freeN(dvert->dw);
+	if(dvert->dw) BLI_cellalloc_free(dvert->dw);
 
 	if(totweight) {
-		dvert->dw = MEM_callocN(sizeof(*dvert->dw) * totweight,
+		dvert->dw = BLI_cellalloc_calloc(sizeof(*dvert->dw) * totweight,
 		                        "layerInterp_mdeformvert dvert->dw");
 		dvert->totweight = totweight;
 

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/deform.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/deform.c	2009-09-10 01:14:21 UTC (rev 23098)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/deform.c	2009-09-10 01:46:52 UTC (rev 23099)
@@ -60,6 +60,7 @@
 
 #include "BLI_blenlib.h"
 #include "BLI_arithb.h"
+#include "BLI_cellalloc.h"
 
 #ifdef HAVE_CONFIG_H
 #include <config.h>

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c	2009-09-10 01:14:21 UTC (rev 23098)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c	2009-09-10 01:46:52 UTC (rev 23099)
@@ -132,6 +132,9 @@
 	
 	if (tm->looptris) MEM_freeN(tm->looptris);
 
+#if 0 //simple quad/triangle code for performance testing purposes
+	looptris = MEM_callocN(sizeof(void*)*bm->totface*8, "looptris");
+
 	f = BMIter_New(&iter, bm, BM_FACES_OF_MESH, NULL);
 	for ( ; f; f=BMIter_Step(&iter)) {
 		EditVert *v, *lastv=NULL, *firstv=NULL;
@@ -141,6 +144,42 @@
 		/*don't consider two-edged faces*/
 		if (f->len < 3) continue;
 		
+		//V_GROW(looptris);
+		//V_GROW(looptris);
+		//V_GROW(looptris);
+
+		looptris[i*3] = f->loopbase;
+		looptris[i*3+1] = f->loopbase->head.next;
+		looptris[i*3+2] = f->loopbase->head.next->next;
+		i++;
+
+		if (f->len > 3) {
+			//V_GROW(looptris);
+			//V_GROW(looptris);
+			//V_GROW(looptris);
+
+			looptris[i*3] = f->loopbase;
+			looptris[i*3+1] = f->loopbase->head.next->next;
+			looptris[i*3+2] = f->loopbase->head.next->next->next;
+			i++;
+		}
+
+	}
+
+	tm->tottri = i;
+	tm->looptris = looptris;
+	return;
+#endif
+
+	f = BMIter_New(&iter, bm, BM_FACES_OF_MESH, NULL);
+	for ( ; f; f=BMIter_Step(&iter)) {
+		EditVert *v, *lastv=NULL, *firstv=NULL;
+		EditEdge *e;
+		EditFace *efa;
+
+		/*don't consider two-edged faces*/
+		if (f->len < 3) continue;
+		
 		/*scanfill time*/
 		l = BMIter_New(&liter, bm, BM_LOOPS_OF_FACE, f);
 		for (j=0; l; l=BMIter_Step(&liter), j++) {
@@ -360,7 +399,7 @@
 {
 	EditDerivedBMesh *bmdm= (EditDerivedBMesh*) dm;
 
-	bmdm_recalc_lookups(bmdm);
+	//bmdm_recalc_lookups(bmdm);
 }
 
 static void bmDM_foreachMappedVert(DerivedMesh *dm, void (*func)(void *userData, int index, float *co, float *no_f, short *no_s), void *userData)
@@ -1463,9 +1502,9 @@
 			MEM_freeN(bmdm->faceNos);
 		}
 		
-		BLI_ghash_free(bmdm->fhash, NULL, NULL);
-		BLI_ghash_free(bmdm->ehash, NULL, NULL);
-		BLI_ghash_free(bmdm->vhash, NULL, NULL);
+		if (bmdm->fhash) BLI_ghash_free(bmdm->fhash, NULL, NULL);
+		if (bmdm->ehash) BLI_ghash_free(bmdm->ehash, NULL, NULL);
+		if (bmdm->vhash) BLI_ghash_free(bmdm->vhash, NULL, NULL);
 
 		if (bmdm->vtable) MEM_freeN(bmdm->vtable);
 		if (bmdm->etable) MEM_freeN(bmdm->etable);
@@ -1630,7 +1669,7 @@
 		}
 	}
 
-	bmdm_recalc_lookups(bmdm);
+	//bmdm_recalc_lookups(bmdm);
 
 	return (DerivedMesh*) bmdm;
 }

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/key.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/key.c	2009-09-10 01:14:21 UTC (rev 23098)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/key.c	2009-09-10 01:46:52 UTC (rev 23099)
@@ -58,6 +58,7 @@
 #include "BKE_utildefines.h"
 
 #include "BLI_blenlib.h"
+#include "BLI_cellalloc.h"
 
 
 #ifdef HAVE_CONFIG_H

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/lattice.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/lattice.c	2009-09-10 01:14:21 UTC (rev 23098)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/lattice.c	2009-09-10 01:46:52 UTC (rev 23099)
@@ -40,6 +40,7 @@
 
 #include "BLI_blenlib.h"
 #include "BLI_arithb.h"
+#include "BLI_cellalloc.h"
 
 #include "DNA_armature_types.h"
 #include "DNA_mesh_types.h"

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c	2009-09-10 01:14:21 UTC (rev 23098)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c	2009-09-10 01:46:52 UTC (rev 23099)
@@ -246,7 +246,7 @@
 	
 	for (i=0; i<copycount; i++){
 		if (src[i].dw){
-			dst[i].dw = MEM_callocN (sizeof(MDeformWeight)*src[i].totweight, "copy_deformWeight");
+			dst[i].dw = BLI_cellalloc_calloc (sizeof(MDeformWeight)*src[i].totweight, "copy_deformWeight");
 			memcpy (dst[i].dw, src[i].dw, sizeof (MDeformWeight)*src[i].totweight);
 		}
 	}

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/modifier.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/modifier.c	2009-09-10 01:14:21 UTC (rev 23098)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/modifier.c	2009-09-10 01:46:52 UTC (rev 23099)
@@ -50,6 +50,7 @@
 #include "BLI_edgehash.h"
 #include "BLI_ghash.h"
 #include "BLI_memarena.h"
+#include "BLI_cellalloc.h"
 
 #include "MEM_guardedalloc.h"
 

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/modifiers_bmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/modifiers_bmesh.c	2009-09-10 01:14:21 UTC (rev 23098)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/modifiers_bmesh.c	2009-09-10 01:46:52 UTC (rev 23099)
@@ -45,6 +45,7 @@
 #include "BLI_edgehash.h"
 #include "BLI_ghash.h"
 #include "BLI_memarena.h"
+#include "BLI_cellalloc.h"
 
 #include "MEM_guardedalloc.h"
 
@@ -288,7 +289,7 @@
 	int numVerts, numEdges, numFaces;
 	int maxVerts, maxEdges, maxFaces;
 	int finalVerts, finalEdges, finalFaces;
-	int *indexMap;
+	int *indexMap = NULL;
 	DerivedMesh *result, *start_cap = NULL, *end_cap = NULL;
 	MVert *src_mvert;
 
@@ -406,7 +407,6 @@
 
 		#define _E(s, i) ((BMVert**)(s)->data.buf)[i]
 
-#if 0
 		/*calculate merge mapping*/
 		if (j == 0) {
 			BMOperator findop;
@@ -444,20 +444,19 @@
 
 			BMO_Finish_Op(em->bm, &findop);
 		} 
-#endif
 
 		/*generate merge mappping using index map.  we do this by using the
 		  operator slots as lookup arrays.*/

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list