fix(ui): Fix performance of AllRemoteEvents::(in|de)crement_all_timeline_item_index_after
#4608
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.
This patch fixes the performance of
AllRemoteEvents::increment_all_timeline_item_index_after
anddecrment_all_timeline_item_index_after
.It appears that the code was previously iterating over all items. This
is a waste of time. This patch updates the code to iterate over all
items in reverse order:
new_timeline_item_index
is 0, we need to shift all items anyways,so all items must be traversed, the iterator direction doesn't matter,
been either inserted or pushed back, so there is no need to traverse
the first items; we can also break the iteration as soon as all
timeline item index after
new_timeline_item_index
has been updated.I'm testing this patch with the
test_lazy_back_pagination
test in#4594. With 10_000
events in the sync, the
ObservableItems::push_back
method (that usesAllRemoteEvents::increment_all_timeline_item_index_after
) was taking7% of the whole execution time. With this patch, it takes 0.1%.
The call tree of
TimelineEventHandler::add_item
and its flamegraphbefore this patch…
… and after this patch:
This patch is based on fix(ui): Fix performance ofTimelineEventHandler::deduplicate_local_timeline_item
#4601. This patch must be merged after.EventCache
storage #3280.