Property Specifiers

Here are three reasons why you might want to make something non-transactional:

  1. If it’s a smaller (or expensive) part in a larger system that handles undo at a higher level. Each undo record can consume a non-trivial amount of memory, and if you can do undo records of the action (e.g., setting one pixel) instead of invalidating a huge memory buffer then that’s preferable.
  2. If it’s not actually a user action or user property at all (e.g., when duplicating something during cooking or compilation, or transient flags used for caching/streaming/etc…), and the undo record is just wasted space (this is the most common usage in the engine by far).
  3. If it’s legacy code that doesn’t handle undoing properly and would otherwise crash (not a great reason, but having undo crash is about the worst user experience possible short of crashing while trying to save…).

Cheers,
Michael Noland