[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [60670] trunk/blender: add MEM_SIZE_OPTIMAL to avoid memory fragmentation & waste lost to slop-space .

Campbell Barton ideasman42 at gmail.com
Thu Oct 10 20:18:13 CEST 2013


Revision: 60670
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=60670
Author:   campbellbarton
Date:     2013-10-10 18:18:13 +0000 (Thu, 10 Oct 2013)
Log Message:
-----------
add MEM_SIZE_OPTIMAL to avoid memory fragmentation & waste lost to slop-space.

Modified Paths:
--------------
    trunk/blender/intern/guardedalloc/MEM_guardedalloc.h
    trunk/blender/source/blender/blenkernel/intern/mask_rasterize.c
    trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c
    trunk/blender/source/blender/blenlib/BLI_memarena.h
    trunk/blender/source/blender/blenlib/BLI_scanfill.h
    trunk/blender/source/blender/blenlib/intern/BLI_heap.c
    trunk/blender/source/blender/bmesh/tools/bmesh_bevel.c
    trunk/blender/source/blender/editors/mesh/editmesh_knife.c
    trunk/blender/source/blender/editors/sculpt_paint/paint_image_proj.c
    trunk/blender/source/blender/editors/sculpt_paint/paint_vertex.c
    trunk/blender/source/blender/editors/uvedit/uvedit_parametrizer.c

Modified: trunk/blender/intern/guardedalloc/MEM_guardedalloc.h
===================================================================
--- trunk/blender/intern/guardedalloc/MEM_guardedalloc.h	2013-10-10 17:28:01 UTC (rev 60669)
+++ trunk/blender/intern/guardedalloc/MEM_guardedalloc.h	2013-10-10 18:18:13 UTC (rev 60670)
@@ -173,6 +173,10 @@
 
 #define MEM_SAFE_FREE(v) if (v) { MEM_freeN(v); v = NULL; } (void)0
 
+/* overhead for lockfree allocator (use to avoid slop-space) */
+#define MEM_SIZE_OVERHEAD sizeof(size_t)
+#define MEM_SIZE_OPTIMAL(size) ((size) - MEM_SIZE_OVERHEAD)
+
 #ifndef NDEBUG
 extern const char *(*MEM_name_ptr)(void *vmemh);
 #endif

Modified: trunk/blender/source/blender/blenkernel/intern/mask_rasterize.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mask_rasterize.c	2013-10-10 17:28:01 UTC (rev 60669)
+++ trunk/blender/source/blender/blenkernel/intern/mask_rasterize.c	2013-10-10 18:18:13 UTC (rev 60670)
@@ -409,7 +409,7 @@
 
 static void layer_bucket_init(MaskRasterLayer *layer, const float pixel_size)
 {
-	MemArena *arena = BLI_memarena_new(1 << 16, __func__);
+	MemArena *arena = BLI_memarena_new(MEM_SIZE_OPTIMAL(1 << 16), __func__);
 
 	const float bucket_dim_x = BLI_rctf_size_x(&layer->bounds);
 	const float bucket_dim_y = BLI_rctf_size_y(&layer->bounds);

Modified: trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c	2013-10-10 17:28:01 UTC (rev 60669)
+++ trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c	2013-10-10 18:18:13 UTC (rev 60670)
@@ -170,7 +170,7 @@
 
 	if (useArena) {
 		CCGAllocatorIFC allocatorIFC;
-		CCGAllocatorHDL allocator = BLI_memarena_new((1 << 16), "subsurf arena");
+		CCGAllocatorHDL allocator = BLI_memarena_new(MEM_SIZE_OPTIMAL(1 << 16), "subsurf arena");
 
 		allocatorIFC.alloc = arena_alloc;
 		allocatorIFC.realloc = arena_realloc;

Modified: trunk/blender/source/blender/blenlib/BLI_memarena.h
===================================================================
--- trunk/blender/source/blender/blenlib/BLI_memarena.h	2013-10-10 17:28:01 UTC (rev 60669)
+++ trunk/blender/source/blender/blenlib/BLI_memarena.h	2013-10-10 18:18:13 UTC (rev 60670)
@@ -47,7 +47,7 @@
  * enough to not cause much internal fragmentation,
  * small enough not to waste resources
  */
-#define BLI_MEMARENA_STD_BUFSIZE    (1 << 14)
+#define BLI_MEMARENA_STD_BUFSIZE MEM_SIZE_OPTIMAL(1 << 14)
 
 struct MemArena;
 typedef struct MemArena MemArena;

Modified: trunk/blender/source/blender/blenlib/BLI_scanfill.h
===================================================================
--- trunk/blender/source/blender/blenlib/BLI_scanfill.h	2013-10-10 17:28:01 UTC (rev 60669)
+++ trunk/blender/source/blender/blenlib/BLI_scanfill.h	2013-10-10 18:18:13 UTC (rev 60670)
@@ -51,7 +51,7 @@
 	struct MemArena *arena;
 } ScanFillContext;
 
-#define BLI_SCANFILL_ARENA_SIZE 16384
+#define BLI_SCANFILL_ARENA_SIZE MEM_SIZE_OPTIMAL(1 << 14)
 
 typedef struct ScanFillVert {
 	struct ScanFillVert *next, *prev;

Modified: trunk/blender/source/blender/blenlib/intern/BLI_heap.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/BLI_heap.c	2013-10-10 17:28:01 UTC (rev 60669)
+++ trunk/blender/source/blender/blenlib/intern/BLI_heap.c	2013-10-10 18:18:13 UTC (rev 60670)
@@ -127,7 +127,7 @@
 	/* ensure we have at least one so we can keep doubling it */
 	heap->bufsize = MAX2(1, tot_reserve);
 	heap->tree = (HeapNode **)MEM_mallocN(heap->bufsize * sizeof(HeapNode *), "BLIHeapTree");
-	heap->arena = BLI_memarena_new(1 << 16, "heap arena");
+	heap->arena = BLI_memarena_new(MEM_SIZE_OPTIMAL(1 << 16), "heap arena");
 
 	return heap;
 }

Modified: trunk/blender/source/blender/bmesh/tools/bmesh_bevel.c
===================================================================
--- trunk/blender/source/blender/bmesh/tools/bmesh_bevel.c	2013-10-10 17:28:01 UTC (rev 60669)
+++ trunk/blender/source/blender/bmesh/tools/bmesh_bevel.c	2013-10-10 18:18:13 UTC (rev 60670)
@@ -2389,7 +2389,7 @@
 	if (bp.offset > 0) {
 		/* primary alloc */
 		bp.vert_hash = BLI_ghash_ptr_new(__func__);
-		bp.mem_arena = BLI_memarena_new((1 << 16), __func__);
+		bp.mem_arena = BLI_memarena_new(MEM_SIZE_OPTIMAL(1 << 16), __func__);
 		BLI_memarena_use_calloc(bp.mem_arena);
 
 		if (limit_offset)

Modified: trunk/blender/source/blender/editors/mesh/editmesh_knife.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_knife.c	2013-10-10 17:28:01 UTC (rev 60669)
+++ trunk/blender/source/blender/editors/mesh/editmesh_knife.c	2013-10-10 18:18:13 UTC (rev 60670)
@@ -2131,7 +2131,7 @@
 	facenet_entry *entry;
 	ListBase *face_nets = MEM_callocN(sizeof(ListBase) * bm->totface, "face_nets");
 	BMFace **faces = MEM_callocN(sizeof(BMFace *) * bm->totface, "faces knife");
-	MemArena *arena = BLI_memarena_new(1 << 16, "knifenet_fill_faces");
+	MemArena *arena = BLI_memarena_new(MEM_SIZE_OPTIMAL(1 << 16), "knifenet_fill_faces");
 	SmallHash shash;
 	RNG *rng;
 	int i, j, k = 0, totface = bm->totface;
@@ -3159,7 +3159,7 @@
 	                          (only_select ? BMBVH_RESPECT_SELECT : BMBVH_RESPECT_HIDDEN),
 	                          kcd->cagecos, false);
 
-	kcd->arena = BLI_memarena_new(1 << 15, "knife");
+	kcd->arena = BLI_memarena_new(MEM_SIZE_OPTIMAL(1 << 15), "knife");
 	kcd->vthresh = KMAXDIST - 1;
 	kcd->ethresh = KMAXDIST;
 

Modified: trunk/blender/source/blender/editors/sculpt_paint/paint_image_proj.c
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/paint_image_proj.c	2013-10-10 17:28:01 UTC (rev 60669)
+++ trunk/blender/source/blender/editors/sculpt_paint/paint_image_proj.c	2013-10-10 18:18:13 UTC (rev 60670)
@@ -3129,7 +3129,7 @@
 		ps->thread_tot = 1;
 
 	for (a = 0; a < ps->thread_tot; a++) {
-		ps->arena_mt[a] = BLI_memarena_new(1 << 16, "project paint arena");
+		ps->arena_mt[a] = BLI_memarena_new(MEM_SIZE_OPTIMAL(1 << 16), "project paint arena");
 	}
 
 	arena = ps->arena_mt[0];
@@ -3841,10 +3841,10 @@
 		pos_ofs[0] = pos[0] - lastpos[0];
 		pos_ofs[1] = pos[1] - lastpos[1];
 
-		smearArena = BLI_memarena_new(1 << 16, "paint smear arena");
+		smearArena = BLI_memarena_new(MEM_SIZE_OPTIMAL(1 << 16), "paint smear arena");
 	}
 	else if (tool == PAINT_TOOL_SOFTEN) {
-		softenArena = BLI_memarena_new(1 << 16, "paint soften arena");
+		softenArena = BLI_memarena_new(MEM_SIZE_OPTIMAL(1 << 16), "paint soften arena");
 	}
 
 	/* printf("brush bounds %d %d %d %d\n", bucketMin[0], bucketMin[1], bucketMax[0], bucketMax[1]); */

Modified: trunk/blender/source/blender/editors/sculpt_paint/paint_vertex.c
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/paint_vertex.c	2013-10-10 17:28:01 UTC (rev 60669)
+++ trunk/blender/source/blender/editors/sculpt_paint/paint_vertex.c	2013-10-10 18:18:13 UTC (rev 60670)
@@ -2788,7 +2788,7 @@
 	int *origIndex;
 	int i;
 
-	vd->polyfacemap_arena = BLI_memarena_new(1 << 13, "vpaint tmp");
+	vd->polyfacemap_arena = BLI_memarena_new(BLI_MEMARENA_STD_BUFSIZE, "vpaint tmp");
 	BLI_memarena_use_calloc(vd->polyfacemap_arena);
 
 	vd->polyfacemap = BLI_memarena_alloc(vd->polyfacemap_arena, sizeof(ListBase) * me->totpoly);

Modified: trunk/blender/source/blender/editors/uvedit/uvedit_parametrizer.c
===================================================================
--- trunk/blender/source/blender/editors/uvedit/uvedit_parametrizer.c	2013-10-10 17:28:01 UTC (rev 60669)
+++ trunk/blender/source/blender/editors/uvedit/uvedit_parametrizer.c	2013-10-10 18:18:13 UTC (rev 60670)
@@ -4123,7 +4123,7 @@
 	MEM_freeN(nodesx);
 	MEM_freeN(nodesy);
 
-	arena = BLI_memarena_new(1 << 16, "param smooth arena");
+	arena = BLI_memarena_new(MEM_SIZE_OPTIMAL(1 << 16), "param smooth arena");
 	root = p_node_new(arena, tri, esize * 2, minv, maxv, 0);
 
 	for (v = chart->verts; v; v = v->nextlink)
@@ -4143,7 +4143,7 @@
 	PHandle *handle = MEM_callocN(sizeof(*handle), "PHandle");
 	handle->construction_chart = p_chart_new(handle);
 	handle->state = PHANDLE_STATE_ALLOCATED;
-	handle->arena = BLI_memarena_new((1 << 16), "param construct arena");
+	handle->arena = BLI_memarena_new(MEM_SIZE_OPTIMAL(1 << 16), "param construct arena");
 	handle->aspx = 1.0f;
 	handle->aspy = 1.0f;
 	handle->do_aspect = FALSE;




More information about the Bf-blender-cvs mailing list