gpui: Fix performance of app menu opening with large # of windows (#16939)

This is officially my weirdest performance fix to date; With large # of
windows opening app menu could take a lot of time (we're talking few
seconds with 9 windows, a minute with 10 windows). The fix is to make
one method pub(crate).. What?

<img width="981" alt="image"
src="https://github.com/user-attachments/assets/83b26154-0acd-43ef-84b3-4b85cde36120">

We were spending most of the time on clear_pending_keystrokes, which -
funnily enough - called itself recursively. It turned out we have two
methods; `AppContext::clear_pending_keystrokes` and
WindowContext::clear_pending_keystrokes. The former calls the latter,
but - due to the fact that `WindowContext::clear_pending_keystrokes` is
private and `WindowContext` derefs to `AppContext` - `AppContext` one
ended up actually calling itself! The fix is plain and simple - marking
WindowContext one as pub(crate), so that it gets picked up as a method
to call over `AppContext::clear_pending_keystrokes`.

Closes #16895



Release Notes:

- Fixed app menu performance slowdowns when there are multiple windows
open.
This commit is contained in:
Piotr Osiewicz 2024-08-27 12:23:00 +02:00 committed by GitHub
parent 8ec680cecb
commit 226ec9d404
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -3389,7 +3389,7 @@ impl<'a> WindowContext<'a> {
self.window.pending_input.is_some()
}
fn clear_pending_keystrokes(&mut self) {
pub(crate) fn clear_pending_keystrokes(&mut self) {
self.window.pending_input.take();
}