unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#8890: 23.3; message writing slows emacs
@ 2011-06-18 16:45 Dave Abrahams
  2011-09-11  4:32 ` Lars Magne Ingebrigtsen
  2011-09-16 13:18 ` Stefan Monnier
  0 siblings, 2 replies; 29+ messages in thread
From: Dave Abrahams @ 2011-06-18 16:45 UTC (permalink / raw)
  To: 8890

I haven't done actual timings, but I'm finding that I have a *very*
strong perception that when emacs is writing lots of messages, it slows
down considerably.  Even if this is only a perception, if it's shared by
others I think it should be considered a bug.  Unless the *Message*
buffer is visible, these messages are often flashing by so quickly that
nobody could hope to see them.  It would be good, IMO, to delay updating
the visible message in the minibuffer line long enough to be sure that
the message just written isn't about to be overwritten so fast that the
user couldn't read it anyway.


In GNU Emacs 23.3.1 (x86_64-apple-darwin, NS apple-appkit-1038.35)
 of 2011-03-09 on black.porkrind.org
Windowing system distributor `Apple', version 10.3.1038
configured using `configure  '--host=x86_64-apple-darwin' '--build=i686-apple-darwin' '--with-ns' 'build_alias=i686-apple-darwin' 'host_alias=x86_64-apple-darwin' 'CC=gcc -mmacosx-version-min=10.5''

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

Major mode: Emacs-Lisp

Minor modes in effect:
  diff-auto-refine-mode: t
  me-minor-mode: t
  show-paren-mode: t
  ido-everywhere: t
  global-auto-revert-mode: t
  delete-selection-mode: t
  tooltip-mode: t
  mouse-wheel-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t
  transient-mark-mode: t

