Change data structure of keylists. Reducing the balancing overhead and therefore increases performance.
| Function | Master | Patch |
| draw_summary_channel | 0.202105s | 0.083874s |
When adding items to the keylist it will store it in a linked list. This linked list is
accompanied with the length (key_len) and a last_accessed_column. last_accessed_column is a cursor
that improve the performance when adding new items as they are mostly ordered by frame numbers.
last_accessed_column is reset when a new fcurve/mask/... is added to the keylist.
Before searching or array access. the listbase needs to be converted to an array.
ED_keylist_prepare_for_direct_access. After that the caller can use
ED_keylist_find_* or ED_keylist_array* functions.
The internal array can also be accessed via the ED_keylist_listbase function.
The items inside the array link to the previous/next item in the list.
Future optimizations:
- Split the creation of the keylist and drawing to support threaded drawing. D12198: T78995: Enable keylist threaded drawing.