Subject: bug#69385: 30.0.50; Long lines with bidi text slow down Emacs

From: Stephen Berman <[email-masked]>
Date: Sun, 25 Feb 2024 17:23:11 +0100

Displaying a buffer that contains a long line with bidirectional text
greatly slows down Emacs.  A simple reproduction is to copy the the
Arabic example from etc/HELLO (`C-h h'), yank it into a buffer
(fundamental-mode suffices), add " Hello ", and then create a single
line consisting of a large number of copies of these strings; on my
machine 500 copies clearly shows the slowdown, and with 800 copies it is
much worse.

There is no slowdown with a line of the same length consisting only of
RTL or only of LTR text, nor with the above test line when
bidi-display-reordering is set to nil in the buffer (but then, of
course, the Arabic is not displayed correctly).  It seems that the long
line optimizations added to Emacs 29 do not work with bidirectional
text.

(FTR, I encountered this issue with a program of mine that generates
Emacs Lisp files containing such long lines with bidirectional text.
These files are not intended for display but I was examining one and
experienced the slowdown.)

In GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version
 3.24.38, cairo version 1.18.0) of 2024-02-20 built on strobelfs2
Repository revision: d9afa1f30fdf9d00b447fea0a8343397333e172f
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12101009
System Description: Linux From Scratch r12.0-112

Configured using:
 'configure -C --with-xwidgets 'CFLAGS=-Og -g3'
 PKG_CONFIG_PATH=/opt/qt5/lib/pkgconfig'

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG
JSON LCMS2 LIBSYSTEMD LIBXML2 MODULES NATIVE_COMP NOTIFY INOTIFY PDUMPER
PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS
TREE_SITTER WEBP X11 XDBE XIM XINPUT2 XPM XWIDGETS GTK3 ZLIB