Recent input:
C-, C-, C-, C-a C-. C-. C-. C-. C-. C-. C-n C-, C-, 
C-, C-, C-p C-p C-p C-p C-p C-p C-p C-p C-p C-e C-p 
C-p C-p C-n C-n C-n C-e C-, C-, C-, C-, C-, C-. C-. 
C-. C-. C-. C-e C-b C-n C-e C-n C-n C-p C-p C-n C-n 
C-b C-( C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p 
C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p 
C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p 
C-p C-p C-p C-p C-p C-n C-n C-e C-, C-a C-n C-n C-n 
C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n 
C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n 
C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n 
C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n 
C-n C-n C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p 
C-p C-. C-. C-. C-. C-p C-p C-p C-p C-p C-p C-p C-p 
C-p C-p C-p C-n C-n C-n C-n C-n C-. C-. C-. C-. C-. 
C-. C-. C-. C-. C-. C-. C-. C-. C-. C-. C-. C-. C-. 
C-. C-. C-. C-n C-n C-n C-n C-n C-n C-p C-p C-, C-, 
C-, C-, C-, C-p C-p C-p C-p C-p C-p C-p C-p C-p C-n 
C-. C-. C-. <down-mouse-1> <mouse-1> C-x C-n C-x C-n 
C-n C-p q y C-x C-n C-x C-p C-n C-n C-n C-n C-n C-n 
C-n C-n C-n C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p 
C-p C-p C-p C-p C-p C-p C-p C-p C-p M-x M-p C-g M-x 
e m a c s - b u f <tab> <backspace> g <tab> C-a - <tab> 
<return>

Recent messages:
Saving file /Users/dave/.emacs.d/el-get/dwamacs/settings/wl-settings.el...
Saving file /Users/dave/.emacs.d/el-get/dwamacs/settings/mime-view-settings.el...
Saving file /Users/dave/.emacs.d/el-get/dwamacs/settings/compile-settings.el...
Saving file /Users/dave/.emacs.d/el-get/dwamacs/settings/ediff-settings.el...
Saving file /Users/dave/.emacs.d/el-get/dwamacs/settings/settings.el...
Wrote /Users/dave/.emacs.d/el-get/dwamacs/settings/settings.el
uncompressing files.el.gz...done
Mark saved where search started
Quit this Ediff session? (y or n) 
Quit

Load-path shadows:
/Users/dave/.emacs.d/el-get/wl-gravatar/gravatar hides /Users/dave/.emacs.d/el-get/gravatar/gravatar
/Users/dave/.emacs.d/el-get/wl-gravatar/gravatar hides /Users/dave/.emacs.d/el-get/nognus/lisp/gravatar
/Users/dave/.emacs.d/el-get/nognus/lisp/utf7 hides /Users/dave/.emacs.d/el-get/wanderlust/site-lisp/wl/utf7
/Users/dave/.emacs.d/el-get/nognus/lisp/smime hides /Users/dave/.emacs.d/el-get/semi/site-lisp/semi/smime
/Users/dave/.emacs.d/el-get/nognus/lisp/pgg hides /Users/dave/.emacs.d/el-get/semi/site-lisp/semi/pgg
/Users/dave/.emacs.d/el-get/nognus/lisp/pgg-pgp5 hides /Users/dave/.emacs.d/el-get/semi/site-lisp/semi/pgg-pgp5
/Users/dave/.emacs.d/el-get/nognus/lisp/pgg-pgp hides /Users/dave/.emacs.d/el-get/semi/site-lisp/semi/pgg-pgp
/Users/dave/.emacs.d/el-get/nognus/lisp/pgg-parse hides /Users/dave/.emacs.d/el-get/semi/site-lisp/semi/pgg-parse
/Users/dave/.emacs.d/el-get/nognus/lisp/pgg-gpg hides /Users/dave/.emacs.d/el-get/semi/site-lisp/semi/pgg-gpg
/Users/dave/.emacs.d/el-get/nognus/lisp/pgg-def hides /Users/dave/.emacs.d/el-get/semi/site-lisp/semi/pgg-def
/Users/dave/.emacs.d/el-get/nognus/lisp/sha1 hides /Users/dave/.emacs.d/el-get/flim/site-lisp/flim/sha1
/Users/dave/.emacs.d/el-get/nognus/lisp/sasl hides /Users/dave/.emacs.d/el-get/flim/site-lisp/flim/sasl
/Users/dave/.emacs.d/el-get/nognus/lisp/sasl-ntlm hides /Users/dave/.emacs.d/el-get/flim/site-lisp/flim/sasl-ntlm
/Users/dave/.emacs.d/el-get/nognus/lisp/sasl-digest hides /Users/dave/.emacs.d/el-get/flim/site-lisp/flim/sasl-digest
/Users/dave/.emacs.d/el-get/nognus/lisp/sasl-cram hides /Users/dave/.emacs.d/el-get/flim/site-lisp/flim/sasl-cram
/Users/dave/.emacs.d/el-get/nognus/lisp/ntlm hides /Users/dave/.emacs.d/el-get/flim/site-lisp/flim/ntlm
/Users/dave/.emacs.d/el-get/nognus/lisp/md4 hides /Users/dave/.emacs.d/el-get/flim/site-lisp/flim/md4
/Users/dave/.emacs.d/el-get/nognus/lisp/hmac-md5 hides /Users/dave/.emacs.d/el-get/flim/site-lisp/flim/hmac-md5
/Users/dave/.emacs.d/el-get/nognus/lisp/hmac-def hides /Users/dave/.emacs.d/el-get/flim/site-lisp/flim/hmac-def
/Users/dave/.emacs.d/el-get/nognus/lisp/hex-util hides /Users/dave/.emacs.d/el-get/flim/site-lisp/flim/hex-util
/Users/dave/.emacs.d/el-get/nognus/lisp/.dir-locals hides /Users/dave/.emacs.d/el-get/magit/.dir-locals
/Users/dave/.emacs.d/el-get/nognus/lisp/sha1 hides /Applications/Emacs.app/Contents/Resources/lisp/sha1
/Users/dave/.emacs.d/el-get/nognus/lisp/pgg hides /Applications/Emacs.app/Contents/Resources/lisp/pgg
/Users/dave/.emacs.d/el-get/nognus/lisp/pgg-pgp5 hides /Applications/Emacs.app/Contents/Resources/lisp/pgg-pgp5
/Users/dave/.emacs.d/el-get/nognus/lisp/pgg-pgp hides /Applications/Emacs.app/Contents/Resources/lisp/pgg-pgp
/Users/dave/.emacs.d/el-get/nognus/lisp/pgg-parse hides /Applications/Emacs.app/Contents/Resources/lisp/pgg-parse
/Users/dave/.emacs.d/el-get/nognus/lisp/pgg-gpg hides /Applications/Emacs.app/Contents/Resources/lisp/pgg-gpg
/Users/dave/.emacs.d/el-get/nognus/lisp/pgg-def hides /Applications/Emacs.app/Contents/Resources/lisp/pgg-def
/Users/dave/.emacs.d/el-get/nognus/lisp/password-cache hides /Applications/Emacs.app/Contents/Resources/lisp/password-cache
/Users/dave/.emacs.d/el-get/nognus/lisp/md4 hides /Applications/Emacs.app/Contents/Resources/lisp/md4
/Users/dave/.emacs.d/el-get/nognus/lisp/hex-util hides /Applications/Emacs.app/Contents/Resources/lisp/hex-util
/Users/dave/.emacs.d/el-get/nognus/lisp/format-spec hides /Applications/Emacs.app/Contents/Resources/lisp/format-spec
/Users/dave/.emacs.d/el-get/nognus/lisp/dns-mode hides /Applications/Emacs.app/Contents/Resources/lisp/textmodes/dns-mode
/Users/dave/.emacs.d/el-get/org-mode/lisp/org hides /Applications/Emacs.app/Contents/Resources/lisp/org/org
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-xoxo hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-xoxo
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-wl hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-wl
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-w3m hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-w3m
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-vm hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-vm
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-timer hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-timer
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-table hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-table
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-src hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-src
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-rmail hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-rmail
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-remember hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-remember
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-publish hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-publish
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-protocol hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-protocol
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-plot hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-plot
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-mouse hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-mouse
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-mobile hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-mobile
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-mhe hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-mhe
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-mew hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-mew
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-macs hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-macs
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-mac-message hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-mac-message
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-list hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-list
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-latex hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-latex
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-jsinfo hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-jsinfo
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-irc hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-irc
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-install hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-install
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-inlinetask hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-inlinetask
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-info hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-info
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-indent hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-indent
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-id hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-id
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-icalendar hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-icalendar
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-html hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-html
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-habit hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-habit
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-gnus hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-gnus
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-freemind hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-freemind
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-footnote hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-footnote
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-feed hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-feed
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-faces hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-faces
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-exp hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-exp
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-exp-blocks hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-exp-blocks
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-docbook hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-docbook
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-datetree hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-datetree
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-crypt hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-crypt
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-compat hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-compat
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-colview hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-colview
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-clock hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-clock
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-bibtex hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-bibtex
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-bbdb hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-bbdb
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-attach hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-attach
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-ascii hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-ascii
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-archive hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-archive
/Users/dave/.emacs.d/el-get/org-mode/lisp/org-agenda hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-agenda
/Users/dave/.emacs.d/el-get/nognus/lisp/tls hides /Applications/Emacs.app/Contents/Resources/lisp/net/tls
/Users/dave/.emacs.d/el-get/nognus/lisp/sasl hides /Applications/Emacs.app/Contents/Resources/lisp/net/sasl
/Users/dave/.emacs.d/el-get/nognus/lisp/sasl-ntlm hides /Applications/Emacs.app/Contents/Resources/lisp/net/sasl-ntlm
/Users/dave/.emacs.d/el-get/nognus/lisp/sasl-digest hides /Applications/Emacs.app/Contents/Resources/lisp/net/sasl-digest
/Users/dave/.emacs.d/el-get/nognus/lisp/sasl-cram hides /Applications/Emacs.app/Contents/Resources/lisp/net/sasl-cram
/Users/dave/.emacs.d/el-get/nognus/lisp/ntlm hides /Applications/Emacs.app/Contents/Resources/lisp/net/ntlm
/Users/dave/.emacs.d/el-get/nognus/lisp/netrc hides /Applications/Emacs.app/Contents/Resources/lisp/net/netrc
/Users/dave/.emacs.d/el-get/nognus/lisp/imap hides /Applications/Emacs.app/Contents/Resources/lisp/net/imap
/Users/dave/.emacs.d/el-get/nognus/lisp/hmac-md5 hides /Applications/Emacs.app/Contents/Resources/lisp/net/hmac-md5
/Users/dave/.emacs.d/el-get/nognus/lisp/hmac-def hides /Applications/Emacs.app/Contents/Resources/lisp/net/hmac-def
/Users/dave/.emacs.d/el-get/nognus/lisp/dns hides /Applications/Emacs.app/Contents/Resources/lisp/net/dns
/Users/dave/.emacs.d/el-get/nognus/lisp/dig hides /Applications/Emacs.app/Contents/Resources/lisp/net/dig
/Users/dave/.emacs.d/el-get/nognus/lisp/uudecode hides /Applications/Emacs.app/Contents/Resources/lisp/mail/uudecode
/Users/dave/.emacs.d/el-get/wanderlust/site-lisp/wl/rfc2368 hides /Applications/Emacs.app/Contents/Resources/lisp/mail/rfc2368
/Users/dave/.emacs.d/el-get/nognus/lisp/hashcash hides /Applications/Emacs.app/Contents/Resources/lisp/mail/hashcash
/Users/dave/.emacs.d/el-get/nognus/lisp/binhex hides /Applications/Emacs.app/Contents/Resources/lisp/mail/binhex
/Users/dave/.emacs.d/el-get/nognus/lisp/yenc hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/yenc
/Users/dave/.emacs.d/el-get/nognus/lisp/utf7 hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/utf7
/Users/dave/.emacs.d/el-get/nognus/lisp/starttls hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/starttls
/Users/dave/.emacs.d/el-get/nognus/lisp/spam hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/spam
/Users/dave/.emacs.d/el-get/nognus/lisp/spam-wash hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/spam-wash
/Users/dave/.emacs.d/el-get/nognus/lisp/spam-stat hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/spam-stat
/Users/dave/.emacs.d/el-get/nognus/lisp/spam-report hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/spam-report
/Users/dave/.emacs.d/el-get/nognus/lisp/smime hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/smime
/Users/dave/.emacs.d/el-get/nognus/lisp/smiley hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/smiley
/Users/dave/.emacs.d/el-get/nognus/lisp/sieve hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/sieve
/Users/dave/.emacs.d/el-get/nognus/lisp/sieve-mode hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/sieve-mode
/Users/dave/.emacs.d/el-get/nognus/lisp/sieve-manage hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/sieve-manage
/Users/dave/.emacs.d/el-get/nognus/lisp/score-mode hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/score-mode
/Users/dave/.emacs.d/el-get/nognus/lisp/rfc2231 hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/rfc2231
/Users/dave/.emacs.d/el-get/nognus/lisp/rfc2104 hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/rfc2104
/Users/dave/.emacs.d/el-get/nognus/lisp/rfc2047 hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/rfc2047
/Users/dave/.emacs.d/el-get/nognus/lisp/rfc2045 hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/rfc2045
/Users/dave/.emacs.d/el-get/nognus/lisp/rfc1843 hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/rfc1843
/Users/dave/.emacs.d/el-get/nognus/lisp/qp hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/qp
/Users/dave/.emacs.d/el-get/nognus/lisp/pop3 hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/pop3
/Users/dave/.emacs.d/el-get/nognus/lisp/nnweb hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nnweb
/Users/dave/.emacs.d/el-get/nognus/lisp/nnvirtual hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nnvirtual
/Users/dave/.emacs.d/el-get/nognus/lisp/nntp hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nntp
/Users/dave/.emacs.d/el-get/nognus/lisp/nnspool hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nnspool
/Users/dave/.emacs.d/el-get/nognus/lisp/nnrss hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nnrss
/Users/dave/.emacs.d/el-get/nognus/lisp/nnoo hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nnoo
/Users/dave/.emacs.d/el-get/nognus/lisp/nnnil hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nnnil
/Users/dave/.emacs.d/el-get/nognus/lisp/nnml hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nnml
/Users/dave/.emacs.d/el-get/nognus/lisp/nnmh hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nnmh
/Users/dave/.emacs.d/el-get/nognus/lisp/nnmbox hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nnmbox
/Users/dave/.emacs.d/el-get/nognus/lisp/nnmairix hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nnmairix
/Users/dave/.emacs.d/el-get/nognus/lisp/nnmaildir hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nnmaildir
/Users/dave/.emacs.d/el-get/nognus/lisp/nnmail hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nnmail
/Users/dave/.emacs.d/el-get/nognus/lisp/nnir hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nnir
/Users/dave/.emacs.d/el-get/nognus/lisp/nnimap hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nnimap
/Users/dave/.emacs.d/el-get/nognus/lisp/nnheader hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nnheader
/Users/dave/.emacs.d/el-get/nognus/lisp/nngateway hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nngateway
/Users/dave/.emacs.d/el-get/nognus/lisp/nnfolder hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nnfolder
/Users/dave/.emacs.d/el-get/nognus/lisp/nneething hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nneething
/Users/dave/.emacs.d/el-get/nognus/lisp/nndraft hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nndraft
/Users/dave/.emacs.d/el-get/nognus/lisp/nndoc hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nndoc
/Users/dave/.emacs.d/el-get/nognus/lisp/nndir hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nndir
/Users/dave/.emacs.d/el-get/nognus/lisp/nndiary hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nndiary
/Users/dave/.emacs.d/el-get/nognus/lisp/nnbabyl hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nnbabyl
/Users/dave/.emacs.d/el-get/nognus/lisp/nnagent hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nnagent
/Users/dave/.emacs.d/el-get/nognus/lisp/mml2015 hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/mml2015
/Users/dave/.emacs.d/el-get/nognus/lisp/mml1991 hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/mml1991
/Users/dave/.emacs.d/el-get/nognus/lisp/mml hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/mml
/Users/dave/.emacs.d/el-get/nognus/lisp/mml-smime hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/mml-smime
/Users/dave/.emacs.d/el-get/nognus/lisp/mml-sec hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/mml-sec
/Users/dave/.emacs.d/el-get/nognus/lisp/mm-view hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/mm-view
/Users/dave/.emacs.d/el-get/nognus/lisp/mm-uu hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/mm-uu
/Users/dave/.emacs.d/el-get/nognus/lisp/mm-util hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/mm-util
/Users/dave/.emacs.d/el-get/nognus/lisp/mm-url hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/mm-url
/Users/dave/.emacs.d/el-get/nognus/lisp/mm-partial hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/mm-partial
/Users/dave/.emacs.d/el-get/nognus/lisp/mm-extern hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/mm-extern
/Users/dave/.emacs.d/el-get/nognus/lisp/mm-encode hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/mm-encode
/Users/dave/.emacs.d/el-get/nognus/lisp/mm-decode hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/mm-decode
/Users/dave/.emacs.d/el-get/nognus/lisp/mm-bodies hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/mm-bodies
/Users/dave/.emacs.d/el-get/nognus/lisp/messcompat hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/messcompat
/Users/dave/.emacs.d/el-get/nognus/lisp/message hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/message
/Users/dave/.emacs.d/el-get/nognus/lisp/mailcap hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/mailcap
/Users/dave/.emacs.d/el-get/nognus/lisp/mail-source hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/mail-source
/Users/dave/.emacs.d/el-get/nognus/lisp/mail-prsvr hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/mail-prsvr
/Users/dave/.emacs.d/el-get/nognus/lisp/mail-parse hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/mail-parse
/Users/dave/.emacs.d/el-get/nognus/lisp/legacy-gnus-agent hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/legacy-gnus-agent
/Users/dave/.emacs.d/el-get/nognus/lisp/ietf-drums hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/ietf-drums
/Users/dave/.emacs.d/el-get/nognus/lisp/html2text hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/html2text
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-win hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-win
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-vm hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-vm
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-uu hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-uu
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-util hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-util
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-undo hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-undo
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-topic hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-topic
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-sum hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-sum
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-start hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-start
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-srvr hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-srvr
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-spec hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-spec
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-sieve hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-sieve
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-setup hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-setup
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-score hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-score
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-salt hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-salt
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-registry hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-registry
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-range hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-range
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-picon hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-picon
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-msg hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-msg
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-mlspl hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-mlspl
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-ml hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-ml
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-mh hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-mh
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-logic hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-logic
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-kill hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-kill
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-int hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-int
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-group hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-group
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-fun hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-fun
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-ems hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-ems
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-eform hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-eform
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-dup hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-dup
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-draft hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-draft
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-dired hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-dired
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-diary hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-diary
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-demon hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-demon
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-delay hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-delay
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-cus hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-cus
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-cite hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-cite
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-cache hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-cache
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-bookmark hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-bookmark
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-bcklg hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-bcklg
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-async hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-async
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-art hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-art
/Users/dave/.emacs.d/el-get/nognus/lisp/gnus-agent hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-agent
/Users/dave/.emacs.d/el-get/nognus/lisp/gmm-utils hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gmm-utils
/Users/dave/.emacs.d/el-get/nognus/lisp/flow-fill hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/flow-fill
/Users/dave/.emacs.d/el-get/nognus/lisp/ecomplete hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/ecomplete
/Users/dave/.emacs.d/el-get/nognus/lisp/deuglify hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/deuglify
/Users/dave/.emacs.d/el-get/nognus/lisp/compface hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/compface
/Users/dave/.emacs.d/el-get/nognus/lisp/canlock hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/canlock
/Users/dave/.emacs.d/el-get/nognus/lisp/auth-source hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/auth-source
/Users/dave/.emacs.d/el-get/nognus/lisp/time-date hides /Applications/Emacs.app/Contents/Resources/lisp/calendar/time-date
/Users/dave/.emacs.d/el-get/nognus/lisp/parse-time hides /Applications/Emacs.app/Contents/Resources/lisp/calendar/parse-time

Features:
(shadow sort gnus-util mail-extr message format-spec rfc822 mml mml-sec
mm-decode mm-bodies mm-encode mail-parse rfc2231 rfc2047 rfc2045
ietf-drums mailabbrev gmm-utils mailheader emacsbug thingatpt newcomment
cus-edit multi-isearch jka-compr ediff-merg ediff-diff ediff-wind
ediff-help ediff-util ediff-mult ediff-init ediff vc-git wl-score
mule-util ssl elmo-nntp elmo-sendlog elmo-internal elmo-imap4 time-stamp
elmo-net elmo-dop elmo-cache elmo-map hl-line modb-standard wl-mime
mime-edit pgg-parse mail-utils mailalias mime-setup mail-mime-setup
semi-setup mime-pgp pgg-def mime-play filename mime-image signature
wl-spam elmo-spam elsp-header elsp-generic org-wl bookmark
org-mac-message org-habit org-agenda org-id org-crypt org ob-emacs-lisp
ob-tangle ob-ref ob-lob ob-table org-footnote org-src ob-comint ob-keys
ob ob-eval org-pcomplete pcomplete org-list org-faces org-compat
org-entities org-macs cal-menu calendar cal-loaddefs filladapt wl-demo
wl-draft eword-encode wl-template sendmail wl-news derived wl-address
wl-thread wl-action wl-summary ps-print ps-def lpr wl-refile wl-message
elmo-mime mmelmo-buffer mmelmo-imap mime-view mime-conf calist semi-def
mmimap mime-parse mmbuffer mmgeneric wl-highlight elmo-multi wl-folder
wl wl-e21 wl-util pp elmo-flag elmo-localdir wl-vars epg-config
wl-version elmo elmo-signal elmo-msgdb modb modb-generic modb-entity
mime elmo-util emu invisible inv-23 poem poem-e20 poem-e20_3 utf7
eword-decode mel mime-def alist std11 mcharset mcs-20 mcs-e20 pces
pces-e20 pces-20 broken pcustom elmo-date timezone path-util elmo-vars
poe elmo-version pym static apel-ver product luna magit diff-mode
log-edit pcvs-util add-log zenburn compile comint ring maxframe
system-type-darwin-theme .loaddefs find-func browse-kill-ring
byte-code-cache byte-opt gravatar time-date url-cache url url-proxy
url-privacy url-expand url-methods url-history url-cookie url-util
url-parse url-vars mm-util mail-prsvr mailcap org-install gnus-load info
markdown-mode noutline outline yasnippet advice advice-preload edmacro
kmacro help-mode view assoc color-theme wid-edit el-get autoload
help-fns bytecomp byte-compile cl cl-19 dired regexp-opt easy-mmode
warnings paren server ido autorevert delsel cus-start cus-load elhome
tooltip ediff-hook vc-hooks lisp-float-type mwheel ns-win easymenu
tool-bar dnd fontset image fringe lisp-mode register page menu-bar
rfn-eshadow timer select scroll-bar mldrag mouse jit-lock font-lock
syntax facemenu font-core frame cham georgian utf-8-lang misc-lang
vietnamese tibetan thai tai-viet lao korean japanese hebrew greek
romanian slovak czech european ethiopic indian cyrillic chinese
case-table epa-hook jka-cmpr-hook help simple abbrev loaddefs button
minibuffer faces cus-face files text-properties overlay md5 base64
format env code-pages mule custom widget hashtable-print-readable
backquote make-network-process ns multi-tty emacs)

-- 
Dave Abrahams
BoostPro Computing
http://www.boostpro.com






^ permalink raw reply	[flat|nested] 29+ messages in thread

* bug#8890: 23.3; message writing slows emacs
  2011-06-18 16:45 bug#8890: 23.3; message writing slows emacs Dave Abrahams
@ 2011-09-11  4:32 ` Lars Magne Ingebrigtsen
  2011-09-11  6:54   ` Dave Abrahams
  2011-09-16 13:18 ` Stefan Monnier
  1 sibling, 1 reply; 29+ messages in thread
From: Lars Magne Ingebrigtsen @ 2011-09-11  4:32 UTC (permalink / raw)
  To: Dave Abrahams; +Cc: 8890

Dave Abrahams <dave@boostpro.com> writes:

> It would be good, IMO, to delay updating the visible message in the
> minibuffer line long enough to be sure that the message just written
> isn't about to be overwritten so fast that the user couldn't read it
> anyway.

Over-enthusiastic messaging isn't pretty, but slowing down Emacs just to
display normal "informative" messages would be really bad, in my
opinion.

-- 
(domestic pets only, the antidote for overdose, milk.)
  bloggy blog http://lars.ingebrigtsen.no/





^ permalink raw reply	[flat|nested] 29+ messages in thread

* bug#8890: 23.3; message writing slows emacs
  2011-09-11  4:32 ` Lars Magne Ingebrigtsen
@ 2011-09-11  6:54   ` Dave Abrahams
  2011-09-11  8:55     ` Eli Zaretskii
  0 siblings, 1 reply; 29+ messages in thread
From: Dave Abrahams @ 2011-09-11  6:54 UTC (permalink / raw)
  To: Lars Magne Ingebrigtsen; +Cc: 8890


on Sun Sep 11 2011, Lars Magne Ingebrigtsen <larsi-AT-gnus.org> wrote:

> Dave Abrahams <dave@boostpro.com> writes:
>
>> It would be good, IMO, to delay updating the visible message in the
>> minibuffer line long enough to be sure that the message just written
>> isn't about to be overwritten so fast that the user couldn't read it
>> anyway.
>
> Over-enthusiastic messaging isn't pretty, but slowing down Emacs just to
> display normal "informative" messages would be really bad, in my
> opinion.

I'm sorry; you've misunderstood me.  I agree with you!  I don't mean to
pause emacs; I mean to buffer the message until it has been stable for
some amount of time.  Hmm, I don't know whether emacs has the
architecture for that sort of asynchrony... but it should :-)

