From d4b6927179e3a6ac5d4d3efa4b0bb8b785dd1822 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 27 May 2012 14:43:18 +0000 Subject: remove NULL check in TREESTORE macro, the return NULL value wasny checked for by any callers (ie - it would crash later if the arg was NULL anyway) also comment on the speed of check_persistent() --- source/blender/editors/space_outliner/outliner_tree.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'source/blender/editors/space_outliner/outliner_tree.c') diff --git a/source/blender/editors/space_outliner/outliner_tree.c b/source/blender/editors/space_outliner/outliner_tree.c index 8a31305d65e..097823135f3 100644 --- a/source/blender/editors/space_outliner/outliner_tree.c +++ b/source/blender/editors/space_outliner/outliner_tree.c @@ -132,6 +132,14 @@ static void outliner_storage_cleanup(SpaceOops *soops) } } +/* XXX - THIS FUNCTION IS INCREDIBLY SLOW + * ... it can bring blenders tools and viewport to a grinding halt becuase of searching + * for duplicate items every times they are added. + * + * TODO (possible speedups) + * - use a hash for duplicate (could even store a hash per type) + * - use mempool for TreeElements + * */ static void check_persistent(SpaceOops *soops, TreeElement *te, ID *id, short type, short nr) { TreeStore *ts; @@ -147,8 +155,8 @@ static void check_persistent(SpaceOops *soops, TreeElement *te, ID *id, short ty /* check if 'te' is in treestore */ tselem = ts->data; for (a = 0; a < ts->usedelem; a++, tselem++) { - if (tselem->id == id && tselem->used == 0) { - if ((type == 0 && tselem->type == 0) || (tselem->type == type && tselem->nr == nr)) { + if ((tselem->used == 0) && (tselem->type == type) && (tselem->id == id)) { + if ((type == 0) || (tselem->nr == nr)) { te->store_index = a; tselem->used = 1; return; -- cgit v1.2.3