Page MenuHome

Improve handling of (in)direclty linked status for linked IDs.
ClosedPublic

Authored by Bastien Montagne (mont29) on Nov 24 2022, 5:56 PM.

Details

Summary

This commit essentially ensures before writing .blend file that only
actualy locally used linked IDs are tagged as LIB_TAG_EXTERN (and
therefore get a reference stored in the .blend file).

Previously, a linked ID tagged as directly linked would never get back
to the indirectly linked status. Consequence was a lot of 'needless'
references to linked data in .blend files.

This commit also introduces a new flag for lib_query ID usage types,
IDWALK_CB_DIRECT_WEAK_LINK, used currently for base's Object
pointer, and for LayerCollection's Collection pointer.

NOTE: A side-effect of this patch is that even IDs explicitely linked by the user won't be kept anymore when writing files, i.e. they will not be there anymore after a file reload, if they are not actually used.

Overhead of new process is below 0.1% in whole file saving process in
a Heist production file e.g.


Note that timing debug code will be cleaned up before commit.

Diff Detail

Repository
rB Blender
Branch
id_libtag_indirect_fix (branched from master)
Build Status
Buildable 24814
Build 24814: arc lint + arc unit

Event Timeline

Bastien Montagne (mont29) requested review of this revision.Nov 24 2022, 5:56 PM
Bastien Montagne (mont29) created this revision.
Bastien Montagne (mont29) edited the summary of this revision. (Show Details)
This revision is now accepted and ready to land.Nov 28 2022, 6:42 PM