[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