GNU bug report logs - #10835
24.0.93; bidi-paragraph-direction slows down Shell mode

Previous Next

Package: emacs;

Reported by: Chong Yidong <cyd <at> gnu.org>

Date: Fri, 17 Feb 2012 05:44:02 UTC

Severity: normal

Found in version 24.0.93

Done: Chong Yidong <cyd <at> gnu.org>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 10835 in the body.
You can then email your comments to 10835 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#10835; Package emacs. (Fri, 17 Feb 2012 05:44:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Chong Yidong <cyd <at> gnu.org>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Fri, 17 Feb 2012 05:44:03 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Chong Yidong <cyd <at> gnu.org>
To: bug-gnu-emacs <at> gnu.org
Subject: 24.0.93; bidi-paragraph-direction slows down Shell mode
Date: Fri, 17 Feb 2012 13:41:37 +0800
See thread discussion here:

http://lists.gnu.org/archive/html/emacs-devel/2012-02/msg00517.html

To recap:

1. emacs -Q
2. M-x shell RET
3. ls /usr/share/doc    (Prints about 2000 lines on my computer)
4. Repeat step 6-7 times (e.g. M-p RET)

The insertion of the shell output is significantly slower than in Emacs
23.  If you set `bidi-paragraph-direction' to `left-to-right', the
slowdown mostly disappears.

If you scroll the shell buffer, it is also more sluggish when
`bidi-paragraph-direction' is nil.

Another observation: if you save the *shell* buffer to a file and visit
the file in another Emacs instance, there is no sluggishness if the file
is opened in (say) text mode.  Maybe something in Shell mode is
interacting badly with the bidi code, but I don't know what.



In GNU Emacs 24.0.93.7 (x86_64-unknown-linux-gnu, GTK+ Version 3.2.0)
 of 2012-02-15 on furball
Windowing system distributor `The X.Org Foundation', version 11.0.11004000
Configured using:
 `configure '--with-x-toolkit=gtk3' 'CFLAGS=-g''

Important settings:
  value of $LC_ALL: nil
  value of $LC_COLLATE: en_US.UTF-8
  value of $LC_CTYPE: en_US.UTF-8
  value of $LC_MESSAGES: en_US.UTF-8
  value of $LC_MONETARY: nil
  value of $LC_NUMERIC: nil
  value of $LC_TIME: nil
  value of $LANG: en_US.UTF-8
  value of $XMODIFIERS: nil
  locale-coding-system: utf-8-unix
  default enable-multibyte-characters: t

Major mode: Emacs-Lisp




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#10835; Package emacs. (Fri, 17 Feb 2012 05:51:02 GMT) Full text and rfc822 format available.

Message #8 received at 10835 <at> debbugs.gnu.org (full text, mbox):

From: Chong Yidong <cyd <at> gnu.org>
To: 10835 <at> debbugs.gnu.org
Subject: Re: bug#10835: 24.0.93; bidi-paragraph-direction slows down Shell mode
Date: Fri, 17 Feb 2012 13:48:26 +0800
Chong Yidong <cyd <at> gnu.org> writes:

> http://lists.gnu.org/archive/html/emacs-devel/2012-02/msg00517.html
>
> 1. emacs -Q
> 2. M-x shell RET
> 3. ls /usr/share/doc    (Prints about 2000 lines on my computer)
> 4. Repeat step 6-7 times (e.g. M-p RET)

To follow up on some questions from the thread:

> I see nothing like that, the display never freezes.  Strange.  What
> kind of CPU do you have there?  Is it a GUI session or a TTY session?
> Does Emacs run on the local machine or remote one?

It happens on both GUI sessions and TTY, run locally on an Intel i7
processor; Emacs was compiled without optimizations.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#10835; Package emacs. (Fri, 17 Feb 2012 08:24:01 GMT) Full text and rfc822 format available.

Message #11 received at 10835 <at> debbugs.gnu.org (full text, mbox):

From: Andreas Schwab <schwab <at> linux-m68k.org>
To: Chong Yidong <cyd <at> gnu.org>
Cc: 10835 <at> debbugs.gnu.org
Subject: Re: bug#10835: 24.0.93; bidi-paragraph-direction slows down Shell mode
Date: Fri, 17 Feb 2012 09:21:15 +0100
Chong Yidong <cyd <at> gnu.org> writes:

> Chong Yidong <cyd <at> gnu.org> writes:
>
>> http://lists.gnu.org/archive/html/emacs-devel/2012-02/msg00517.html
>>
>> 1. emacs -Q
>> 2. M-x shell RET
>> 3. ls /usr/share/doc    (Prints about 2000 lines on my computer)
>> 4. Repeat step 6-7 times (e.g. M-p RET)

What is your shell prompt?

Andreas.

-- 
Andreas Schwab, schwab <at> linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#10835; Package emacs. (Fri, 17 Feb 2012 13:45:02 GMT) Full text and rfc822 format available.

Message #14 received at 10835 <at> debbugs.gnu.org (full text, mbox):

From: Chong Yidong <cyd <at> gnu.org>
To: Andreas Schwab <schwab <at> linux-m68k.org>
Cc: 10835 <at> debbugs.gnu.org
Subject: Re: bug#10835: 24.0.93; bidi-paragraph-direction slows down Shell mode
Date: Fri, 17 Feb 2012 21:42:21 +0800
Andreas Schwab <schwab <at> linux-m68k.org> writes:

> Chong Yidong <cyd <at> gnu.org> writes:
>
>> Chong Yidong <cyd <at> gnu.org> writes:
>>
>>> http://lists.gnu.org/archive/html/emacs-devel/2012-02/msg00517.html
>>>
>>> 1. emacs -Q
>>> 2. M-x shell RET
>>> 3. ls /usr/share/doc    (Prints about 2000 lines on my computer)
>>> 4. Repeat step 6-7 times (e.g. M-p RET)
>
> What is your shell prompt?

PS1='\w \$ '




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#10835; Package emacs. (Fri, 17 Feb 2012 16:12:02 GMT) Full text and rfc822 format available.

Message #17 received at 10835 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Chong Yidong <cyd <at> gnu.org>
Cc: 10835 <at> debbugs.gnu.org
Subject: Re: bug#10835: 24.0.93; bidi-paragraph-direction slows down Shell mode
Date: Fri, 17 Feb 2012 18:08:47 +0200
> From: Chong Yidong <cyd <at> gnu.org>
> Date: Fri, 17 Feb 2012 13:48:26 +0800
> 
> It happens on both GUI sessions and TTY, run locally on an Intel i7
> processor; Emacs was compiled without optimizations.

On an i7, I'd expect no slowdown at all.

How much time does it take `ls' to produce that 2K-line listing on
your machine, outside of Emacs and with a warm cache?

