Add Undo/Redo support in the viewer #7546
Draft
+305
−101
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What
ChunkStore::drop_time_range
#7602This PR implements Undo and Redo for any edit to the active blueprint.
undo.mp4
Implementation
This implements undo/redo by editing the "time cursor" for the blueprint timeline. Undo moves it backwards, redo forwards. When doing an action, all redo history is erased from the store with a new
ChunkStore::drop_time_range
function.TODO
Closing a space-view and hitting undo fails to restore the space-view, and instead results in:
The reason are these lines of code:
rerun/crates/viewer/re_viewport_blueprint/src/container.rs
Lines 338 to 343 in c599b56
rerun/crates/viewer/re_viewport_blueprint/src/space_view.rs
Lines 311 to 316 in c599b56
When clearing a container or blueprint, the entity is dropped from the store.
Just removing these lines fixes undo, but creates a problem of accumulating garbage, potentially wasting RAM as the blueprint grows (especially for users with thousands of entities).
Me and @jleibs came up with a very nice solution to this though:
DropEntity
calls above. Just keep the entities, but don't reference themEntityDb::clear_index
to remove references to components/entities that have no data (have all been GCed)Checklist
main
build: rerun.io/viewernightly
build: rerun.io/viewerCHANGELOG.md
and the migration guideTo run all checks from
main
, comment on the PR with@rerun-bot full-check
.