GNU bug report logs - #71367
30.0.50; ELPA package breadcrumb causes Emacs freeze when editing json file

Previous Next

Package: emacs;

Reported by: Tassilo Horn <tsdh <at> gnu.org>

Date: Tue, 4 Jun 2024 19:42:01 UTC

Severity: normal

Found in version 30.0.50

Full log


View this message in rfc822 format

From: Eli Zaretskii <eliz <at> gnu.org>
To: Andrea Corallo <acorallo <at> gnu.org>, joaotavora <at> gmail.com
Cc: 71367 <at> debbugs.gnu.org, theo <at> thornhill.no, tsdh <at> gnu.org
Subject: bug#71367: 30.0.50; ELPA package breadcrumb causes Emacs freeze when editing json file
Date: Thu, 06 Jun 2024 12:35:38 +0300
> Cc: 71367 <at> debbugs.gnu.org, Theodor Thornhill <theo <at> thornhill.no>,
>  João Távora <joaotavora <at> gmail.com>
> From: Andrea Corallo <acorallo <at> gnu.org>
> Date: Wed, 05 Jun 2024 05:36:23 -0400
> 
> Tassilo Horn <tsdh <at> gnu.org> writes:
> 
> > Ok, now I tested with
> >
> >   emacs -Q --load ~/recipe-71367 <at> debbugs.gnu.org.el
> >
> > where the recipe is:
> >
> > (progn
> >   ;; Native compile doesn't make a difference...
> >   (setq native-comp-jit-compilation-deny-list '(".*breadcrumb.*"))
> >   (package-initialize)
> >   (package-activate 'breadcrumb)
> >   (breadcrumb-mode)
> >   ;; Using json-ts-mode is essential!
> >   (add-to-list 'major-mode-remap-alist '(js-json-mode . json-ts-mode))
> >   (find-file "~/mirrorstatus.json"))
> >
> > Before firing up Emacs, I've deleted the breadcrumb ELN file.
> >
> > With the above recipe, Emacs instantly freezes when the file gets
> > displayed.

It doesn't freeze, it just takes a very long time to perform the
initial redisplay after visiting the file.  With my unoptimized build
of Emacs 30, it takes something like a full minute until the "freeze"
ends.  Optimized builds should do that in, like, 15 to 20 sec, I'd
expect.  Thereafter the breadcrumbs display on the header line works
just fine.

The importance of using json-ts-mode is simply because it defines
support for Imenu, whereas the default js-json-mode does not.  With
Imenu support turned on, imenu--index-alist is a huge nested structure
for this large file: there are 17500 elements there.  The first time
breadcrumb-mode is invoked, it loops over all those elements doing its
thing in breadcrumb--summarize, and that takes both time and a lot of
consing (which triggers a lot of GC, which slows down this even more).
That's all.

Maybe João could suggest some trick or user option to cut down that
initial time to reasonable level.  Failing that, I suggest not to
enable breadcrumb-mode in such large JSON buffers (something that can
be done in a mode hook, I guess?)




This bug report was last modified 1 year and 10 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.