bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#41423: 27.0.91; eshell file completion in tramp dir is slow (3 minut


From: Gregory Heytings
Subject: bug#41423: 27.0.91; eshell file completion in tramp dir is slow (3 minutes) [regression on pretest]
Date: Tue, 1 Sep 2020 13:50:16 +0200 (CEST)
User-agent: Alpine 2.22 (NEB 394 2020-01-19)



Would it help to profile the completion process in this use case using the built-in Lisp profiler?


No, because the bug is not about cpu or mem usage, but about doing something useless that just takes time (without eating much resources).

A much better way to profile this is to use:

(defvar pcomplete-completions-at-point-time 0)
(defun around-pcomplete-completions-at-point (fun)
  (message "calling pcomplete-completions-at-point")
  (setq pcomplete-completions-at-point-time (float-time))
  (let ((ret (funcall fun)))
    (message "returning from pcomplete-completions-at-point, call took %.2f 
seconds" (- (float-time) pcomplete-completions-at-point-time))
    ret))
(advice-add 'pcomplete-completions-at-point :around 
#'around-pcomplete-completions-at-point)

(let ((default-directory "/ssh:user@host:~/")) (eshell))

This will print:

calling pcomplete-completions-at-point
returning from pcomplete-completions-at-point, call took 0.00 seconds
calling pcomplete-completions-at-point
returning from pcomplete-completions-at-point, call took 0.00 seconds
calling pcomplete-completions-at-point
returning from pcomplete-completions-at-point, call took N seconds

The value of N depends on the speed of your connection. On a fast connection it will be something around 50, on a slower one something around 100. With a local directory (that is, without let-binding default-directory before entering eshell) it depends on your machine. On a fast one it will be something around 0.10, on a slower one something around 0.50.

Note again that this third call to pcomplete-completions-at-point does nothing useful. It just build a list of all possible commands, and throws it away.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]