Raymond Toy rtoy@earthlink.net writes:
However, for a long time, I've had GC notify function that would also print out how much time (user and real) GC took. What is the proper way of modifying slimes GC hook functions?
The simplest way is probably something like:
(defun my-hook1 (&rest args) (when swank::*emacs-connection* (swank::eval-in-emacs `(slime-background-message "%s" ,(prin1-to-string args)) t)))
(defun my-hook2 (&rest args) ...)
(setq swank-backend::*install-gc-hooks* nil) (setq ext:*gc-notify-before* #'my-hook1) (setq ext:*gc-notify-after* #'my-hook2)
This basically disables the SLIME's default hooks and uses my-hook{1,2} instead. Testing whether swank::*emacs-connection* is non-nil makes sure that we can send something to Emacs. eval-in-emacs sends a sexp to Emacs and evaluates it there. Note that the symbol in the first position of that sexp is treated specially: it is downcased and the (CL) package prefix is stripped off, so that it makes more sense to Emacs.
You can, of course, use something other than slime-background-message. Especially if you use the typeout frame it might be annoying to the have the GC messages in that frame.
BTW, is there a way to get the size of the different GC generations in CMUCL?
Helmut.