When transforming a Mesh into Edit Mode, some updates should be ignored in favor of optimization.
Among the most time-consuming operations are called operations due to `DEG_id_tag_update(tc->obedit->data, ID_RECALC_GEOMETRY)`:
- deg_evaluate_copy_on_write - The Mesh, although not changed, is completely copied and the batch cache is completely destroyed.
- BKE_object_data_batch_cache_dirty_tag - Tags the batch cache to be redone
This patch proposes a solution to skip mesh CoW during a transformation and not tag dirty All.
**Depsgraph Changes:**
Currently, the graph can be compared to this simplified one:
{F10171010}
Where `DEG_id_tag_update(id, ID_RECALC_GEOMETRY)` would trigger `geom_eval_mesh` and `geom_eval_obj_init`.
And `DEG_id_tag_update(id, ID_RECALC_SELECT)` would trigger `tag_dirty_select_mesh` and `tag_dirty_select_obj`.
This patch proposes to separate `"tag_dirty"` from `"geom_eval"` and create a separate node for it.
In addition to adding a option to `tag_dirty_deform_only`
The graph becomes something like this:
{F10171005}
The new `ID_RECALC_GEOMETRY_DEFORM` also doesn't trigger the CoW.
**Disadvantages:**
- Some might say that the graph is too complex and difficult to maintain.
- The way `ID_RECALC_GEOMETRY_DEFORM` skips CoW doesn't seem to be conventional.
- `ID_RECALC_GEOMETRY_DEFORM` could further crash if misused since the loose element cache would not be freed.
**Alternative solution:**
Instead of using `DEG_id_tag_update` we could update everything we need in the operator itself and somehow trigger the Geometry dependent objects to be updated.