[Top][All Lists]

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

Re: [Bug-readline] Pasting long lines is slow

From: Ole Laursen
Subject: Re: [Bug-readline] Pasting long lines is slow
Date: Wed, 27 May 2015 11:26:23 +0200

2015-05-26 22:43 GMT+02:00 Chet Ramey <address@hidden>:
> I did a couple of things.  I added an inline _rl_wcwidth function that
> returns 1 for all printable ASCII characters and calls the system wcwidth
> for the rest.  That should help, though it doesn't do anything for
> characters between 128 and 256.
> The second thing is this experimental patch to text.c that uses the
> heuristic you suggested: it assumes that a call to rl_insert will be
> followed by other calls to rl_insert and tries to read ahead in the
> input stream as long as the character read maps to self-insert.  I've
> attached that for folks to experiment with.

I tested it with "åååå " x 50000 (so 250k characters, but perhaps 450k
bytes) and it takes about a second now compared to several minutes
before. Awesome! Thanks!

I probably hit the slowdown weekly at the moment, pasting long SQL
queries into Postgres.

Here's a profile, just for reference:

  23,38%  fileman  fileman            [.] _rl_find_prev_mbchar
   5,47%  fileman  libc-2.19.so       [.] __gconv_transform_utf8_internal
   4,91%  fileman  [kernel.kallsyms]  [k] memset
   4,15%  fileman  [kernel.kallsyms]  [k] do_select
   3,47%  fileman  [kernel.kallsyms]  [k] _raw_spin_lock_irqsave
   3,25%  fileman  [kernel.kallsyms]  [k] sysenter_past_esp
   3,01%  fileman  [kernel.kallsyms]  [k] __copy_from_user_ll
   2,69%  fileman  [kernel.kallsyms]  [k] __copy_to_user_ll
   2,38%  fileman  [kernel.kallsyms]  [k] core_sys_select
   2,15%  fileman  [kernel.kallsyms]  [k] n_tty_read
   2,07%  fileman  [kernel.kallsyms]  [k] _raw_spin_unlock_irqrestore
   1,99%  fileman  fileman            [.] _rl_input_available
   1,94%  fileman  libc-2.19.so       [.] __mbrtowc
   1,55%  fileman  libc-2.19.so       [.] wcwidth
   1,39%  fileman  [kernel.kallsyms]  [k] ldsem_down_read
   1,26%  fileman  [kernel.kallsyms]  [k] copy_from_read_buf
   1,16%  fileman  [kernel.kallsyms]  [k] enqueue_task_fair
   1,15%  fileman  fileman            [.] rl_insert_text

With your fix, if I'm not mistaken, readline is now calling wcwidth
and friends 250,000 times compared to around 250000^2 / 2 ~
31,250,000,000 times previously.


reply via email to

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