-- 
Dave Abrahams
BoostPro Computing
http://www.boostpro.com





^ permalink raw reply	[flat|nested] 29+ messages in thread

* bug#8890: 23.3; message writing slows emacs
  2011-09-11  6:54   ` Dave Abrahams
@ 2011-09-11  8:55     ` Eli Zaretskii
  2011-09-11 10:45       ` Dave Abrahams
  0 siblings, 1 reply; 29+ messages in thread
From: Eli Zaretskii @ 2011-09-11  8:55 UTC (permalink / raw)
  To: Dave Abrahams; +Cc: larsi, 8890

> From: Dave Abrahams <dave@boostpro.com>
> Date: Sun, 11 Sep 2011 02:54:34 -0400
> Cc: 8890@debbugs.gnu.org
> 
> I mean to buffer the message until it has been stable for some
> amount of time.

I don't understand the details of the feature you are requesting.
Suppose `message' is being repeatedly called by some Lisp program in
quick succession -- what would you like to be actually displayed? only
the text of final message?  If so, why is that a good idea?  Most
"good" uses of fast echoing display very similar messages, like
"Updating... NN% done", where only the number changes.  It would be a
pity to lose this checkpointing feature, IMO.  So you will probably
say that there should be a variable to be bound to select one behavior
or the other.  But if Lisp code needs to bind a variable to avoid the
flashing of different messages, why not avoid those messages in the
first place?

