Blender Git Commits

Blender Git "undo-experiments-swap-reread-datablocks" branch commits.

February 28, 2020, 09:57 (GMT)
Cleanup outdated comment.
February 28, 2020, 09:53 (GMT)
Merge branch 'undo-experiments' into undo-experiments-swap-reread-datablocks
February 28, 2020, 09:52 (GMT)
Merge branch 'id-ensure-unique-memory-address' into undo-experiments
February 28, 2020, 09:45 (GMT)
Merge branch 'master' into id-ensure-unique-memory-address
February 28, 2020, 09:45 (GMT)
Merge branch 'id-ensure-unique-memory-address' of git.blender.org:blender into id-ensure-unique-memory-address
February 26, 2020, 14:05 (GMT)
Merge branch 'undo-experiments' into undo-experiments-swap-reread-datablocks
February 26, 2020, 14:04 (GMT)
Merge branch 'id-ensure-unique-memory-address' into undo-experiments
February 26, 2020, 14:02 (GMT)
Ensure IDs get unique memory addresses withing q given editing session.

Disclaimer: this should be considered as an engeneering, explanatory patch.

Rational: for undo work, we are now manipulating IDs from potentially many different 'memory realms' (in contrast to current undo system, where, since we always reallocate the whole main database at each undo step, we only ever have to deal with two, the old one from the memfile, and the new one from re-read data from that memfile).

So far, new undo system has used ID names-based search to remap old to new pointers, but this is slower, less safe, and forces us to do full undo barrier e.g. when renaming an ID.

Idea of this patch is instead to ensure that within a given editing session, we never ever allocate a data-block at the same address twice. That way, we can consider ID pointers as valid UIDs withing that scope, and use their values to handle remapping in udo steps even in case an ID has had several memory addresses in the history of the editing session.

This patches does two things:
# Add a way to ensure a newly allocated ID gets a memory address never used before for any ID.
# Store the history of all memory addresses ever used by a given ID.

Note that point 1 above is currently using a fairly simple and naive solution, but also quiet innefficient (just allocating again and again until we get a 'free' address), we can imagine a much more efficient solution if we go deeper in MEM_ allocator system itself. Not sure if it is worth it though, as with new undo system actual re-allocation of a same ID at a different address should be fairly rare (i.e. history of used/forbidden addresses should remain quiet short).

Differential Revision: https://developer.blender.org/D6937
February 26, 2020, 13:15 (GMT)
Merge branch 'master' into id-ensure-unique-memory-address
February 26, 2020, 11:54 (GMT)
Various updates/cleanups after recent changes.

Mainly:
* Use a simple `GSet` instead of an `IDNameLib_Map` for storing valid
old IDs pointers (since we do not need to complex name-based search
anymore).
* Use new `BKE_main_idmemhash_lookup_id` helper to search into history
of IDs memaddresses.
February 26, 2020, 11:50 (GMT)
Merge branch 'undo-experiments' into undo-experiments-swap-reread-datablocks
February 26, 2020, 11:50 (GMT)
Merge branch 'id-ensure-unique-memory-address' into undo-experiments
February 26, 2020, 11:48 (GMT)
Cleanup; add missing static statement.
February 26, 2020, 11:43 (GMT)
Merge branch 'undo-experiments' into undo-experiments-swap-reread-datablocks
February 26, 2020, 11:21 (GMT)
Fix for recent merge.
February 26, 2020, 11:19 (GMT)
Merge branch 'id-ensure-unique-memory-address' into undo-experiments
February 26, 2020, 11:19 (GMT)
Rework a bit re-allocating code, add a lookup utils for history memaddresses.
February 26, 2020, 10:08 (GMT)
Add some debug prints about reusing or not old IDs during undo.
February 26, 2020, 09:51 (GMT)
Rmove full undo barrier when renaming an ID, we don't need it anymore.

Keeping the undo barrier system though, think this might still be useful
in some cases, also to be exposed as debug option and/or through Py
API...
February 25, 2020, 18:08 (GMT)
Switch back to remaping based on ID addresses.

Now that we have unique memaddresses and history of all of them for each
ID...

Still very dirty code, needs a lot of cleanup. And we should now be able
to get rid of the 'full undo' in more cases too, like ID rename e.g.
By: Miika HämäläinenLast update: Nov-07-2014 14:18MiikaHweb | 2003-2021