--- Begin Message ---
Subject: |
23.0.60; display of multiple frames: refresh and memory problems |
Date: |
Tue, 30 Dec 2008 22:03:03 -0800 |
I see this with my own setup, which uses more faces etc., but I
can reproduce it to some extent in emacs -Q. When many frames
are open, I see these problems, in order of severity, severity
worsening with more frames:
1. Redisplay problems. If a frame is partly behind another frame or
other window-mgr window, and the occluding frame is iconified or moved
out of the way, then the formerly hidden part of the occluded frame
that is now visible is not refreshed - it stays blanked out.
With enough frames it is never refreshed until I do `C-l'. The result
is that in practice, with my setup, having several frames means I must
often do `C-l' to see a frame.
2. Memory problems. With enough frames opened, I get a memory warning
from Emacs, or Emacs hangs altogether, or it crashes.
With my own setup, the redisplay problems happen with even a few frames,
the memory 75% warning appears with about 15 frames. And if I open, say 20
frames, Emacs hangs and I need to use the task manager to kill it - or it
crashes. With Emacs 20 through 22, I never see any such problems. I can have
several Emacses open at once, with any number of frames for each. As soon as I
use Emacs 23, I run into these problems.
With emacs -Q, it takes many, many more frames for problem #1 to appear, and I
have not yet seen problem #2. As I write this, I'm seeing the redisplay problem
somewhat in emacs -Q, with 30 frames open. But the problem is still slight in
emacs -Q: if I move a frame the others are redisplayed pretty quickly.
If I can isolate anything else in my own setup that contributes to this I'll
send it along, but that might not be soon or easy.
A quick way to test the redisplay problem with emacs -Q is to load dired-x.el,
set pop-up-frames to t, and eval this:
(defun dired-simultaneous-find-file (file-list option)
"Same as original, but respects `pop-up-frames'."
(let (size)
(cond ((and option (natnump option))
(while file-list (find-file-noselect (car file-list)) (pop
file-list)))
((or pop-up-frames option)
(while file-list (find-file-other-frame (car file-list)) (pop
file-list)))
(t
(setq size (/ (window-height) (length file-list)))
(when (> window-min-height size)
(error "Too many files to visit simultaneously. Try C-u prefix."))
(find-file (car file-list))
(pop file-list)
(while file-list
;; Vertically split off a window of desired size.
;; Upper window will have SIZE lines.
;; Select lower (larger) window. We split it again.
(select-window (split-window nil size))
(find-file (car file-list))
(pop file-list))))))
Then mark lots of files in Dired and hit `F' to open them all in
separate frames.
In GNU Emacs 23.0.60.1 (i386-mingw-nt5.1.2600)
of 2008-12-30 on LENNART-69DE564
Windowing system distributor `Microsoft Corp.', version 5.1.2600
configured using `configure --with-gcc (3.4) --no-opt --cflags -Ic:/g/include
-fno-crossjumping'
--- End Message ---