diff options
author | Sv. Lockal <lockalsash@gmail.com> | 2013-08-03 15:35:09 +0400 |
---|---|---|
committer | Sv. Lockal <lockalsash@gmail.com> | 2013-08-03 15:35:09 +0400 |
commit | 66a40779271b55498216cc14b4df3ca8d575137c (patch) | |
tree | fdd0ed4df73ca2ecb9f3c58813e8338c53eedadb /source/blender/makesdna | |
parent | 91d148b8914bb198a78c3789fa39c2850d37d219 (diff) |
fix for [#36260] 2,300 Objects Makes Blender Unresponsive
- performance of outliner was low because of unoptimal data structures.
- now it uses BLI_mempool instead of custom mempool and GHash to make searches for duplicates faster.
- also fix undesired behaviour of BLI_mempool_as_arrayN
thanks to Campbell Barton and Lukas Tönne for helping me get a better fix put together.
Diffstat (limited to 'source/blender/makesdna')
-rw-r--r-- | source/blender/makesdna/DNA_outliner_types.h | 9 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_space_types.h | 5 |
2 files changed, 11 insertions, 3 deletions
diff --git a/source/blender/makesdna/DNA_outliner_types.h b/source/blender/makesdna/DNA_outliner_types.h index 5f9c90f09f7..53061b55e2d 100644 --- a/source/blender/makesdna/DNA_outliner_types.h +++ b/source/blender/makesdna/DNA_outliner_types.h @@ -32,6 +32,8 @@ #ifndef __DNA_OUTLINER_TYPES_H__ #define __DNA_OUTLINER_TYPES_H__ +#include "DNA_defs.h" + struct ID; typedef struct TreeStoreElem { @@ -39,9 +41,12 @@ typedef struct TreeStoreElem { struct ID *id; } TreeStoreElem; +/* used only to store data in in blend files */ typedef struct TreeStore { - int totelem, usedelem; - TreeStoreElem *data; + int totelem DNA_DEPRECATED; /* was previously used for memory preallocation */ + int usedelem; /* number of elements in data array */ + TreeStoreElem *data; /* elements to be packed from mempool in writefile.c + * or extracted to mempool in readfile.c */ } TreeStore; /* TreeStoreElem->flag */ diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index 2d87cb1d890..c562a1fefae 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -72,6 +72,8 @@ struct wmTimer; struct MovieClip; struct MovieClipScopes; struct Mask; +struct GHash; +struct BLI_mempool; /* SpaceLink (Base) ==================================== */ @@ -244,13 +246,14 @@ typedef struct SpaceOops { View2D v2d DNA_DEPRECATED; /* deprecated, copied to region */ ListBase tree; - struct TreeStore *treestore; + struct BLI_mempool *treestore; /* search stuff */ char search_string[32]; struct TreeStoreElem search_tse; short flag, outlinevis, storeflag, search_flags; + struct GHash *treehash; } SpaceOops; |