During a mesh transformation in edit mode (Move, Rotate...), not the entire draw cache needs to be recreated.
But this occurs because `DEG_id_tag_update(tc->obedit->data, ID_RECALC_GEOMETRY)`, chain a call to `BKE_object_data_batch_cache_dirty_tag` that tags all the batch cache to be redone
This patch proposes not tag dirty All, but only what participates in the deformation of geometry.
**Depsgraph Changes:**
Currently, the graph can be compared to this simplified one:
{F10187860}
Where `DEG_id_tag_update(id, ID_RECALC_GEOMETRY)` triggers `geom_eval_mesh` or `geom_eval_obj_init`.
And `DEG_id_tag_update(id, ID_RECALC_SELECT)` triggers `update_select` or `update_select_obj`.
This patch proposes to separate `"tag_dirty"` from `"geom_eval"` and create a separate node for it (`update_all` in the image bellow).
In addition to adding an node to `update_deform`
The graph becomes something like this:
{F10194537}
**Benchmarking:**
||master:|patch:
|---|---|---|
|large_mesh_editing:|Average: 16.727632 FPS|Average: 26.424897 FPS
||rdata 9ms iter 26ms (frame 60ms)|rdata 0ms iter 19ms (frame 38ms)
|large_mesh_editing_ledge:|Average: 17.761902 FPS|Average: 28.070558 FPS
||rdata 9ms iter 24ms (frame 56ms)|rdata 0ms iter 18ms (frame 36ms)
|looptris_test:|Average: 5.537827 FPS|Average: 5.456050 FPS
||rdata 11ms iter 26ms (frame 169ms)|rdata 11ms iter 28ms (frame 172ms)
|subdiv_mesh_cage_and_final:|Average: 2.095824 FPS|Average: 2.140402 FPS
||rdata 7ms iter 21ms (frame 242ms)|rdata 0ms iter 20ms (frame 237ms)
||rdata 7ms iter 22ms (frame 233ms)|rdata 0ms iter 21ms (frame 227ms)
|subdiv_mesh_final_only:|Average: 6.626541 FPS|Average: 7.974115 FPS
||rdata 3ms iter 13ms (frame 145ms)|rdata 0ms iter 10ms (frame 122ms)
|subdiv_mesh_final_only_ledge:|Average: 6.590914 FPS|Average: 7.978224 FPS
||rdata 3ms iter 13ms (frame 143ms)|rdata 0ms iter 10ms (frame 121ms)