Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Montagne <bastien@blender.org>2021-06-30 16:19:35 +0300
committerBastien Montagne <bastien@blender.org>2021-07-27 15:53:49 +0300
commitdb4fe8e3223b36615e53cf64f4a55f6d974c4597 (patch)
tree91f97a9f26050ed889779a5f0dae86b460251c19 /source/blender/blenkernel/BKE_main.h
parente37c876cd77dd26d540597b3796621a4f22d1518 (diff)
BlenRead: Add GHash-based search for already read linked IDs.
Ths commit adds a new `IDNameLibMap` to `Main`, used during file reading to quickly find already read linked IDs. Without that, search would use string-based search over list of linked data, which becomes extremely slow and inneficient in cases where a lot of IDs are linked from a same library. See also {T89194}. Extrem-usecase reported in T89194 is now about 4 times faster in linked data reading (about 2 times faster for the whole .blend file loading). More normal cases (like Sprites studio production files) have barely measurable speed improvements, a few percents at best. NOTE: `main_idmap` API was extended to support insertion and removal of IDs from the mapping, avoids having to re-create the whole thing several time during libraries expansion in readcode. Differential Revision: https://developer.blender.org/D11757
Diffstat (limited to 'source/blender/blenkernel/BKE_main.h')
-rw-r--r--source/blender/blenkernel/BKE_main.h4
1 files changed, 4 insertions, 0 deletions
diff --git a/source/blender/blenkernel/BKE_main.h b/source/blender/blenkernel/BKE_main.h
index ed930fe539d..ae60a5563b5 100644
--- a/source/blender/blenkernel/BKE_main.h
+++ b/source/blender/blenkernel/BKE_main.h
@@ -48,6 +48,7 @@ struct BLI_mempool;
struct BlendThumbnail;
struct GHash;
struct GSet;
+struct IDNameLib_Map;
struct ImBuf;
struct Library;
struct MainLock;
@@ -191,6 +192,9 @@ typedef struct Main {
*/
struct MainIDRelations *relations;
+ /* IDMap of IDs. Currently used when reading (expanding) libraries. */
+ struct IDNameLib_Map *id_map;
+
struct MainLock *lock;
} Main;