[Bf-blender-cvs] [8486ee3] master: PBVH: use realloc/recalloc

Campbell Barton noreply at git.blender.org
Tue Apr 14 09:58:22 CEST 2015


Commit: 8486ee39bd689f8659cf90cc6942560225de7527
Author: Campbell Barton
Date:   Tue Apr 14 16:02:38 2015 +1000
Branches: master
https://developer.blender.org/rB8486ee39bd689f8659cf90cc6942560225de7527

PBVH: use realloc/recalloc

===================================================================

M	source/blender/blenkernel/intern/pbvh.c

===================================================================

diff --git a/source/blender/blenkernel/intern/pbvh.c b/source/blender/blenkernel/intern/pbvh.c
index 5e07437..c9e632b 100644
--- a/source/blender/blenkernel/intern/pbvh.c
+++ b/source/blender/blenkernel/intern/pbvh.c
@@ -232,16 +232,11 @@ static int partition_indices_material(PBVH *bvh, int lo, int hi)
 
 void pbvh_grow_nodes(PBVH *bvh, int totnode)
 {
-	if (totnode > bvh->node_mem_count) {
-		PBVHNode *prev = bvh->nodes;
-		bvh->node_mem_count *= 1.33;
+	if (UNLIKELY(totnode > bvh->node_mem_count)) {
+		bvh->node_mem_count = bvh->node_mem_count + (bvh->node_mem_count / 3);
 		if (bvh->node_mem_count < totnode)
 			bvh->node_mem_count = totnode;
-		bvh->nodes = MEM_mallocN(sizeof(PBVHNode) * bvh->node_mem_count,
-		                         "bvh nodes");
-		memcpy(bvh->nodes, prev, bvh->totnode * sizeof(PBVHNode));
-		memset(bvh->nodes + bvh->totnode, 0, (bvh->node_mem_count - bvh->totnode) * sizeof(PBVHNode));
-		MEM_freeN(prev);
+		bvh->nodes = MEM_recallocN(bvh->nodes, sizeof(PBVHNode) * bvh->node_mem_count);
 	}
 
 	bvh->totnode = totnode;
@@ -699,16 +694,16 @@ static void pbvh_iter_end(PBVHIter *iter)
 
 static void pbvh_stack_push(PBVHIter *iter, PBVHNode *node, int revisiting)
 {
-	if (iter->stacksize == iter->stackspace) {
-		PBVHStack *newstack;
-
+	if (UNLIKELY(iter->stacksize == iter->stackspace)) {
 		iter->stackspace *= 2;
-		newstack = MEM_callocN(sizeof(PBVHStack) * iter->stackspace, "PBVHStack");
-		memcpy(newstack, iter->stack, sizeof(PBVHStack) * iter->stacksize);
 
-		if (iter->stackspace > STACK_FIXED_DEPTH)
-			MEM_freeN(iter->stack);
-		iter->stack = newstack;
+		if (iter->stackspace != STACK_FIXED_DEPTH) {
+			iter->stack = MEM_reallocN(iter->stack, sizeof(PBVHStack) * iter->stackspace);
+		}
+		else {
+			iter->stack = MEM_mallocN(sizeof(PBVHStack) * iter->stackspace, "PBVHStack");
+			memcpy(iter->stack, iter->stackfixed, sizeof(PBVHStack) * iter->stacksize);
+		}
 	}
 
 	iter->stack[iter->stacksize].node = node;
@@ -800,7 +795,7 @@ void BKE_pbvh_search_gather(PBVH *bvh,
 
 	while ((node = pbvh_iter_next(&iter))) {
 		if (node->flag & PBVH_Leaf) {
-			if (tot == space) {
+			if (UNLIKELY(tot == space)) {
 				/* resize array if needed */
 				space = (tot == 0) ? 32 : space * 2;
 				array = MEM_recallocN_id(array, sizeof(PBVHNode *) * space, __func__);




More information about the Bf-blender-cvs mailing list