Also, can you put a printf after this line from xdisp.c:

  else if (it->bidi_it.charpos == bob
	   || (!string_p
	       && (FETCH_CHAR (it->bidi_it.bytepos - 1) == '\n'
		   || FETCH_CHAR (it->bidi_it.bytepos) == '\n')))
    {
      /* If we are at the beginning of a line/string, we can produce
	 the next element right away.  */
      bidi_paragraph_init (it->paragraph_embedding, &it->bidi_it, 1); <<<<<<

and tell me once in how many characters or lines of input from `ls' is
bidi_paragraph_init called here?  E.g., to see the character count,
print it->bidi_it.charpos just before that line.  (You could do the
same from breakpoint commands, but I'm afraid that doing so will
change the timing of how frequently the process output is read by
Emacs, and will therefore produce a biased estimation.)

TIA




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#10835; Package emacs. (Fri, 17 Feb 2012 17:42:02 GMT) Full text and rfc822 format available.

Message #20 received at 10835 <at> debbugs.gnu.org (full text, mbox):

From: Chong Yidong <cyd <at> gnu.org>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 10835 <at> debbugs.gnu.org
Subject: Re: bug#10835: 24.0.93; bidi-paragraph-direction slows down Shell mode
Date: Sat, 18 Feb 2012 01:39:23 +0800
[Message part 1 (text/plain, inline)]
Eli Zaretskii <eliz <at> gnu.org> writes:

> can you put a printf after this line from xdisp.c:
>
>   else if (it->bidi_it.charpos == bob
> 	   || (!string_p
> 	       && (FETCH_CHAR (it->bidi_it.bytepos - 1) == '\n'
> 		   || FETCH_CHAR (it->bidi_it.bytepos) == '\n')))
>     {
>       /* If we are at the beginning of a line/string, we can produce
> 	 the next element right away.  */
>       bidi_paragraph_init (it->paragraph_embedding, &it->bidi_it, 1); <<<<<<
>
> and tell me once in how many characters or lines of input from `ls' is
> bidi_paragraph_init called here?  E.g., to see the character count,
> print it->bidi_it.charpos just before that line.

Here are the line numbers at which the printf is triggered (and how many
times consecutively they get triggered, in parentheses):

1    (x 5)
0    (x 16)
10   (x 2)
1    (x 3)
0    (x 16)
68   (x 4)
37
1606 (x 3)
0    (x 16)
125  (x 4)
94
93   (x 3)
0    (x 16)
183  (x 4)
152
151  (x 3)
0    (x 16)
241  (x 4)
210  (x 4)
0    (x 16)
299  (x 4)
268
267  (x 3)
0    (x 16)
358  (x 4)
327
326  (x 3)
0    (x 16)
417  (x 4)
386
385  (x 3)
0    (x 16)
476  (x 4)
445
444  (x 3)
0    (x 16)
533  (x 4)
502
501  (x 3)
0    (x 16)
590  (x 4)
559
558  (x 3)
0    (x 16)
...

and so on.  This is over one single ls call.  The 0's are when
it->bidi_it.charpos == 0, the rest are charpos's converted into buffer
line numbers.

The pattern seems to be 3 calls at each window end, then 1 on the second
line of the window, then 4 on the first window line.

After many `ls' calls, when redisplay has become sluggish, the pattern is
the same.

...
6788 (x 4)
6757
6756 (x 3)
0    (x 16)
6846 (x 4)
6815
6814 (x 3)
0    (x 16)
6897 (x 4)
6866
6865 (x 3)
0  (x 16)

The shell output for one ls call is attached, in case it is useful.

[shell.txt (text/plain, inline)]
~ $ ls /usr/share/doc
accountsservice                  libnm-util2
acl                              libnotify4
acpid                            libnspr4
acpi-support                     libnspr4-0d
ada-reference-manual-text        libnss3
adduser                          libnss3-1d
adium-theme-ubuntu               libnss-mdns
alacarte                         libnuma1
alsa-base                        libnux-1.0-0
alsa-utils                       libnux-1.0-common
anacron                          liboauth0
apache2                          libofa0
apache2.2-bin                    libogg0
apache2.2-common                 liboil0.3
apache2-mpm-worker               libopenal1
apache2-utils                    libopencore-amrnb0
apg                              libopencore-amrwb0
apparmor                         libopenexr6
app-install-data                 libopenmpi1.3
app-install-data-partner         libopenmpi-dev
apport                           libopenobex1
apport-hooks-medibuntu           liborbit2
apport-symptoms                  liborc-0.4-0
apt                              libp11-kit0
aptdaemon                        libpam0g
aptdaemon-data                   libpam-ck-connector
apt-transport-https              libpam-gnome-keyring
apturl                           libpam-modules
apturl-common                    libpam-modules-bin
apt-utils                        libpam-runtime
aspell                           libpanel-applet-4-0
aspell-en                        libpango1.0-0
at                               libpango1.0-dev
autoconf                         libpangomm-1.4-1
automake                         libpango-perl
autotools-dev                    libpaper1
avahi-autoipd                    libpaper-utils
avahi-daemon                     libparted0debian1
avahi-utils                      libpathplan4
bamfdaemon                       libpcap0.8
baobab                           libpci3
base-files                       libpciaccess0
base-passwd                      libpcre3
bash                             libpcrecpp0
bash-completion                  libpcsclite1
bc                               libpeas-1.0-0
bind9-host                       libpeas-common
binfmt-support                   libperl5.12
binutils                         libpipeline1
blcr-dkms                        libpixman-1-0
blcr-util                        libpixman-1-dev
blt                              libplist1
bluez                            libplymouth2
bluez-alsa                       libpng12-0
bluez-cups                       libpng12-dev
bluez-gstreamer                  libpod-plainer-perl
brasero                          libpolkit-agent-1-0
brasero-cdrkit                   libpolkit-backend-1-0
brasero-common                   libpolkit-gobject-1-0
bsdmainutils                     libpoppler13
bsdutils                         libpoppler-glib6
build-essential                  libpopt0
busybox-initramfs                libpostproc52
busybox-static                   libprotobuf7
bzip2                            libproxy0
bzr                              libpth20
bzrtools                         libpthread-stubs0
c2esp                            libpthread-stubs0-dev
cabextract                       libpulse0
ca-certificates                  libpulse-mainloop-glib0
ca-certificates-java             libpurple0
caribou                          libpurple-bin
clisp                            libpython2.7
cmap-adobe-japan1                libqhull5
colord                           libqrupdate1
compiz                           libqt4-dbus
compizconfig-backend-gconf       libqt4-declarative
compizconfig-settings-manager    libqt4-designer
compiz-core                      libqt4-network
compiz-gnome                     libqt4-opengl
compiz-plugins                   libqt4-qt3support
compiz-plugins-default           libqt4-script
compiz-plugins-main              libqt4-scripttools
compiz-plugins-main-default      libqt4-sql
consolekit                       libqt4-sql-mysql
console-setup                    libqt4-svg
coreutils                        libqt4-test
cpio                             libqt4-xml
cpp                              libqt4-xmlpatterns
cpp-4.4                          libqtbamf1
cpp-4.6                          libqtcore4
cron                             libqtdee2
cups                             libqtgconf1
cups-bsd                         libqtgui4
cups-client                      libquadmath0
cups-common                      libquvi0
cups-driver-gutenprint           libraptor2-0
cups-pk-helper                   librarian0
cups-ppdc                        librasqal3
curl                             libraw1394-11
cvs                              librdf0
dash                             libreadline5
dbus                             libreadline6
dbus-x11                         libreadline6-dev
dc                               libreadline-dev
dconf-gsettings-backend          libreoffice-base-core
debconf                          libreoffice-calc
debconf-i18n                     libreoffice-common
debhelper                        libreoffice-core
debianutils                      libreoffice-draw
deborphan                        libreoffice-emailmerge
defoma                           libreoffice-gnome
desktop-base                     libreoffice-gtk
desktop-file-utils               libreoffice-impress
dialog                           libreoffice-math
dictionaries-common              libreoffice-style-human
diffutils                        libreoffice-writer
dkms                             librest-0.7-0
dmidecode                        librsvg2-2
dmsetup                          librsvg2-common
dnsmasq-base                     librtmp0
dnsutils                         libruby1.8
doc-base                         libsamplerate0
docbook-xml                      libsane
dosfstools                       libsane-hpaio
dpkg                             libsasl2-2
dpkg-dev                         libsasl2-modules
dvd+rw-tools                     libschroedinger-1.0-0
e2fslibs                         libsdl1.2debian
e2fsprogs                        libsdl1.2debian-alsa
ed                               libsdl-image1.2
eject                            libselinux1
empathy                          libsensors4
empathy-common                   libsgutils2-2
eog                              libshout3
esound-common                    libsidplay1
evince                           libsigc++-2.0-0c2a
evince-common                    libsigsegv2
evolution-data-server-common     libslang2
exiv2                            libslp1
exo                              libslv2-9
exo-utils                        libsm6
fakeroot                         libsmbclient
fbreader                         libsm-dev
fglrx                            libsndfile1
fglrx-amdcccle                   libsnmp15
file                             libsnmp-base
file-roller                      libsoundtouch0
findutils                        libsoup2.4-1
firefox                          libsoup-gnome2.4-1
firefox-globalmenu               libspectre1
firefox-gnome-support            libspeex1
firefox-locale-en                libspeexdsp1
flashplugin-downloader           libsqlite3-0
flashplugin-installer            libsqlite3-dev
fontconfig                       libss2
fontconfig-config                libssl1.0.0
fonts-horai-umefont              libssl-dev
foo2zjs                          libssl-doc
foomatic-db-compressed-ppds      libstartup-notification0
foomatic-db-engine               libstdc++6
foomatic-filters                 libstdc++6-4.6-dev
freepats                         libsuitesparse-dev
friendly-recovery                libsvga1
ftp                              libswitch-perl
fuse-utils                       libswscale2
g++                              libsysfs2
g++-4.6                          libsys-hostname-long-perl
gamin                            libt1-5
gcc                              libtag1c2a
gcc-4.4                          libtag1-vanilla
gcc-4.4-base                     libtalloc2
gcc-4.6                          libtar0
gcc-4.6-base                     libtasn1-3
gconf2                           libtasn1-3-dev
gconf2-common                    libtdb1
gconf-defaults-service           libtelepathy-farsight0
gconf-editor                     libtelepathy-glib0
gdb                              libtelepathy-logger2
gedit                            libtemplates-parser11.5
gedit-common                     libtextcat0
genisoimage                      libtextcat-data
geoclue                          libtext-charwidth-perl
geoclue-ubuntu-geoip             libtext-iconv-perl
geoip-database                   libtext-wrapi18n-perl
gettext                          libthai0
gettext-base                     libthai-data
gfortran                         libtheora0
gfortran-4.6                     libthunarx-2-0
ghostscript                      libtidy-0.99-0
ghostscript-cups                 libtiff4
ghostscript-x                    libtiff4-dev
gimp                             libtiffxx0c2
gimp-data                        libtimedate-perl
gir1.2-accountsservice-1.0       libtinfo5
gir1.2-appindicator3-0.1         libtinfo-dev
gir1.2-atk-1.0                   libtool
gir1.2-atspi-2.0                 libtorque2
gir1.2-caribou-1.0               libtotem0
gir1.2-clutter-1.0               libtotem-plparser17
gir1.2-cogl-1.0                  libts-0.0-0
gir1.2-dbusmenu-glib-0.4         libtumbler-1-0
gir1.2-dbusmenu-gtk-0.4          libtwolame0
gir1.2-dee-0.5                   libudev0
gir1.2-folks-0.6                 libumfpack5.4.0
gir1.2-freedesktop               libunique-3.0-0
gir1.2-gconf-2.0                 libunistring0
gir1.2-gdkpixbuf-2.0             libunity-2d-private0
gir1.2-gee-1.0                   libunity6
gir1.2-gkbd-3.0                  libunity-core-4.0-4
gir1.2-glib-2.0                  libunity-misc4
gir1.2-gmenu-3.0                 libupnp3
gir1.2-gnomebluetooth-1.0        libupower-glib1
gir1.2-gtk-2.0                   liburi-perl
gir1.2-gtk-3.0                   libusb-0.1-4
gir1.2-gtksource-3.0             libusb-1.0-0
gir1.2-json-1.0                  libusbmuxd1
gir1.2-mutter-3.0                libutempter0
gir1.2-networkmanager-1.0        libutouch-evemu1
gir1.2-notify-0.7                libutouch-frame1
gir1.2-panelapplet-4.0           libutouch-geis1
gir1.2-pango-1.0                 libutouch-grail1
gir1.2-peas-1.0                  libuuid1
gir1.2-polkit-1.0                libuuid-perl
gir1.2-soup-2.4                  libv4l-0
gir1.2-telepathyglib-0.12        libv8-3.1.8.22
gir1.2-telepathylogger-0.2       libva1
gir1.2-totem-1.0                 libva-x11-1
gir1.2-totem-plparser-1.0        libvcdinfo0
gir1.2-unity-4.0                 libvdpau1
gir1.2-upowerglib-1.0            libvisual-0.4-0
gir1.2-vte-2.90                  libvisual-0.4-plugins
gir1.2-webkit-3.0                libvlc5
git                              libvlccore4
git-man                          libvorbis0a
gjs                              libvorbisenc2
gksu                             libvorbisfile3
glib-networking                  libvpx0
gnat                             libvte-2.90-9
gnat-4.4                         libvte9
gnat-4.4-base                    libvte-common
gnat-gps                         libwavpack1
gnat-gps-doc                     libwbclient0
gnome-accessibility-themes       libwebkitgtk-1.0-0
gnome-applets                    libwebkitgtk-1.0-common
gnome-applets-data               libwebkitgtk-3.0-0
gnome-bluetooth                  libwebkitgtk-3.0-common
gnome-codec-install              libwildmidi1
gnome-control-center             libwmf0.2-7
gnome-control-center-data        libwmf0.2-7-gtk
gnome-desktop3-data              libwmf-bin
gnome-desktop-data               libwnck22
gnome-disk-utility               libwnck-3-0
gnome-exe-thumbnailer            libwnck-3-common
gnome-font-viewer                libwnck-common
gnome-icon-theme                 libwpd-0.9-9
gnome-icon-theme-full            libwpg-0.2-2
gnome-icon-theme-symbolic        libwps-0.2-2
gnome-keyring                    libwrap0
gnome-media                      libwww-perl
gnome-menus                      libwww-robotrules-perl
gnome-nettool                    libwxbase2.8-0
gnome-online-accounts            libwxgtk2.8-0
gnome-panel                      libx11-6
gnome-panel-data                 libx11-data
gnome-power-manager              libx11-dev
gnome-screensaver                libx11-xcb1
gnome-session                    libx264-116
gnome-session-bin                libx86-1
gnome-session-common             libxapian22
gnome-session-fallback           libxau6
gnome-settings-daemon            libxau-dev
gnome-shell                      libxaw7
gnome-system-log                 libxaw7-dev
gnome-system-monitor             libxcb1
gnome-terminal                   libxcb1-dev
gnome-terminal-data              libxcb-dri2-0
gnome-themes-standard            libxcb-keysyms1
gnome-user-guide                 libxcb-randr0
gnome-user-share                 libxcb-render0
gnome-utils-common               libxcb-render0-dev
gnupg                            libxcb-shape0
gnuplot                          libxcb-shm0
gnuplot-nox                      libxcb-shm0-dev
gnuplot-x11                      libxcb-util0
gpgv                             libxcb-xv0
grep                             libxcomposite1
groff                            libxcomposite-dev
groff-base                       libxcursor1
gromit                           libxcursor-dev
growisofs                        libxdamage1
grub2-common                     libxdamage-dev
grub-common                      libxdmcp6
grub-gfxpayload-lists            libxdmcp-dev
grub-pc                          libxext6
grub-pc-bin                      libxext-dev
gs-cjk-resource                  libxfce4ui-1-0
gsettings-desktop-schemas        libxfce4util4
gsfonts                          libxfce4util-bin
gstreamer0.10-alsa               libxfce4util-common
gstreamer0.10-ffmpeg             libxfconf-0-2
gstreamer0.10-fluendo-mp3        libxfixes3
gstreamer0.10-gconf              libxfixes-dev
gstreamer0.10-nice               libxfont1
gstreamer0.10-plugins-bad        libxft2
gstreamer0.10-plugins-base       libxft-dev
gstreamer0.10-plugins-base-apps  libxi6
gstreamer0.10-plugins-good       libxi-dev
gstreamer0.10-plugins-ugly       libxinerama1
gstreamer0.10-pulseaudio         libxinerama-dev
gstreamer0.10-tools              libxkbfile1
gstreamer0.10-x                  libxklavier16
gtk2-engines                     libxml2
gtk2-engines-murrine             libxml2-dev
gtk2-engines-xfce                libxml2-utils
gtk3-engines-unico               libxmu6
gvfs                             libxmu-dev
gvfs-backends                    libxmu-headers
gvfs-bin                         libxmuu1
gvfs-fuse                        libxpm4
gzip                             libxpm-dev
hdparm                           libxrandr2
hicolor-icon-theme               libxrandr-dev
hostname                         libxrender1
hpijs                            libxrender-dev
hplip                            libxres1
hplip-cups                       libxslt1.1
hplip-data                       libxslt1-dev
html2text                        libxss1
humanity-icon-theme              libxt6
hunspell-en-ca                   libxt-dev
hunspell-en-us                   libxtst6
hwdata                           libxv1
hyphen-en-us                     libxvidcore4
ia32-crossover-games-demo        libxvmc1
ia32-libs                        libxxf86dga1
ia32-libs-multiarch              libxxf86vm1
icc-profiles-free                libyajl1
icedtea-6-jre-cacao              libyaml-tiny-perl
icedtea-6-jre-jamvm              libyelp0
icedtea6-plugin                  libzbar0
icedtea-netx                     libzeitgeist-1.0-1
icedtea-plugin                   libzephyr4
icoutils                         libzlcore0.12
ifupdown                         libzlcore-data
imagemagick                      libzltext0.12
indicator-application            libzltext-data
indicator-datetime               libzlui-qt4
indicator-power                  lightdm
indicator-session                light-themes
info                             linux-firmware
initramfs-tools                  linux-generic
initramfs-tools-bin              linux-headers-3.0.0-14
initscripts                      linux-headers-3.0.0-14-generic
inkscape                         linux-headers-3.0.0-15
inputattach                      linux-headers-3.0.0-15-generic
insserv                          linux-headers-generic
install-info                     linux-image-3.0.0-14-generic
intltool-debian                  linux-image-3.0.0-15-generic
iproute                          linux-image-generic
iptables                         linux-libc-dev
iputils-arping                   linux-sound-base
iputils-ping                     lmodern
iputils-tracepath                locales
irqbalance                       lockfile-progs
isc-dhcp-client                  login
isc-dhcp-common                  logrotate
iso-codes                        lp-solve
java-common                      lsb-base
jockey-common                    lsb-release
jockey-gtk                       lsdvd
kbd                              lshw
kerneloops-daemon                lsof
keyboard-configuration           ltrace
klibc-utils                      luatex
lacheck                          m4
language-pack-en                 make
language-pack-en-base            makedev
language-pack-gnome-en           man-db
language-pack-gnome-en-base      manpages
language-selector-common         manpages-dev
laptop-detect                    mawk
latex-beamer                     media-player-info
latex-xcolor                     medibuntu-keyring
launchpad-integration            memtest86+
less                             mencoder
lftp                             mesa-utils
lib32asound2                     metacity
lib32bz2-1.0                     metacity-common
lib32ffi6                        mime-support
lib32gcc1                        min12xxw
lib32ncurses5                    mlocate
lib32ncursesw5                   module-init-tools
lib32nss-mdns                    mongodb
lib32stdc++6                     mongodb-clients
lib32tinfo5                      mongodb-dev
lib32z1                          mongodb-server
liba52-0.7.4                     mount
libaa1                           mountall
libaccess-bridge-java            mousetweaks
libaccess-bridge-java-jni        mpi-default-bin
libaccountsservice0              mpi-default-dev
libacl1                          mplayer
libalgorithm-diff-perl           mscompress
libalgorithm-diff-xs-perl        mtools
libalgorithm-merge-perl          mtr-tiny
libamd2.2.0                      multiarch-support
libappindicator1                 mutter-common
libappindicator3-1               myspell-en-au
libapr1                          myspell-en-gb
libaprutil1                      myspell-en-za
libaprutil1-dbd-sqlite3          mysql-common
libaprutil1-ldap                 mythes-en-us
libapt-inst1.3                   nautilus
libapt-pkg4.11                   nautilus-data
libarchive1                      nautilus-sendto
libarpack2                       nautilus-sendto-empathy
libarpack2-dev                   nautilus-share
libasound2                       ncftp
libasound2-plugins               ncurses-base
libaspell15                      ncurses-bin
libass4                          netbase
libasyncns0                      netcat-openbsd
libatasmart4                     netpbm
libatk1.0-0                      net-tools
libatk1.0-data                   network-manager
libatk1.0-dev                    network-manager-gnome
libatkmm-1.6-1                   network-manager-pptp
libatlas3gf-base                 network-manager-pptp-gnome
libatspi2.0-0                    nodejs
libattr1                         notify-osd
libaudio2                        notify-osd-icons
libaudiofile0                    nspluginviewer
libavahi-client3                 nspluginwrapper
libavahi-common3                 ntfs-3g
libavahi-common-data             ntpdate
libavahi-core7                   nux-tools
libavahi-glib1                   obex-data-server
libavahi-gobject0                obexd-client
libavahi-ui-gtk3-0               octave3.2
libavc1394-0                     octave3.2-common
libavcodec53                     octave3.2-headers
libavformat53                    openjdk-6-jre
libavutil51                      openjdk-6-jre-headless
libbabl-0.0-0                    openjdk-6-jre-lib
libbamf3-0                       openmpi-bin
libbind9-60                      openmpi-checkpoint
libblas3gf                       openmpi-common
libblas-dev                      openprinting-ppds
libblkid1                        openssh-client
libbluetooth3                    openssh-server
libboost1.46-dev                 openssl
libboost-dev                     orage
libboost-filesystem1.46.1        os-prober
libboost-program-options1.46.1   p7zip
libboost-python1.46.1            parted
libboost-serialization1.46.1     passwd
libboost-system1.46.1            patch
libboost-thread1.46.1            pciutils
libbrasero-media3-1              perl
libbsd0                          perl-base
libbtf1.1.0                      perlmagick
libburn4                         perl-modules
libbz2-1.0                       pgf
libc6                            pkg-config
libc6-dbg                        plymouth
libc6-dev                        plymouth-label
libc6-i386                       plymouth-theme-ubuntu-logo
libcaca0                         plymouth-theme-ubuntu-text
libcairo2                        pm-utils
libcairo2-dev                    pnm2ppa
libcairo-gobject2                po-debconf
libcairomm-1.0-1                 policykit-1
libcairo-perl                    policykit-1-gnome
libcairo-script-interpreter2     policykit-desktop-privileges
libcamd2.2.0                     poppler-utils
libcamel-1.2-29                  popularity-contest
libcanberra0                     powermgmt-base
libcanberra-gtk0                 ppp
libcanberra-gtk3-0               pppconfig
libcanberra-gtk3-module          pppoeconf
libcanberra-gtk-module           pptp-linux
libcap2                          preview-latex-style
libcap2-bin                      procps
libcap-ng0                       prosper
libc-ares2                       ps2eps
libcaribou0                      psmisc
libc-bin                         psutils
libccolamd2.7.1                  ptouch-driver
libcdaudio1                      pulseaudio-utils
libcddb2                         pxljr
libc-dev-bin                     python
libcdio10                        python2.7
libcdio-cdda0                    python2.7-minimal
libcdio-paranoia0                python-apport
libcdparanoia0                   python-apt
libcdt4                          python-apt-common
libcelt0-0                       python-aptdaemon
libcholmod1.7.1                  python-aptdaemon-gtk
libck-connector0                 python-aptdaemon.gtk3widgets
libclass-isa-perl                python-aptdaemon.gtkwidgets
libclutter-1.0-0                 python-axiom
libclutter-1.0-common            python-beautifulsoup
libcogl5                         python-bzrlib
libcogl-common                   python-cairo
libcolamd2.7.1                   python-central
libcolord1                       python-chardet
libcomerr2                       python-clientform
libcompizconfig0                 python-coherence
libcr0                           python-compizconfig
libcroco3                        python-configobj
libcrypt-passwdmd5-perl          python-crypto
libcsparse2.2.3                  python-cups
libcups2                         python-cupshelpers
libcupscgi1                      python-dbus
libcupsdriver1                   python-debian
libcupsimage2                    python-defer
libcupsmime1                     python-epsilon
libcupsppdc1                     python-farsight
libcurl3                         python-feedparser
libcurl3-gnutls                  python-glade2
libcxsparse2.2.3                 python-gmenu
libdaemon0                       python-gnomekeyring
libdatrie1                       python-gnupginterface
libdb4.8                         python-gobject
libdb5.1                         python-gobject-2
libdbus-1-3                      python-gobject-cairo
libdbus-1-dev                    python-gst0.10
libdbus-glib-1-2                 python-gtk2
libdbusmenu-glib4                python-httplib2
libdbusmenu-gtk3-4               python-imaging
libdbusmenu-gtk4                 python-keyring
libdbusmenu-qt2                  python-launchpadlib
libdc1394-22                     python-lazr.restfulclient
libdca0                          python-lazr.uri
libdconf0                        python-libproxy
libdconf-dbus-1-0                python-libxml2
libdconf-qt0                     python-louie
libdecoration0                   python-lxml
libdee-1.0-1                     python-mechanize
libdevmapper1.02.1               python-minimal
libdevmapper-event1.02.1         python-nevow
libdirac-encoder0                python-notify
libdirectfb-1.2-9                python-numpy
libdjvulibre21                   python-numpy-dbg
libdjvulibre-text                python-oauth
libdns69                         python-openssl
libdpkg-perl                     python-pam
libdrm2                          python-papyon
libdrm-intel1                    python-paramiko
libdrm-nouveau1a                 python-pexpect
libdrm-radeon1                   python-pkg-resources
libdv4                           python-problem-report
libdvbpsi7                       python-pyasn1
libdvdcss2                       python-pyatspi2
libdvdnav4                       python-pycurl
libdvdread4                      python-pysqlite2
libebml3                         python-serial
libebook1.2-12                   python-simplejson
libecal1.2-10                    python-smbc
libedataserver1.2-15             python-software-properties
libedataserverui-3.0-1           python-support
libedit2                         python-tagpy
libelf1                          python-telepathy
libenca0                         python-tk
libenchant1c2a                   python-twisted-bin
libencode-locale-perl            python-twisted-conch
liberror-perl                    python-twisted-core
libesd0                          python-twisted-web
libev4                           python-uno
libevent-2.0-5                   python-utidylib
libevince3-3                     python-vte
libexempi3                       python-wadllib
libexif12                        python-xapian
libexiv2-10                      python-xdg
libexo-1-0                       python-xkit
libexo-common                    python-zope.interface
libexo-helpers                   qdbus
libexpat1                        radeontool
libexpat1-dev                    rarian-compat
libfaac0                         rcs
libfaad2                         readline-common
libffcall1                       rfkill
libffi6                          rsync
libfftw3-3                       rsyslog
libfftw3-dev                     rtkit
libfile-basedir-perl             ruby
libfile-copy-recursive-perl      ruby1.8
libfile-desktopentry-perl        ruby1.8-dev
libfile-listing-perl             samba-common
libfile-mimeinfo-perl            samba-common-bin
libflac8                         sane-utils
libflite1                        seahorse
libfltk1.1                       sed
libfolks25                       sensible-utils
libfolks-telepathy25             sessioninstaller
libfont-afm-perl                 sgml-base
libfontconfig1                   sgml-data
libfontconfig1-dev               shared-mime-info
libfontenc1                      simple-scan
libfreetype6                     smbclient
libfreetype6-dev                 software-properties-common
libfribidi0                      software-properties-gtk
libfs6                           sound-theme-freedesktop
libfuse2                         splix
libgail18                        ssh-askpass-gnome
libgail-3-0                      ssh-import-id
libgamin0                        ssl-cert
libgarcon-1-0                    strace
libgarcon-common                 sudo
libgc1c2                         svgalib
libgcc1                          syslinux
libgck-1-0                       syslinux-common
libgconf2-4                      system-config-printer-common
libgconf2-dev                    system-config-printer-gnome
libgcr-3-1                       system-config-printer-udev
libgcrypt11                      sysvinit-utils
libgcrypt11-dev                  sysv-rc
libgd2-xpm                       tango-icon-theme
libgdata13                       tar
libgdata-common                  tcl8.4
libgdbm3                         tcl8.5
libgdk-pixbuf2.0-0               tcpd
libgdk-pixbuf2.0-dev             tcpdump
libgdu0                          telepathy-butterfly
libgdu-gtk0                      telepathy-gabble
libgee2                          telepathy-haze
libgegl-0.0-0                    telepathy-idle
libgeoclue0                      telepathy-indicator
libgeoip1                        telepathy-logger
libgfortran3                     telepathy-mission-control-5
libgif4                          telepathy-salut
libgif-dev                       telnet
libgimp2.0                       tex-common
libgirepository-1.0-1            texinfo
libgjs0c                         texlive
libgksu2-0                       texlive-base
libgl1-mesa-dri                  texlive-bibtex-extra
libgl1-mesa-glx                  texlive-binaries
libglade2-0                      texlive-common
libglapi-mesa                    texlive-doc
libglew1.5                       texlive-doc-base
libglewmx1.5                     texlive-extra-utils
libglib2.0-0                     texlive-fonts-recommended
libglib2.0-bin                   texlive-fonts-recommended-doc
libglib2.0-data                  texlive-font-utils
libglib2.0-dev                   texlive-generic-recommended
libglibmm-2.4-1c2a               texlive-latex-base
libglib-perl                     texlive-latex-base-doc
libglpk0                         texlive-latex-extra
libglu1-mesa                     texlive-latex-extra-doc
libgme0                          texlive-latex-recommended
libgmime-2.4-2                   texlive-latex-recommended-doc
libgmp10                         texlive-luatex
libgnat-4.4                      texlive-pictures
libgnatprj4.4                    texlive-pictures-doc
libgnatvsn4.4                    texlive-pstricks
libgnome2-common                 texlive-pstricks-doc
libgnome-bluetooth8              texlive-publishers
libgnome-control-center1         texlive-publishers-doc
libgnome-desktop-3-2             texmf
libgnomekbd7                     thunar
libgnomekbd-common               thunar-data
libgnome-keyring0                thunar-volman
libgnome-media-profiles-3.0-0    time
libgnome-menu2                   tipa
libgnome-menu-3-0                tk8.5
libgnomevfs2-0                   toshset
libgnomevfs2-common              totem
libgnutls26                      totem-common
libgnutls-dev                    totem-mozilla
libgnutlsxx26                    totem-plugins
libgoa-1.0-0                     totem-plugins-extra
libgomp1                         traceroute
libgpg-error0                    transmission-common
libgpg-error-dev                 transmission-gtk
libgpgme11                       tsconf
libgphoto2-2                     ttf-dejavu-core
libgphoto2-l10n                  ttf-dejavu-extra
libgphoto2-port0                 ttf-droid
libgpm2                          ttf-freefont
libgpod4                         ttf-indic-fonts-core
libgpod-common                   ttf-kacst-one
libgraph4                        ttf-liberation
libgraphicsmagick3               ttf-mscorefonts-installer
libgraphicsmagick++3             ttf-opensymbol
libgrip0                         ttf-punjabi-fonts
libgs9                           ttf-takao-pgothic
libgs9-common                    ttf-thai-tlwg
libgsl0-dev                      ttf-ubuntu-font-family
libgsl0ldbl                      ttf-unfonts-core
libgsm1                          ttf-wqy-microhei
libgssapi-krb5-2                 tumbler
libgssdp-1.0-2                   tumbler-common
libgstfarsight0.10-0             tzdata
libgstreamer0.10-0               tzdata-java
libgstreamer-plugins-base0.10-0  ubuntu-artwork
libgtk2.0-0                      ubuntu-docs
libgtk2.0-bin                    ubuntu-extras-keyring
libgtk2.0-common                 ubuntu-keyring
libgtk2.0-dev                    ubuntu-minimal
libgtk2-perl                     ubuntu-mono
libgtk-3-0                       ubuntu-restricted-addons
libgtk-3-bin                     ubuntu-sounds
libgtk-3-common                  ubuntu-standard
libgtk-3-dev                     ubuntu-system-service
libgtkada2.14.2                  ubuntu-wallpapers
libgtkmm-2.4-1c2a                ucf
libgtkmm-3.0-1                   udev
libgtksourceview-3.0-0           udisks
libgtksourceview-3.0-common      ufw
libgtkspell0                     unattended-upgrades
libgtop2-7                       unity
libgtop2-common                  unity-2d
libgucharmap-2-90-7              unity-2d-launcher
libgudev-1.0-0                   unity-2d-panel
libgupnp-1.0-3                   unity-2d-places
libgupnp-igd-1.0-3               unity-2d-spread
libgutenprint2                   unity-asset-pool
libgvc5                          unity-common
libgweather-3-0                  unity-greeter
libgweather-common               unity-lens-applications
libhdf5-openmpi-1.8.4            unity-lens-files
libhdf5-openmpi-dev              unity-lens-music
libhpmud0                        unity-scope-musicstores
libhtml-format-perl              unity-services
libhtml-form-perl                uno-libs3
libhtml-parser-perl              unrar
libhtml-tagset-perl              unzip
libhtml-tree-perl                update-inetd
libhttp-cookies-perl             update-manager
libhttp-daemon-perl              update-manager-core
libhttp-date-perl                upower
libhttp-message-perl             upstart
libhttp-negotiate-perl           uqm
libhunspell-1.2-0                uqm-content
libhyphen0                       uqm-music
libibverbs1                      ure
libibverbs-dev                   ureadahead
libical0                         usb-creator-common
libice6                          usb-creator-gtk
libice-dev                       usb-modeswitch
libicu44                         usb-modeswitch-data
libid3tag0                       usbmuxd
libidl0                          usbutils
libidn11                         util-linux
libido3-0.1-0                    uuid-runtime
libiec61883-0                    valgrind
libieee1284-3                    vbetool
libijs-0.35                      vim-common
libilmbase6                      vim-tiny
libimobiledevice2                vino
libindicate5                     vlc
libindicate-gtk3                 vlc-data
libindicator3-6                  vlc-nox
libindicator6                    vlc-plugin-notify
libio-socket-ssl-perl            vlc-plugin-pulse
libisc62                         wamerican
libisccc60                       wbritish
libisccfg62                      wget
libiso9660-7                     whiptail
libisofs6                        whois
libiw30                          winbind
libjack-jackd2-0                 wine1.3
libjasper1                       wine1.3-gecko
libjbig2dec0                     winetricks
libjpeg62                        wireless-crda
libjpeg62-dev                    wireless-tools
libjpeg8                         wodim
libjpeg-progs                    wpasupplicant
libjs-jquery                     x11-apps
libjson0                         x11-common
libjson-glib-1.0-0               x11proto-composite-dev
libjte1                          x11proto-core-dev
libk5crypto3                     x11proto-damage-dev
libkate1                         x11proto-fixes-dev
libkeybinder0                    x11proto-input-dev
libkeyutils1                     x11proto-kb-dev
libklibc                         x11proto-randr-dev
libklu1.1.0                      x11proto-render-dev
libkpathsea5                     x11proto-xext-dev
libkrb5-3                        x11proto-xinerama-dev
libkrb5support0                  x11-session-utils
liblapack3gf                     x11-utils
liblapack-dev                    x11-xfs-utils
liblaunchpad-integration1        x11-xkb-utils
liblaunchpad-integration-3.0-1   x11-xserver-utils
liblaunchpad-integration-common  xauth
liblcms1                         xbitmaps
liblcms2-2                       xcursor-themes
libldap-2.4-2                    xdg-user-dirs
libldl2.0.1                      xdg-user-dirs-gtk
liblightdm-gobject-1-0           xdg-utils
liblinebreak2                    xfce4
liblircclient0                   xfce4-appfinder
libllvm2.9                       xfce4-mixer
liblocale-gettext-perl           xfce4-panel
liblockfile1                     xfce4-power-manager
liblqr-1-0                       xfce4-power-manager-data
libltdl7                         xfce4-session
libltdl-dev                      xfce4-settings
liblua5.1-0                      xfce4-utils
liblvm2app2.2                    xfce4-volumed
liblwp-mediatypes-perl           xfce-keyboard-shortcuts
liblwp-protocol-https-perl       xfconf
liblwres60                       xfdesktop4
liblzma2                         xfdesktop4-data
liblzo2-2                        xfonts-base
libmad0                          xfonts-encodings
libmagic1                        xfonts-mathml
libmagick++3                     xfonts-scalable
libmagickcore3                   xfonts-utils
libmagickcore3-extra             xfwm4
libmagickwand3                   xfwm4-themes
libmail-sendmail-perl            xinit
libmailtools-perl                xinput
libmatroska4                     xkb-data
libmeanwhile1                    xml-core
libmetacity-private0             xorg
libmhash2                        xorg-docs-core
libmikmod2                       xorg-sgml-doctools
libmimic0                        xscreensaver
libminiupnpc5                    xscreensaver-data
libmission-control-plugins0      xserver-common
libmms0                          xserver-xorg
libmng1                          xserver-xorg-core
libmodplug1                      xserver-xorg-input-all
libmount1                        xserver-xorg-input-evdev
libmozjs185-1.0                  xserver-xorg-input-mouse
libmp3lame0                      xserver-xorg-input-synaptics
libmpc2                          xserver-xorg-input-vmmouse
libmpcdec6                       xserver-xorg-input-wacom
libmpeg2-4                       xserver-xorg-video-ati
libmpfr4                         xserver-xorg-video-fbdev
libmtdev1                        xserver-xorg-video-intel
libmtp9                          xserver-xorg-video-mach64
libmtp-common                    xserver-xorg-video-neomagic
libmtp-runtime                   xserver-xorg-video-nouveau
libmusicbrainz4c2a               xserver-xorg-video-r128
libmutter0                       xserver-xorg-video-radeon
libmysqlclient16                 xserver-xorg-video-sisusb
libmythes-1.2-0                  xserver-xorg-video-vesa
libnatpmp1                       xserver-xorg-video-vmware
libnautilus-extension1           xterm
libncurses5                      xtrans-dev
libncurses5-dev                  x-ttcidfont-conf
libncursesw5                     xul-ext-ubufox
libneon27-gnutls                 xz-utils
libnet-http-perl                 yelp
libnetpbm10                      yelp-xsl
libnet-ssleay-perl               zeitgeist
libnewt0.52                      zeitgeist-core
libnfnetlink0                    zeitgeist-datahub
libnice10                        zeitgeist-extension-fts
libnih1                          zenity
libnih-dbus1                     zenity-common
libnl3                           zile
libnm-glib4                      zip
libnm-glib-vpn1                  zlib1g
libnm-gtk0                       zlib1g-dev
libnm-gtk-common
~ $ 

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#10835; Package emacs. (Fri, 17 Feb 2012 18:31:02 GMT) Full text and rfc822 format available.

Message #23 received at 10835 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Chong Yidong <cyd <at> gnu.org>
Cc: 10835 <at> debbugs.gnu.org
Subject: Re: bug#10835: 24.0.93; bidi-paragraph-direction slows down Shell mode
Date: Fri, 17 Feb 2012 20:27:34 +0200
> From: Chong Yidong <cyd <at> gnu.org>
> Cc: 10835 <at> debbugs.gnu.org
> Date: Sat, 18 Feb 2012 01:39:23 +0800
> 
> Here are the line numbers at which the printf is triggered (and how many
> times consecutively they get triggered, in parentheses):

Thanks.  This means redisplay is invoked every 90 lines,
approximately, which is even less than in my case (I see a cycle of
redisplay every 40-50 lines of inserted input).  The plot thickens...

What does "time ls /usr/share/doc" say, when you run it from the shell
buffer?  What are the times it reports, and are they approximately the
same in each of the 4 invocations?




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#10835; Package emacs. (Sat, 18 Feb 2012 02:31:01 GMT) Full text and rfc822 format available.

Message #26 received at 10835 <at> debbugs.gnu.org (full text, mbox):

From: Chong Yidong <cyd <at> gnu.org>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 10835 <at> debbugs.gnu.org
Subject: Re: bug#10835: 24.0.93; bidi-paragraph-direction slows down Shell mode
Date: Sat, 18 Feb 2012 10:28:12 +0800
I just noticed that when I do `ls --color=no' rather than just `ls',
insertion and scrolling are very fast.  The sluggishness only appears
when ls color highlighting is enabled.  So the inefficiency of
ansi-color.el, and its use of overlays, seems to play a role.


Eli Zaretskii <eliz <at> gnu.org> writes:

> What does "time ls /usr/share/doc" say, when you run it from the shell
> buffer?  What are the times it reports, and are they approximately the
> same in each of the 4 invocations?

Times are below.  Another observation: with `time ls /usr/share/doc'
(which does use color highlighting), scrolling through the Shell buffer
is no longer sluggish.  I think the output of `time' helps by providing
a paragraph break.

If I do plain `ls' (no `time'), then go back and edit the Shell buffer
manually by adding a C-q C-j line break after each prompt, that also
makes the scrolling sluggishness go away.

In xterm (speed is the same after repeated invocations):

real	0m0.148s
user	0m0.008s
sys	0m0.020s

In xterm, with --color=no:

real	0m0.039s
user	0m0.004s
sys	0m0.008s

In the Emacs 23 shell buffer, on the first invocation:

real	0m0.378s
user	0m0.008s
sys	0m0.008s

In the Emacs 24 shell buffer, on the first invocation:

real	0m0.866s
user	0m0.008s
sys	0m0.004s

In the Emacs 24 shell buffer, after 10 invocations:

real	0m1.969s
user	0m0.008s
sys	0m0.004s

In the Emacs 24 shell buffer, with --color=no:

real	0m0.296s
user	0m0.000s
sys	0m0.008s

In the Emacs 24 shell buffer, with --color=no, after 10 invocations:

real	0m0.280s
user	0m0.004s
sys	0m0.012s




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#10835; Package emacs. (Sat, 18 Feb 2012 03:40:02 GMT) Full text and rfc822 format available.

Message #29 received at 10835 <at> debbugs.gnu.org (full text, mbox):

From: Chong Yidong <cyd <at> gnu.org>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 10835 <at> debbugs.gnu.org
Subject: Re: bug#10835: 24.0.93; bidi-paragraph-direction slows down Shell mode
Date: Sat, 18 Feb 2012 11:37:33 +0800
Chong Yidong <cyd <at> gnu.org> writes:

> I just noticed that when I do `ls --color=no' rather than just `ls',
> insertion and scrolling are very fast.  The sluggishness only appears
> when ls color highlighting is enabled.  So the inefficiency of
> ansi-color.el, and its use of overlays, seems to play a role.

I just confirmed that the sluggishness goes away if I change
ansi-color.el to make it use text properties.  Wish I'd remembered to do
that before the pretest began.

Roughly what is happening, I think, is that when overlays are heavily
used and there are no paragraph breaks (e.g. from the `time' output),
the bidi code does enough the additional overlay lookups to produce a
noticeable slowdown.

I'm not sure what's the best fix right now, though.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#10835; Package emacs. (Sat, 18 Feb 2012 08:32:02 GMT) Full text and rfc822 format available.

Message #32 received at 10835 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Chong Yidong <cyd <at> gnu.org>
Cc: 10835 <at> debbugs.gnu.org
Subject: Re: bug#10835: 24.0.93; bidi-paragraph-direction slows down Shell mode
Date: Sat, 18 Feb 2012 10:27:18 +0200
> From: Chong Yidong <cyd <at> gnu.org>
> Cc: 10835 <at> debbugs.gnu.org
> Date: Sat, 18 Feb 2012 10:28:12 +0800
> 
> Times are below.  Another observation: with `time ls /usr/share/doc'
> (which does use color highlighting), scrolling through the Shell buffer
> is no longer sluggish.  I think the output of `time' helps by providing
> a paragraph break.

Of course.  That makes each 2000-line output a separate paragraph, as
far as bidi is concerned.  So you never get to the 7500-line limit of
searching for paragraph beginning.

When I tried to reproduce the problem on Windows, I manually edited
away these empty lines (which are inserted in my case because the
shell prompt on Windows always starts with a newline).

> If I do plain `ls' (no `time'), then go back and edit the Shell buffer
> manually by adding a C-q C-j line break after each prompt, that also
> makes the scrolling sluggishness go away.

Of course, for the same reasons.

> In the Emacs 24 shell buffer, after 10 invocations:
> 
> real	0m1.969s
> user	0m0.008s
> sys	0m0.004s

Is this with the empty lines between invocations, or without?

If the former, do the 2 seconds match your impression of sluggishness,
i.e., do you indeed see Emacs take about 2 sec to insert the 10th
listing into the shell buffer?  Or does the insertion take much
longer?  (Timing with second-resolution can be done by just looking at
your wallclock time.)




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#10835; Package emacs. (Sat, 18 Feb 2012 08:54:01 GMT) Full text and rfc822 format available.

Message #35 received at 10835 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Chong Yidong <cyd <at> gnu.org>
Cc: 10835 <at> debbugs.gnu.org
Subject: Re: bug#10835: 24.0.93; bidi-paragraph-direction slows down Shell mode
Date: Sat, 18 Feb 2012 10:49:19 +0200
> From: Chong Yidong <cyd <at> gnu.org>
> Cc: 10835 <at> debbugs.gnu.org
> Date: Sat, 18 Feb 2012 11:37:33 +0800
> 
> Chong Yidong <cyd <at> gnu.org> writes:
> 
> > I just noticed that when I do `ls --color=no' rather than just `ls',
> > insertion and scrolling are very fast.  The sluggishness only appears
> > when ls color highlighting is enabled.  So the inefficiency of
> > ansi-color.el, and its use of overlays, seems to play a role.
> 
> I just confirmed that the sluggishness goes away if I change
> ansi-color.el to make it use text properties.

That figures.  bidi.c needs to look up display properties and overlays
with display strings, in order to DTRT with their display (they are
treated as a single neutral character).  So having lots of overlays
slows down redisplay a bit more.

> Wish I'd remembered to do that before the pretest began.

If this is a grave problem, we can still do it now, I think.  Or we
could use a band-aid, see below.

> Roughly what is happening, I think, is that when overlays are heavily
> used and there are no paragraph breaks (e.g. from the `time' output),
> the bidi code does enough the additional overlay lookups to produce a
> noticeable slowdown.

Yes, the overlays together with the long search for paragraph
beginning probably push the user experience from slightly below the
annoyance threshold to just above it.

> I'm not sure what's the best fix right now, though.

How about setting bidi-paragraph-direction in comint buffers to
left-to-right when the locale indicates that use of bidirectional
scripts is unlikely?  We could use locale-language-names and an
additional small database of languages that need bidi, to make that
decision.  WDYT?




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#10835; Package emacs. (Sat, 18 Feb 2012 14:19:01 GMT) Full text and rfc822 format available.

Message #38 received at 10835 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: cyd <at> gnu.org
Cc: 10835 <at> debbugs.gnu.org
Subject: Re: bug#10835: 24.0.93; bidi-paragraph-direction slows down Shell mode
Date: Sat, 18 Feb 2012 16:14:21 +0200
> Date: Sat, 18 Feb 2012 10:49:19 +0200
> From: Eli Zaretskii <eliz <at> gnu.org>
> Cc: 10835 <at> debbugs.gnu.org
> 
> How about setting bidi-paragraph-direction in comint buffers to
> left-to-right when the locale indicates that use of bidirectional
> scripts is unlikely?  We could use locale-language-names and an
> additional small database of languages that need bidi, to make that
> decision.  WDYT?

Actually, it's probably better to go directly from the locale, since
locale-language-names doesn't really give the names of languages, it
gives the names of language environments, which can be totally
different.

I see only several locales that will need to dynamically determine
paragraph direction in comint buffers.  Those are locales matching the
following regular expressions:

  \`ar_.*
  \`fa_.*
  \`he_.*
  \`iw_.*
  \`ur_.*






Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#10835; Package emacs. (Sun, 19 Feb 2012 14:10:02 GMT) Full text and rfc822 format available.

Message #41 received at 10835 <at> debbugs.gnu.org (full text, mbox):

From: Chong Yidong <cyd <at> gnu.org>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 10835 <at> debbugs.gnu.org
Subject: Re: bug#10835: 24.0.93; bidi-paragraph-direction slows down Shell mode
Date: Sun, 19 Feb 2012 22:07:24 +0800
Eli Zaretskii <eliz <at> gnu.org> writes:

> Yes, the overlays together with the long search for paragraph
> beginning probably push the user experience from slightly below the
> annoyance threshold to just above it.
> ...
> How about setting bidi-paragraph-direction in comint buffers to
> left-to-right when the locale indicates that use of bidirectional
> scripts is unlikely?  We could use locale-language-names and an
> additional small database of languages that need bidi, to make that
> decision.  WDYT?

I'm not keen on bolting on this additional complexity.

I don't see any better way out, so we might as well take the risk and
switch to using text properties for color escape highlighting.  I just
committed a patch to do that, limiting the change to Shell mode and
leaving the other users of ansi-color.el unaffected (and still using
overlays).

Thanks for helping with this bug.  Hopefully the fix won't turn up any
problems...




bug closed, send any further explanations to 10835 <at> debbugs.gnu.org and Chong Yidong <cyd <at> gnu.org> Request was from Chong Yidong <cyd <at> gnu.org> to control <at> debbugs.gnu.org. (Sun, 26 Feb 2012 09:24:02 GMT) Full text and rfc822 format available.

bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Sun, 25 Mar 2012 11:24:03 GMT) Full text and rfc822 format available.

This bug report was last modified 12 years and 43 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.