[Bf-blender-cvs] [8c620c8e2b3] blender2.8: Optimize ghash usage

Campbell Barton noreply at git.blender.org
Sun Dec 2 00:16:13 CET 2018


Commit: 8c620c8e2b3bf1f154f5d04e31e056bfc66d28df
Author: Campbell Barton
Date:   Sun Dec 2 08:13:31 2018 +1100
Branches: blender2.8
https://developer.blender.org/rB8c620c8e2b3bf1f154f5d04e31e056bfc66d28df

Optimize ghash usage

Avoid double hash calculation.

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

M	source/blender/blenkernel/intern/layer.c
M	source/blender/blenkernel/intern/library_query.c

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

diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c
index c591fa4bd80..1f2e54a6d39 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -681,12 +681,13 @@ static short layer_collection_sync(
 				continue;
 			}
 
-			Base *base = BLI_ghash_lookup(view_layer->object_bases_hash, cob->ob);
-
-			if (base) {
+			void **base_p;
+			Base  *base;
+			if (BLI_ghash_ensure_p(view_layer->object_bases_hash, cob->ob, &base_p)) {
 				/* Move from old base list to new base list. Base might have already
 				 * been moved to the new base list and the first/last test ensure that
 				 * case also works. */
+				base = *base_p;
 				if (!ELEM(base, new_object_bases->first, new_object_bases->last)) {
 					BLI_remlink(&view_layer->object_bases, base);
 					BLI_addtail(new_object_bases, base);
@@ -695,8 +696,8 @@ static short layer_collection_sync(
 			else {
 				/* Create new base. */
 				base = object_base_new(cob->ob);
+				*base_p = base;
 				BLI_addtail(new_object_bases, base);
-				BLI_ghash_insert(view_layer->object_bases_hash, base->object, base);
 			}
 
 			int object_restrict = base->object->restrictflag;
diff --git a/source/blender/blenkernel/intern/library_query.c b/source/blender/blenkernel/intern/library_query.c
index f0f23eaa87d..6a9c1c82ab1 100644
--- a/source/blender/blenkernel/intern/library_query.c
+++ b/source/blender/blenkernel/intern/library_query.c
@@ -101,8 +101,7 @@
 			BLI_assert(*(id_pp) == old_id); \
 		} \
 		if (old_id && (_flag & IDWALK_RECURSE)) { \
-			if (!BLI_gset_haskey((_data)->ids_handled, old_id)) { \
-				BLI_gset_add((_data)->ids_handled, old_id); \
+			if (BLI_gset_add((_data)->ids_handled, old_id)) { \
 				if (!(callback_return & IDWALK_RET_STOP_RECURSION)) { \
 					BLI_LINKSTACK_PUSH((_data)->ids_todo, old_id); \
 				} \
@@ -320,8 +319,7 @@ static void library_foreach_ID_as_subdata_link(
 	if (flag & IDWALK_RECURSE) {
 		/* Defer handling into main loop, recursively calling BKE_library_foreach_ID_link in IDWALK_RECURSE case is
 		 * troublesome, see T49553. */
-		if (!BLI_gset_haskey(data->ids_handled, id)) {
-			BLI_gset_add(data->ids_handled, id);
+		if (BLI_gset_add(data->ids_handled, id)) {
 			BLI_LINKSTACK_PUSH(data->ids_todo, id);
 		}
 	}



More information about the Bf-blender-cvs mailing list