Your original report says:

  I haven't done actual timings, but I'm finding that I have a *very*
  strong perception that when emacs is writing lots of messages, it
  slows down considerably.

Redisplay always slows down, but on any modern machine displaying only
the echo area should take a few milliseconds at the most, so I'd be
surprised if some real slowdown was involved.  If you can show some
timings, please do, as there could be a bug or misfeature somewhere.

Anyway, can you describe the situation in which you see these flashing
messages?  The only one I can think of is when Emacs starts up and
restores a previous session.  Is that your use case, or did you see
this in other situations?





^ permalink raw reply	[flat|nested] 29+ messages in thread

* bug#8890: 23.3; message writing slows emacs
  2011-09-11  8:55     ` Eli Zaretskii
@ 2011-09-11 10:45       ` Dave Abrahams
  2011-09-11 11:20         ` Eli Zaretskii
  2011-09-11 14:51         ` Lars Magne Ingebrigtsen
  0 siblings, 2 replies; 29+ messages in thread
From: Dave Abrahams @ 2011-09-11 10:45 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: larsi, 8890


on Sun Sep 11 2011, Eli Zaretskii <eliz-AT-gnu.org> wrote:

>> From: Dave Abrahams <dave@boostpro.com>
>
>> Date: Sun, 11 Sep 2011 02:54:34 -0400
>> Cc: 8890@debbugs.gnu.org
>> 
>> I mean to buffer the message until it has been stable for some
>> amount of time.
>
> I don't understand the details of the feature you are requesting.
> Suppose `message' is being repeatedly called by some Lisp program in
> quick succession -- what would you like to be actually displayed? only
> the text of final message?  If so, why is that a good idea?  Most
> "good" uses of fast echoing display very similar messages, like
> "Updating... NN% done", where only the number changes.  

OK, good point.  But actually it's those that set the message once for
each percentage (or even more often) that cause me the most (perceived)
slowdown.  If you're just updating percentage complete, please don't do
it more than once every .5 seconds... at the fastest!

> It would be a pity to lose this checkpointing feature, IMO.  So you
> will probably say that there should be a variable to be bound to
> select one behavior or the other.  

No need to argue against that; I wasn't going to suggest it.

> Your original report says:
>
>   I haven't done actual timings, but I'm finding that I have a *very*
>   strong perception that when emacs is writing lots of messages, it
>   slows down considerably.
>
> Redisplay always slows down, but on any modern machine displaying only
> the echo area should take a few milliseconds at the most, so I'd be
> surprised if some real slowdown was involved.  

Don't forget that messages also fill up the *Messages* buffer.

> If you can show some timings, please do, as there could be a bug or
> misfeature somewhere.

I probably don't have time to do it, sadly.  So you will probably say
there should be a variable bound to give me more time... wait, I mean
you'll probably say that's a cop-out.  Guilty as charged.

> Anyway, can you describe the situation in which you see these flashing
> messages?  The only one I can think of is when Emacs starts up and
> restores a previous session.  Is that your use case, or did you see
> this in other situations?

Yeah, there's something in Gnus, perhaps article expiry, that seems slow
mostly because gnus-verbose defaults to 7 and it writes out gobs of
messages.  When I turned gnus-verbose down it seemed a lot faster.

-- 
Dave Abrahams
BoostPro Computing
http://www.boostpro.com





^ permalink raw reply	[flat|nested] 29+ messages in thread

* bug#8890: 23.3; message writing slows emacs
  2011-09-11 10:45       ` Dave Abrahams
@ 2011-09-11 11:20         ` Eli Zaretskii
  2011-09-11 11:30           ` Dave Abrahams
  2011-09-11 14:51         ` Lars Magne Ingebrigtsen
  1 sibling, 1 reply; 29+ messages in thread
From: Eli Zaretskii @ 2011-09-11 11:20 UTC (permalink / raw)
  To: Dave Abrahams; +Cc: larsi, 8890

> From: Dave Abrahams <dave@boostpro.com>
> Cc: larsi@gnus.org,  8890@debbugs.gnu.org
> Date: Sun, 11 Sep 2011 06:45:39 -0400
> 
> If you're just updating percentage complete, please don't do
> it more than once every .5 seconds... at the fastest!

Agreed, but that's something for the application programmers to
consider, not for the infrastructure.

> > Redisplay always slows down, but on any modern machine displaying only
> > the echo area should take a few milliseconds at the most, so I'd be
> > surprised if some real slowdown was involved.  
> 
> Don't forget that messages also fill up the *Messages* buffer.

I think that's so fast it can be ignored, unless _generating_ these
messages takes non-trivial computations.

> > Anyway, can you describe the situation in which you see these flashing
> > messages?  The only one I can think of is when Emacs starts up and
> > restores a previous session.  Is that your use case, or did you see
> > this in other situations?
> 
> Yeah, there's something in Gnus, perhaps article expiry, that seems slow
> mostly because gnus-verbose defaults to 7 and it writes out gobs of
> messages.  When I turned gnus-verbose down it seemed a lot faster.

Maybe there's something specific to Gnus, then.  In which case it's a
good thing we have Lars listening ;-)





^ permalink raw reply	[flat|nested] 29+ messages in thread

* bug#8890: 23.3; message writing slows emacs
  2011-09-11 11:20         ` Eli Zaretskii
@ 2011-09-11 11:30           ` Dave Abrahams
  2011-09-11 14:52             ` Lars Magne Ingebrigtsen
  0 siblings, 1 reply; 29+ messages in thread
From: Dave Abrahams @ 2011-09-11 11:30 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: larsi, 8890


on Sun Sep 11 2011, Eli Zaretskii <eliz-AT-gnu.org> wrote:

