From 8ef010da59743fcc4927c790f585ba414ec7b129 Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Mon, 11 Oct 2021 08:51:02 +0300 Subject: optimized caret scrolling: this is a costly operation and is now done only once per keypress * Esp. costly since Scintilla 5. * We now avoid any Scintilla message that automatically scrolls the caret (makes the caret visible) and instead call SCI_SCROLLCARET only once after every keypress in the interface implementation. * From nowon, use * SCI_SETEMPTYSELECTION instead of SCI_GOTOPOS * SCI_SETEMPTYSELECTION(SCI_POSITIONFROMLINE(...)) instead of SCI_GOTOLINE * SCI_SETSELECTIONSTART and SCI_SETSELECTIONEND instead of SCI_SETSEL * With these optimizations we are significantly faster than before the Scintilla upgrade (6e67f5a682ff46d69888fec61b94bf45cec46721). It is now even safe to execute the Gtk test suite during CI. --- src/interface-gtk/interface.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/interface-gtk/interface.c') diff --git a/src/interface-gtk/interface.c b/src/interface-gtk/interface.c index 5b9f530..aa63276 100644 --- a/src/interface-gtk/interface.c +++ b/src/interface-gtk/interface.c @@ -879,6 +879,16 @@ teco_interface_handle_key_press(guint keyval, guint state, GError **error) } } + /* + * We avoid Scintilla messages that scroll the caret during macro + * execution since it has been benchmarked to be very a very costly operation. + * Instead we do it only once after every keypress. + * + * FIXME: This could be in teco_cmdline_keypress() since it is common among + * all interface implementations. + */ + teco_interface_ssm(SCI_SCROLLCARET, 0, 0); + /* * The styles configured via Scintilla might change * with every keypress. -- cgit v1.2.3