Subject: bug#59738: closed (Re: bug#59738: c-ts-mode is slow with large buffers.)

From: [email-masked] (GNU bug Tracking System)
Date: Sat, 07 Jan 2023 23:09:02 +0000

Your bug report

#59738: c-ts-mode is slow with large buffers.

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
59738: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=59738
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#59738: c-ts-mode is slow with large buffers.
From: Yuan Fu <[email-masked]>
To: Stefan Kangas <[email-masked]>
Cc: [email-masked]
Date: Sat, 7 Jan 2023 15:08:27 -0800
List-Id: <debbugs-submit.debbugs.gnu.org>

Stefan Kangas <[email-masked]> writes:

> Alan Mackenzie <[email-masked]> writes:
>
>> The bug which was causing it to be very slow is fixed, so I agree,
>> excellent job!
>
> Could this bug therefore be closed, or is there more to do here?

This probably can be closed, so I’m closing it.

Yuan

Subject: c-ts-mode is slow with large buffers.
From: Alan Mackenzie <[email-masked]>
To: [email-masked]
Date: Thu, 1 Dec 2022 11:50:05 +0000
List-Id: <debbugs-submit.debbugs.gnu.org>

Hello, Emacs.

In an up to date (2022-11-30) master started as $ emacs --no-desktop:

The file .../drivers/gpu/drm/amd/include/asic_reg/dce/dce_12_0_sh_mask.h
in the Linux source tree is 6.8 MB big, consisting of a large number of
#defines and comments, but nothing else.

To scroll through it in c-ts-mode takes a little over 26 minutes on my
system.  By comparison, in C Mode it takes 31 seconds.  There would
appear to be a need for some optimisation in c-ts-mode, here.

The file
https://gitlab.com/wireshark/wireshark/-/raw/master/epan/dissectors/packet-rrc.c
(see bug #45248) (10 MB) takes 578 seconds to scroll in c-ts-mode.  It
scrolls through the first 83% of the buffer rapidly, then chokes on a big
brace block initialisation.  Also, the font-locking fails part way
through this brace block (without any apparent speed up).

For comparison, the scrolling takes 30 seconds in C Mode.  There seems to
be a need for optimisation of c-ts-mode in this case, too.

For completeness, I used M-: (time-scroll) in the following for the
timings:

(defmacro time-it (&rest forms)
  "Time the running of a sequence of forms using `float-time'.
Call like this: \"M-: (time-it (foo ...) (bar ...) ...)\"."
  `(let ((start (float-time)))
    ,@forms
    (- (float-time) start)))

(defun time-scroll (&optional arg)
  (interactive "P")
  (message "%s"
           (time-it
            (condition-case nil
                (while t
                  (if arg (scroll-down) (scroll-up))
                  (sit-for 0))
              (error nil)))))

-- 
Alan Mackenzie (Nuremberg, Germany).