>> From: Dave Abrahams <dave@boostpro.com>
>
>> Cc: larsi@gnus.org,  8890@debbugs.gnu.org
>> Date: Sun, 11 Sep 2011 06:45:39 -0400
>> 
>> If you're just updating percentage complete, please don't do
>> it more than once every .5 seconds... at the fastest!
>
> Agreed, but that's something for the application programmers to
> consider, not for the infrastructure.

Well, not necessarily.  If emacs had a built-in, sanctioned "progress"
library, people could use that and it would take care of the problem.

>> > Anyway, can you describe the situation in which you see these flashing
>> > messages?  The only one I can think of is when Emacs starts up and
>> > restores a previous session.  Is that your use case, or did you see
>> > this in other situations?
>> 
>> Yeah, there's something in Gnus, perhaps article expiry, that seems slow
>> mostly because gnus-verbose defaults to 7 and it writes out gobs of
>> messages.  When I turned gnus-verbose down it seemed a lot faster.
>
> Maybe there's something specific to Gnus, then.  In which case it's a
> good thing we have Lars listening ;-)

Maybe.  But it seems like a common enough issue that emacs should
provide application programmers with some tools for avoiding it.

-- 
Dave Abrahams
BoostPro Computing
http://www.boostpro.com





^ permalink raw reply	[flat|nested] 29+ messages in thread

* bug#8890: 23.3; message writing slows emacs
  2011-09-11 10:45       ` Dave Abrahams
  2011-09-11 11:20         ` Eli Zaretskii
@ 2011-09-11 14:51         ` Lars Magne Ingebrigtsen
  1 sibling, 0 replies; 29+ messages in thread
From: Lars Magne Ingebrigtsen @ 2011-09-11 14:51 UTC (permalink / raw)
  To: Dave Abrahams; +Cc: 8890

Dave Abrahams <dave@boostpro.com> writes:

> Yeah, there's something in Gnus, perhaps article expiry, that seems slow
> mostly because gnus-verbose defaults to 7 and it writes out gobs of
> messages.  When I turned gnus-verbose down it seemed a lot faster.

That sounds like a bug.  :-)  I see that I have `gnus-verbose' set to
4.  I'll set it to the default and pounce on unnecessary messaging... 

-- 
(domestic pets only, the antidote for overdose, milk.)
  bloggy blog http://lars.ingebrigtsen.no/





^ permalink raw reply	[flat|nested] 29+ messages in thread

* bug#8890: 23.3; message writing slows emacs
  2011-09-11 11:30           ` Dave Abrahams
@ 2011-09-11 14:52             ` Lars Magne Ingebrigtsen
  2011-09-11 15:58               ` Eli Zaretskii
  0 siblings, 1 reply; 29+ messages in thread
From: Lars Magne Ingebrigtsen @ 2011-09-11 14:52 UTC (permalink / raw)
  To: Dave Abrahams; +Cc: 8890

Dave Abrahams <dave@boostpro.com> writes:

>>> If you're just updating percentage complete, please don't do
>>> it more than once every .5 seconds... at the fastest!
>>
>> Agreed, but that's something for the application programmers to
>> consider, not for the infrastructure.
>
> Well, not necessarily.  If emacs had a built-in, sanctioned "progress"
> library, people could use that and it would take care of the problem.

Emacs does clever screen updates, though.  So if the only thing that
changes is the number before the percentage, Emacs won't repaint the
entire line, I think?

-- 
(domestic pets only, the antidote for overdose, milk.)
  bloggy blog http://lars.ingebrigtsen.no/





^ permalink raw reply	[flat|nested] 29+ messages in thread

* bug#8890: 23.3; message writing slows emacs
  2011-09-11 14:52             ` Lars Magne Ingebrigtsen
@ 2011-09-11 15:58               ` Eli Zaretskii
  2011-09-11 16:39                 ` Dave Abrahams
  0 siblings, 1 reply; 29+ messages in thread
From: Eli Zaretskii @ 2011-09-11 15:58 UTC (permalink / raw)
  To: Lars Magne Ingebrigtsen; +Cc: dave, 8890

> From: Lars Magne Ingebrigtsen <larsi@gnus.org>
> Cc: Eli Zaretskii <eliz@gnu.org>,  8890@debbugs.gnu.org
> Date: Sun, 11 Sep 2011 16:52:56 +0200
> 
> Emacs does clever screen updates, though.  So if the only thing that
> changes is the number before the percentage, Emacs won't repaint the
> entire line, I think?

True.  Like I said, redisplay of the echo area is very fast.





^ permalink raw reply	[flat|nested] 29+ messages in thread

* bug#8890: 23.3; message writing slows emacs
  2011-09-11 15:58               ` Eli Zaretskii
@ 2011-09-11 16:39                 ` Dave Abrahams
  2011-09-16  2:22                   ` Dave Abrahams
  2011-09-16  8:54                   ` Eli Zaretskii
  0 siblings, 2 replies; 29+ messages in thread
From: Dave Abrahams @ 2011-09-11 16:39 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Lars Magne Ingebrigtsen, 8890


on Sun Sep 11 2011, Eli Zaretskii <eliz-AT-gnu.org> wrote:

>> From: Lars Magne Ingebrigtsen <larsi@gnus.org>
>
>> Cc: Eli Zaretskii <eliz@gnu.org>,  8890@debbugs.gnu.org
>> Date: Sun, 11 Sep 2011 16:52:56 +0200
>> 
>> Emacs does clever screen updates, though.  So if the only thing that
>> changes is the number before the percentage, Emacs won't repaint the
>> entire line, I think?
>
> True.  Like I said, redisplay of the echo area is very fast.

I don't think it's clever enough.  Try this:

