I missed this again! There is definitely something wrong. Anyway... Eli Zaretskii writes: >> From: Akib Azmain Turja >> Cc: 59641@debbugs.gnu.org >> Date: Sat, 17 Dec 2022 00:29:02 +0600 >> >> >> Here are the reports (attached), but don't seem to be human readable: >> > >> > Copy them from the display shown by profiler-report, after you expand it >> > completely. >> > >> > And the "cpu" profile is enough; the "mem" one doesn't add anything useful. >> >> Sorry, I missed this reply. I found this in debbugs.gnu.org. :O >> >> Here is the data: (I didn't redo the steps, I just did >> 'M-x profiler-find-profile RET path/to/profile'. ;) ) >> >> --8<---------------cut here---------------start------------->8--- >> 9397 95% - term-emulate-terminal >> 2710 27% - term-handle-ansi-escape >> 1831 18% - term-down >> 8 0% term-move-columns >> 765 7% - term-goto > > Doesn't surprise me: most of the time is spent in term.el's business > logic, not in Emacs display primitives. I know that very well. > > If you want to work on speeding up term.el, I suggest to start by > loading term.el (not term.elc) manually, and repeating the profiling > session. That could tell you in more detail where are the hot sports > in those functions at the top of the profile. Then some clever > optimization ideas are needed to make it significantly faster. > > Thanks. I guess the hot spot here is 'vertical-motion'. 'vertical-motion' takes various things into account, which are unnecessary for a terminal emulator. Eat implements its own motion functions, which make their own assumptions (e.g. each character takes exactly one column, each line finishes with a newline, etc). I guess this might be a reason why Eat is faster. Note that I'm the author of Eat, and Term is a direct competitor of Eat. So although I want Term to be faster, I will be of course biased if I try to improve Term. But don't get me wrong, I really want Term to do better; competition is fun when you have tough competitors! Here is the CPU profile data, with 'term.el' loaded: --8<---------------cut here---------------start------------->8--- 1551 87% - term-emulate-terminal 1551 87% - if 1551 87% - progn 1551 87% - save-current-buffer 1515 85% - let* 1515 85% - let 1515 85% - save-current-buffer 1515 85% - unwind-protect 1515 85% - progn 1361 76% - save-restriction 1361 76% - while 1341 75% - let 1130 63% - let* 1126 63% - cond 1126 63% - let 586 33% - funcall 108 6% - vertical-motion 100 5% - jit-lock-function 84 4% - jit-lock-fontify-now 64 3% - jit-lock--run-functions 24 1% - # 24 1% - font-lock-fontify-region 24 1% font-lock-default-fontify-region 20 1% - # 20 1% font-lock-fontify-region 4 0% - # 4 0% - font-lock-fontify-region 4 0% - font-lock-default-fontify-region 4 0% - font-lock-extend-region-wholelines 4 0% syntax-propertize-wholelines 4 0% # 4 0% - # 4 0% - font-lock-fontify-region 4 0% - font-lock-default-fontify-region 4 0% # 532 30% - if 528 29% - term-down 528 29% - let 344 19% - if 304 17% - if 304 17% - progn 304 17% - setq 300 16% - - 300 16% - funcall 56 3% - vertical-motion 52 2% - jit-lock-function 48 2% - jit-lock-fontify-now 32 1% - jit-lock--run-functions 12 0% - # 12 0% font-lock-fontify-region 8 0% - # 8 0% - font-lock-fontify-region 8 0% font-lock-default-fontify-region 8 0% - # 8 0% - font-lock-fontify-region 8 0% - font-lock-default-fontify-region 8 0% font-lock-extend-region-wholelines 28 1% - progn 28 1% - term-move-columns 28 1% - term-move-to-column 28 1% let 4 0% - and 4 0% = 4 0% term-adjust-current-row-cache 184 10% - cond 176 9% - term-insert-char 172 9% - let 56 3% - put-text-property 20 1% jit-lock-after-change 4 0% syntax-ppss-flush-cache 48 2% - insert-char 20 1% jit-lock-after-change 4 0% and 203 11% - if 187 10% - progn 147 8% - let 24 1% - progn 24 1% setq 24 1% - put-text-property 8 0% jit-lock-after-change 20 1% - insert 8 0% jit-lock-after-change 4 0% - term-horizontal-column 4 0% - - 4 0% - term-current-column 4 0% - cond 4 0% setq 8 0% setq 8 0% if 16 0% setq 136 7% - if 136 7% - progn 136 7% - term-handle-deferred-scroll 136 7% - let 136 7% - if 136 7% - progn 136 7% - save-excursion 136 7% funcall 18 1% - while 18 1% - progn 18 1% - if 18 1% - progn 18 1% - let 18 1% - if 18 1% - progn 18 1% - if 18 1% not 36 2% - if 36 2% - progn 36 2% - redisplay 4 0% - redisplay_internal (C function) 4 0% - eval 4 0% if 171 9% - ... 171 9% Automatic GC 40 2% - command-execute 22 1% - byte-code 22 1% - read-extended-command 22 1% - read-extended-command-1 8 0% completing-read-default 18 1% - funcall-interactively 10 0% - minibuffer-complete 10 0% - completion-in-region 10 0% - completion--in-region 6 0% - # 6 0% - apply 6 0% - # 6 0% - completion--in-region-1 6 0% - completion--do-completion 6 0% - completion-try-completion 6 0% - completion--nth-completion 6 0% - completion--some 6 0% - # 6 0% - completion-basic-try-completion 6 0% - # 6 0% complete-with-action 4 0% - # 4 0% - apply 4 0% - # 4 0% - completion--in-region-1 4 0% - completion--do-completion 4 0% - completion-try-completion 4 0% - completion--nth-completion 4 0% - completion--some 4 0% - # 4 0% - completion-pcm-try-completion 4 0% - completion-pcm--find-all-completions 4 0% - completion-pcm--all-completions 4 0% - # 4 0% complete-with-action 8 0% - execute-extended-command 8 0% - command-execute 8 0% funcall-interactively 7 0% - timer-event-handler 7 0% - apply 4 0% # 3 0% - # 3 0% execute-extended-command--shorter 2 0% - redisplay_internal (C function) 2 0% - term--update-term-menu 2 0% - if 2 0% - progn 2 0% - let 2 0% - easy-menu-change 2 0% - mapcar 2 0% - # 2 0% - vector 2 0% format --8<---------------cut here---------------end--------------->8--- -- Akib Azmain Turja, GPG key: 70018CE5819F17A3BBA666AFE74F0EFA922AE7F5 Fediverse: akib@hostux.social Codeberg: akib emailselfdefense.fsf.org | "Nothing can be secure without encryption."