--8<---------------cut here---------------start------------->8---
(let (timings)
  (dolist (reps '(1 10))
    (let ((start-time (current-time)))
      (loop for x to 10000 do
            (loop repeat reps do
                  (message "message #%s" x)))
      (push (time-subtract (current-time) start-time) timings)))
  (message "%s" (mapcar 'time-to-seconds timings)))
--8<---------------cut here---------------end--------------->8---

I get (29.539774 2.514761)

I think this shows that it takes (more than) 10x as long to write out
the same message 10 times as it does to write it out once.

-- 
Dave Abrahams
BoostPro Computing
http://www.boostpro.com





^ permalink raw reply	[flat|nested] 29+ messages in thread

* bug#8890: 23.3; message writing slows emacs
  2011-09-11 16:39                 ` Dave Abrahams
@ 2011-09-16  2:22                   ` Dave Abrahams
  2011-09-16  8:54                   ` Eli Zaretskii
  1 sibling, 0 replies; 29+ messages in thread
From: Dave Abrahams @ 2011-09-16  2:22 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Lars Magne Ingebrigtsen, 8890


on Sun Sep 11 2011, Dave Abrahams <dave-AT-boostpro.com> wrote:

> on Sun Sep 11 2011, Eli Zaretskii <eliz-AT-gnu.org> wrote:
>
>>> From: Lars Magne Ingebrigtsen <larsi@gnus.org>
>>
>>> Cc: Eli Zaretskii <eliz@gnu.org>,  8890@debbugs.gnu.org
>>> Date: Sun, 11 Sep 2011 16:52:56 +0200
>>> 
>>> Emacs does clever screen updates, though.  So if the only thing that
>>> changes is the number before the percentage, Emacs won't repaint the
>>> entire line, I think?
>>
>> True.  Like I said, redisplay of the echo area is very fast.
>
> I don't think it's clever enough.  Try this:
> (let (timings)
>   (dolist (reps '(1 10))
>     (let ((start-time (current-time)))
>       (loop for x to 10000 do
>             (loop repeat reps do
>                   (message "message #%s" x)))
>       (push (time-subtract (current-time) start-time) timings)))
>   (message "%s" (mapcar 'time-to-seconds timings)))
> I get (29.539774 2.514761)
>
> I think this shows that it takes (more than) 10x as long to write out
> the same message 10 times as it does to write it out once.

<bump> 

The above looks to me like conclusive evidence that writing out the same
percentage many times as part of a progress indication, rather than,
say, updating progress information once per second, will slow things
down a lot... and that's not a Gnus-specific problem.  *I* think this is
important, anyway.

-- 
Dave Abrahams
BoostPro Computing
http://www.boostpro.com





^ permalink raw reply	[flat|nested] 29+ messages in thread

* bug#8890: 23.3; message writing slows emacs
  2011-09-11 16:39                 ` Dave Abrahams
  2011-09-16  2:22                   ` Dave Abrahams
@ 2011-09-16  8:54                   ` Eli Zaretskii
  1 sibling, 0 replies; 29+ messages in thread
From: Eli Zaretskii @ 2011-09-16  8:54 UTC (permalink / raw)
  To: Dave Abrahams; +Cc: larsi, 8890

> From: Dave Abrahams <dave@boostpro.com>
> Cc: Lars Magne Ingebrigtsen <larsi@gnus.org>,  8890@debbugs.gnu.org
> Date: Sun, 11 Sep 2011 12:39:23 -0400
> 
> >> Emacs does clever screen updates, though.  So if the only thing that
> >> changes is the number before the percentage, Emacs won't repaint the
> >> entire line, I think?
> >
> > True.  Like I said, redisplay of the echo area is very fast.
> 
> I don't think it's clever enough.  Try this:
> 
> --8<---------------cut here---------------start------------->8---
> (let (timings)
>   (dolist (reps '(1 10))
>     (let ((start-time (current-time)))
>       (loop for x to 10000 do
>             (loop repeat reps do
>                   (message "message #%s" x)))
>       (push (time-subtract (current-time) start-time) timings)))
>   (message "%s" (mapcar 'time-to-seconds timings)))
> --8<---------------cut here---------------end--------------->8---
> 
> I get (29.539774 2.514761)
> 
> I think this shows that it takes (more than) 10x as long to write out
> the same message 10 times as it does to write it out once.

My results are different:

 . in a GUI session:        (16.172 2.891)

 . in a -nw (TTY) session:  (26.125 4.734)

The above is from an unoptimized build.  Here are timings from an
optimized build:

 . GUI session:             (10.875 2.0)

 . TTY:                     (19.313 3.453)

This shows that it takes 45% _less_ time to write the same message 10
times than 10x time to write the message once.

So at best the numbers are inconclusive.

Anyway, I know for a fact that Emacs does optimize screen writes in
this case.  Look at the function dispnew.c:update_text_area, around
lines 3784 to 3967.  I actually put a breakpoint there and saw that
only the changing number is being redrawn while running your test
code.  E.g., on line 3885, I see i = 9 while stop = 11, which means
Emacs will redraw only 2 characters.





^ permalink raw reply	[flat|nested] 29+ messages in thread

* bug#8890: 23.3; message writing slows emacs
  2011-06-18 16:45 bug#8890: 23.3; message writing slows emacs Dave Abrahams
  2011-09-11  4:32 ` Lars Magne Ingebrigtsen
@ 2011-09-16 13:18 ` Stefan Monnier
  2011-09-16 13:45   ` Eli Zaretskii
  1 sibling, 1 reply; 29+ messages in thread
From: Stefan Monnier @ 2011-09-16 13:18 UTC (permalink / raw)
  To: Dave Abrahams; +Cc: 8890

> I haven't done actual timings, but I'm finding that I have a *very*
> strong perception that when Emacs is writing lots of messages, it slows
> down considerably.

No doubt: Emacs redisplay is among its slowest operations, and while
"message" is handled specially so it doesn't cause a full redisplay,
it's still a slow operation.

> Even if this is only a perception, if it's shared by
> others I think it should be considered a bug.

I think it's largely unavoidable.

> Unless the *Message* buffer is visible, these messages are often
> flashing by so quickly that nobody could hope to see them.

Any such circumstance where messages flash by quickly and repeatedly
(the repetition is important, since otherwise the speed impact is
negligible compared to the redisplay that takes place at the end
of every command anyway) is a bug, so please report them.

> It would be good, IMO, to delay updating the visible message in the
> minibuffer line long enough to be sure that the message just written
> isn't about to be overwritten so fast that the user couldn't read
> it anyway.

We could try and have such a mechanism, yes, but it might be easier to
handle it at some other level.  E.g. the progress-reporter functions
attack one instance of the problem.

> Redisplay always slows down, but on any modern machine displaying only
> the echo area should take a few milliseconds at the most, so I'd be
> surprised if some real slowdown was involved.  If you can show some
> timings, please do, as there could be a bug or misfeature somewhere.

We've already had cases where we found that most of the time was spent
displaying messages.  That's why progress-reporter doesn't call message
at every update.  "A few milliseconds" sounds negligible, but if it's
done at every iteration of a loop whose body takes less than
a millisecond to run (we can do a lot of work in a millisecond on
today's machines), then it's a major slowdown.


        Stefan





^ permalink raw reply	[flat|nested] 29+ messages in thread

* bug#8890: 23.3; message writing slows emacs
  2011-09-16 13:18 ` Stefan Monnier
@ 2011-09-16 13:45   ` Eli Zaretskii
  2011-09-16 14:20     ` Stefan Monnier
  2011-09-16 15:09     ` Dave Abrahams
  0 siblings, 2 replies; 29+ messages in thread
From: Eli Zaretskii @ 2011-09-16 13:45 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: dave, 8890

> From: Stefan Monnier <monnier@iro.umontreal.ca>
> Date: Fri, 16 Sep 2011 09:18:51 -0400
> Cc: 8890@debbugs.gnu.org
> 
> "A few milliseconds" sounds negligible, but if it's done at every
> iteration of a loop whose body takes less than a millisecond to run
> (we can do a lot of work in a millisecond on today's machines), then
> it's a major slowdown.

Then programmers who run those loops should update the progress less
aggressively.  Redisplay (and infrastructure in general) lack the
context that would allow them to make good decisions as to when defer
repeated display.  Only the calling application can know that.

> (we can do a lot of work in a millisecond on today's machines)

From my experience, if a full redisplay cycle takes less than 50 ms,
it "feels" responsive enough.





^ permalink raw reply	[flat|nested] 29+ messages in thread

* bug#8890: 23.3; message writing slows emacs
  2011-09-16 13:45   ` Eli Zaretskii
@ 2011-09-16 14:20     ` Stefan Monnier
  2011-09-16 15:11       ` Dave Abrahams
  2011-09-16 15:09     ` Dave Abrahams
  1 sibling, 1 reply; 29+ messages in thread
From: Stefan Monnier @ 2011-09-16 14:20 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: dave, 8890

>> "A few milliseconds" sounds negligible, but if it's done at every
>> iteration of a loop whose body takes less than a millisecond to run
>> (we can do a lot of work in a millisecond on today's machines), then
>> it's a major slowdown.
> Then programmers who run those loops should update the progress less
> aggressively.  Redisplay (and infrastructure in general) lack the
> context that would allow them to make good decisions as to when defer
> repeated display.  Only the calling application can know that.

Indeed.  The main problem with changing `message' is that if it is
called too soon after the previous `message' we can't easily say "don't
display this one" since there may not be any subsequent message coming,
so we'd have to stash the last undisplayed message and then try and
figure out good places/times to cause them to be displayed.

So the general approach to fixing those problems is to say "use
progress-reporter-update" since this function has the advantage of
knowing that there will be a `progress-reporter-done' at some later
point, which allows it to skip a message without worries.


        Stefan





^ permalink raw reply	[flat|nested] 29+ messages in thread

* bug#8890: 23.3; message writing slows emacs
  2011-09-16 13:45   ` Eli Zaretskii
  2011-09-16 14:20     ` Stefan Monnier
@ 2011-09-16 15:09     ` Dave Abrahams
  1 sibling, 0 replies; 29+ messages in thread
From: Dave Abrahams @ 2011-09-16 15:09 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 8890


on Fri Sep 16 2011, Eli Zaretskii <eliz-AT-gnu.org> wrote:

>> From: Stefan Monnier <monnier@iro.umontreal.ca>
>
>> Date: Fri, 16 Sep 2011 09:18:51 -0400
>> Cc: 8890@debbugs.gnu.org
>> 
>> "A few milliseconds" sounds negligible, but if it's done at every
>> iteration of a loop whose body takes less than a millisecond to run
>> (we can do a lot of work in a millisecond on today's machines), then
>> it's a major slowdown.
>
> Then programmers who run those loops should update the progress less
> aggressively.  Redisplay (and infrastructure in general) lack the
> context that would allow them to make good decisions as to when defer
> repeated display.  Only the calling application can know that.

There's a middle path: provide a `progress-message' function.  That
allows the caller to provide the semantic context that this particular
message isn't critical without burdening every single application with
building its own throttling updater.

-- 
Dave Abrahams
BoostPro Computing
http://www.boostpro.com





^ permalink raw reply	[flat|nested] 29+ messages in thread

* bug#8890: 23.3; message writing slows emacs
  2011-09-16 14:20     ` Stefan Monnier
@ 2011-09-16 15:11       ` Dave Abrahams
  2011-09-17  5:19         ` Lars Magne Ingebrigtsen
  0 siblings, 1 reply; 29+ messages in thread
From: Dave Abrahams @ 2011-09-16 15:11 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: 8890


on Fri Sep 16 2011, Stefan Monnier <monnier-AT-iro.umontreal.ca> wrote:

>>> "A few milliseconds" sounds negligible, but if it's done at every
>
>>> iteration of a loop whose body takes less than a millisecond to run
>>> (we can do a lot of work in a millisecond on today's machines), then
>>> it's a major slowdown.
>> Then programmers who run those loops should update the progress less
>> aggressively.  Redisplay (and infrastructure in general) lack the
>> context that would allow them to make good decisions as to when defer
>> repeated display.  Only the calling application can know that.
>
> Indeed.  The main problem with changing `message' is that if it is
> called too soon after the previous `message' we can't easily say "don't
> display this one" since there may not be any subsequent message coming,
> so we'd have to stash the last undisplayed message and then try and
> figure out good places/times to cause them to be displayed.

Well, the `obvious' good place/time is at next idle if no further
messages have come along to stomp on the previous one.

> So the general approach to fixing those problems is to say "use
> progress-reporter-update" since this function has the advantage of
> knowing that there will be a `progress-reporter-done' at some later
> point, which allows it to skip a message without worries.

Hm.  So there *is* a builtin functionality for this... well, that's
good.  Sorry if I've wasted everyone's time on this.

-- 
Dave Abrahams
BoostPro Computing
http://www.boostpro.com





^ permalink raw reply	[flat|nested] 29+ messages in thread

* bug#8890: 23.3; message writing slows emacs
  2011-09-16 15:11       ` Dave Abrahams
@ 2011-09-17  5:19         ` Lars Magne Ingebrigtsen
  2011-09-17  6:23           ` Dave Abrahams
                             ` (3 more replies)
  0 siblings, 4 replies; 29+ messages in thread
From: Lars Magne Ingebrigtsen @ 2011-09-17  5:19 UTC (permalink / raw)
  To: Dave Abrahams; +Cc: 8890

Dave Abrahams <dave@boostpro.com> writes:

>> So the general approach to fixing those problems is to say "use
>> progress-reporter-update" since this function has the advantage of
>> knowing that there will be a `progress-reporter-done' at some later
>> point, which allows it to skip a message without worries.
>
> Hm.  So there *is* a builtin functionality for this... well, that's
> good.  Sorry if I've wasted everyone's time on this.

I didn't know about progress-reporter, so my time wasn't wasted, at
least.  :-)

But I wonder whether a simpler, more general function would be
possible.  If we're outputting stuff that's not a percentage,
progress-reporter doesn't help much.

`message' could work as follows:

If it's been less than (say) 50th of a second since the previous
message, then don't message anything.  However, set up a timer in a
100th of a second's time to display that message -- if nothing else has
been displayed in the mean time.

The net effect will be that normal messaging (where it's been a long
time since the previous message) is displayed as usual, but when we
enter a "high-message" storm, we start skipping messages.  But we always
end up showing the final message, anyway.

This would be a very simple interface for programmers to deal with
(i.e., "don't worry about it"), and the user wouldn't notice anything in
particular -- other than Emacs being faster in some situations.

-- 
(domestic pets only, the antidote for overdose, milk.)
  bloggy blog http://lars.ingebrigtsen.no/





^ permalink raw reply	[flat|nested] 29+ messages in thread

* bug#8890: 23.3; message writing slows emacs
  2011-09-17  5:19         ` Lars Magne Ingebrigtsen
@ 2011-09-17  6:23           ` Dave Abrahams
  2011-09-17  8:25           ` Eli Zaretskii
                             ` (2 subsequent siblings)
  3 siblings, 0 replies; 29+ messages in thread
From: Dave Abrahams @ 2011-09-17  6:23 UTC (permalink / raw)
  To: Lars Magne Ingebrigtsen; +Cc: 8890


on Sat Sep 17 2011, Lars Magne Ingebrigtsen <larsi-AT-gnus.org> wrote:

> Dave Abrahams <dave@boostpro.com> writes:
>
>>> So the general approach to fixing those problems is to say "use
>>> progress-reporter-update" since this function has the advantage of
>>> knowing that there will be a `progress-reporter-done' at some later
>>> point, which allows it to skip a message without worries.
>>
>> Hm.  So there *is* a builtin functionality for this... well, that's
>> good.  Sorry if I've wasted everyone's time on this.
>
> I didn't know about progress-reporter, so my time wasn't wasted, at
> least.  :-)
>
> But I wonder whether a simpler, more general function would be
> possible.  If we're outputting stuff that's not a percentage,
> progress-reporter doesn't help much.
>
> `message' could work as follows:
>
> If it's been less than (say) 50th of a second since the previous
> message, then don't message anything.  However, set up a timer in a
> 100th of a second's time to display that message -- if nothing else has
> been displayed in the mean time.

Technically, that 100th of a second could be arbitrarily long:

,----[ (info "(elisp)Timers") ]
|    Emacs cannot run timers at any arbitrary point in a Lisp program; it
| can run them only when Emacs could accept output from a subprocess:
| namely, while waiting or inside certain primitive functions such as
| `sit-for' or `read-event' which _can_ wait.  Therefore, a timer's
| execution may be delayed if Emacs is busy.  However, the time of
| execution is very precise if Emacs is idle.
`----

However, that might not be such a bad thing.

-- 
Dave Abrahams
BoostPro Computing
http://www.boostpro.com





^ permalink raw reply	[flat|nested] 29+ messages in thread

* bug#8890: 23.3; message writing slows emacs
  2011-09-17  5:19         ` Lars Magne Ingebrigtsen
  2011-09-17  6:23           ` Dave Abrahams
@ 2011-09-17  8:25           ` Eli Zaretskii
  2011-09-17  8:29             ` Lars Magne Ingebrigtsen
  2011-09-17 21:06           ` Stefan Monnier
  2022-04-26 13:20           ` Lars Ingebrigtsen
  3 siblings, 1 reply; 29+ messages in thread
From: Eli Zaretskii @ 2011-09-17  8:25 UTC (permalink / raw)
  To: Lars Magne Ingebrigtsen; +Cc: dave, 8890

> From: Lars Magne Ingebrigtsen <larsi@gnus.org>
> Date: Sat, 17 Sep 2011 07:19:56 +0200
> Cc: 8890@debbugs.gnu.org
> 
> `message' could work as follows:
> 
> If it's been less than (say) 50th of a second since the previous
> message, then don't message anything.  However, set up a timer in a
> 100th of a second's time to display that message -- if nothing else has
> been displayed in the mean time.

As I wrote earlier, `message' is the wrong place to fix this kind of
problems: it doesn't have enough context to decide whether or not it's
TRT to skip a message.  A Lisp program that calls `message' could have
good reasons to do this; not displaying those messages violates the
principle of least surprise.

The right place for applying this logic is in the Lisp program that
calls `message'.

> The net effect will be that normal messaging (where it's been a long
> time since the previous message) is displayed as usual, but when we
> enter a "high-message" storm, we start skipping messages.  But we always
> end up showing the final message, anyway.

You are assuming that the final message is the only one that counts.
Undoubtedly, there are use cases where this is correct.  But there are
others where it will be wrong, and `message' will not be able to
second-guess its callers well enough to know which one is true.





^ permalink raw reply	[flat|nested] 29+ messages in thread

* bug#8890: 23.3; message writing slows emacs
  2011-09-17  8:25           ` Eli Zaretskii
@ 2011-09-17  8:29             ` Lars Magne Ingebrigtsen
  2011-09-17  9:24               ` Eli Zaretskii
  2011-09-17 12:01               ` Juri Linkov
  0 siblings, 2 replies; 29+ messages in thread
From: Lars Magne Ingebrigtsen @ 2011-09-17  8:29 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: dave, 8890

Eli Zaretskii <eliz@gnu.org> writes:

> You are assuming that the final message is the only one that counts.
> Undoubtedly, there are use cases where this is correct.  But there are
> others where it will be wrong, and `message' will not be able to
> second-guess its callers well enough to know which one is true.

If the messages arrive with a 50ms delay, there's no way anybody is
going to see that message in any case.

-- 
(domestic pets only, the antidote for overdose, milk.)
  bloggy blog http://lars.ingebrigtsen.no/





^ permalink raw reply	[flat|nested] 29+ messages in thread

* bug#8890: 23.3; message writing slows emacs
  2011-09-17  8:29             ` Lars Magne Ingebrigtsen
@ 2011-09-17  9:24               ` Eli Zaretskii
  2011-09-17 12:01               ` Juri Linkov
  1 sibling, 0 replies; 29+ messages in thread
From: Eli Zaretskii @ 2011-09-17  9:24 UTC (permalink / raw)
  To: Lars Magne Ingebrigtsen; +Cc: dave, 8890

> From: Lars Magne Ingebrigtsen <larsi@gnus.org>
> Cc: dave@boostpro.com,  8890@debbugs.gnu.org
> Date: Sat, 17 Sep 2011 10:29:33 +0200
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> > You are assuming that the final message is the only one that counts.
> > Undoubtedly, there are use cases where this is correct.  But there are
> > others where it will be wrong, and `message' will not be able to
> > second-guess its callers well enough to know which one is true.
> 
> If the messages arrive with a 50ms delay, there's no way anybody is
> going to see that message in any case.

You underestimate the speed of speed-reading ;-)





^ permalink raw reply	[flat|nested] 29+ messages in thread

* bug#8890: 23.3; message writing slows emacs
  2011-09-17  8:29             ` Lars Magne Ingebrigtsen
  2011-09-17  9:24               ` Eli Zaretskii
@ 2011-09-17 12:01               ` Juri Linkov
  1 sibling, 0 replies; 29+ messages in thread
From: Juri Linkov @ 2011-09-17 12:01 UTC (permalink / raw)
  To: Lars Magne Ingebrigtsen; +Cc: dave, 8890

> If the messages arrive with a 50ms delay, there's no way anybody is
> going to see that message in any case.

There is a related problem.  Some messages are too important to miss.
So in some cases messages should be accumulated and displayed
as one multi-line message.





^ permalink raw reply	[flat|nested] 29+ messages in thread

* bug#8890: 23.3; message writing slows emacs
  2011-09-17  5:19         ` Lars Magne Ingebrigtsen
  2011-09-17  6:23           ` Dave Abrahams
  2011-09-17  8:25           ` Eli Zaretskii
@ 2011-09-17 21:06           ` Stefan Monnier
  2011-09-18  6:50             ` Lars Magne Ingebrigtsen
  2022-04-26 13:20           ` Lars Ingebrigtsen
  3 siblings, 1 reply; 29+ messages in thread
From: Stefan Monnier @ 2011-09-17 21:06 UTC (permalink / raw)
  To: Lars Magne Ingebrigtsen; +Cc: Dave Abrahams, 8890

> If it's been less than (say) 50th of a second since the previous
> message, then don't message anything.  However, set up a timer in a
> 100th of a second's time to display that message -- if nothing else has
> been displayed in the mean time.

That's much too tricky to implement.  Making it reliable is going to
be painful.  Much easier to allow progress-reporter-update to output
non-percentage messages (e.g. for bytecomp, the changing part is not
a percentage but a function name).


        Stefan





^ permalink raw reply	[flat|nested] 29+ messages in thread

* bug#8890: 23.3; message writing slows emacs
  2011-09-17 21:06           ` Stefan Monnier
@ 2011-09-18  6:50             ` Lars Magne Ingebrigtsen
  2011-09-18 13:16               ` Stefan Monnier
  0 siblings, 1 reply; 29+ messages in thread
From: Lars Magne Ingebrigtsen @ 2011-09-18  6:50 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Dave Abrahams, 8890

Stefan Monnier <monnier@iro.umontreal.ca> writes:

>> If it's been less than (say) 50th of a second since the previous
>> message, then don't message anything.  However, set up a timer in a
>> 100th of a second's time to display that message -- if nothing else has
>> been displayed in the mean time.
>
> That's much too tricky to implement.  Making it reliable is going to
> be painful.

Is it getting a timer to work that's tricky?

> Much easier to allow progress-reporter-update to output non-percentage
> messages (e.g. for bytecomp, the changing part is not a percentage but
> a function name).

If we're not going to make `message' just behave, then a function pair
like `message-maybe' (which wouldn't output anything that arrives too
fast) and a `message-flush' (to say that we're finished with the dubious
messaging) might do the trick.

That doesn't work very well with nested regions of dubious messaging, of
course, but that's probably not very common.

-- 
(domestic pets only, the antidote for overdose, milk.)
  bloggy blog http://lars.ingebrigtsen.no/





^ permalink raw reply	[flat|nested] 29+ messages in thread

* bug#8890: 23.3; message writing slows emacs
  2011-09-18  6:50             ` Lars Magne Ingebrigtsen
@ 2011-09-18 13:16               ` Stefan Monnier
  2011-09-21 19:01                 ` Lars Magne Ingebrigtsen
  0 siblings, 1 reply; 29+ messages in thread
From: Stefan Monnier @ 2011-09-18 13:16 UTC (permalink / raw)
  To: Lars Magne Ingebrigtsen; +Cc: Dave Abrahams, 8890

>>> If it's been less than (say) 50th of a second since the previous
>>> message, then don't message anything.  However, set up a timer in a
>>> 100th of a second's time to display that message -- if nothing else has
>>> been displayed in the mean time.
>> That's much too tricky to implement.  Making it reliable is going to
>> be painful.
> Is it getting a timer to work that's tricky?

Yes, getting the timer to work, canceling it when needed, etc...  It's
fiddly.  Especially when compared to the simplicity of
progress-reporter-update/progress-reporter-done.

> If we're not going to make `message' just behave, then a function pair
> like `message-maybe' (which wouldn't output anything that arrives too
> fast) and a `message-flush' (to say that we're finished with the dubious
> messaging) might do the trick.

They exist and are called progress-reporter-update and
progress-reporter-done respectively.  They just need to be improved to
allow non-numerical non-nil updates.


        Stefan





^ permalink raw reply	[flat|nested] 29+ messages in thread

* bug#8890: 23.3; message writing slows emacs
  2011-09-18 13:16               ` Stefan Monnier
@ 2011-09-21 19:01                 ` Lars Magne Ingebrigtsen
  0 siblings, 0 replies; 29+ messages in thread
From: Lars Magne Ingebrigtsen @ 2011-09-21 19:01 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Dave Abrahams, 8890

Stefan Monnier <monnier@iro.umontreal.ca> writes:

> Yes, getting the timer to work, canceling it when needed, etc...  It's
> fiddly.  Especially when compared to the simplicity of
> progress-reporter-update/progress-reporter-done.

If it's possible to get the timer to work, then I think the rest is just
a small matter of programming.

While the process-reporter interface is very clean and nice, it does
require that you pass around the reporter object, which can be fiddly,
too -- but it's a fiddliness that all the users of the code have to
relate to.  Whereas a hysteresis-safe `message' would just work without
anybody thinking about it.

I mean, if we could get it to work.

-- 
(domestic pets only, the antidote for overdose, milk.)
  bloggy blog http://lars.ingebrigtsen.no/





^ permalink raw reply	[flat|nested] 29+ messages in thread

* bug#8890: 23.3; message writing slows emacs
  2011-09-17  5:19         ` Lars Magne Ingebrigtsen
                             ` (2 preceding siblings ...)
  2011-09-17 21:06           ` Stefan Monnier
@ 2022-04-26 13:20           ` Lars Ingebrigtsen
  3 siblings, 0 replies; 29+ messages in thread
From: Lars Ingebrigtsen @ 2022-04-26 13:20 UTC (permalink / raw)
  To: Dave Abrahams; +Cc: Stefan Monnier, 8890

Lars Magne Ingebrigtsen <larsi@gnus.org> writes:

> But I wonder whether a simpler, more general function would be
> possible.  If we're outputting stuff that's not a percentage,
> progress-reporter doesn't help much.

This has basically been implemented as `with-delayed-message' in Emacs
29, so I'm therefore closing this bug report.  (Although we haven't
changed some of the more message-happy things in Emacs to use the macro,
but we should.)

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 29+ messages in thread

end of thread, other threads:[~2022-04-26 13:20 UTC | newest]

Thread overview: 29+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-06-18 16:45 bug#8890: 23.3; message writing slows emacs Dave Abrahams
2011-09-11  4:32 ` Lars Magne Ingebrigtsen
2011-09-11  6:54   ` Dave Abrahams
2011-09-11  8:55     ` Eli Zaretskii
2011-09-11 10:45       ` Dave Abrahams
2011-09-11 11:20         ` Eli Zaretskii
2011-09-11 11:30           ` Dave Abrahams
2011-09-11 14:52             ` Lars Magne Ingebrigtsen
2011-09-11 15:58               ` Eli Zaretskii
2011-09-11 16:39                 ` Dave Abrahams
2011-09-16  2:22                   ` Dave Abrahams
2011-09-16  8:54                   ` Eli Zaretskii
2011-09-11 14:51         ` Lars Magne Ingebrigtsen
2011-09-16 13:18 ` Stefan Monnier
2011-09-16 13:45   ` Eli Zaretskii
2011-09-16 14:20     ` Stefan Monnier
2011-09-16 15:11       ` Dave Abrahams
2011-09-17  5:19         ` Lars Magne Ingebrigtsen
2011-09-17  6:23           ` Dave Abrahams
2011-09-17  8:25           ` Eli Zaretskii
2011-09-17  8:29             ` Lars Magne Ingebrigtsen
2011-09-17  9:24               ` Eli Zaretskii
2011-09-17 12:01               ` Juri Linkov
2011-09-17 21:06           ` Stefan Monnier
2011-09-18  6:50             ` Lars Magne Ingebrigtsen
2011-09-18 13:16               ` Stefan Monnier
2011-09-21 19:01                 ` Lars Magne Ingebrigtsen
2022-04-26 13:20           ` Lars Ingebrigtsen
2011-09-16 15:09     ` Dave Abrahams

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).