unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: yyoncho <yyoncho@gmail.com>
Cc: sebastien@chapu.is, 31138@debbugs.gnu.org
Subject: bug#31138: Native json slower than json.el
Date: Mon, 25 Mar 2019 18:42:07 +0200	[thread overview]
Message-ID: <83tvfqnbxc.fsf@gnu.org> (raw)
In-Reply-To: <CACCVLQU1N9RFdyMt_irVN_7i5Swu_0zKPeKrwz3Nzop3kJWFhw@mail.gmail.com> (message from yyoncho on Mon, 25 Mar 2019 07:44:00 +0200)

> From: yyoncho <yyoncho@gmail.com>
> Date: Mon, 25 Mar 2019 07:44:00 +0200
> Cc: Sébastien Chapuis <sebastien@chapu.is>, 
> 	31138@debbugs.gnu.org
> 
>  Is this with or without the patch I sent?
> 
> It is with the patch (in the two profiler.el reports, the "kill" hooks are not present)

OK, thanks.

> Just found that it is not my setup which triggers the issue bug pressing C-g during the parsing:

Right, I think I see the reason for that.  The patch below should fix
this.  It also makes buffer-list-update-hook nil when creating and
killing the conversion buffer, for a good measure.  Please note that
the patch is relative to the current master, so be sure to run
"git checkout src/coding.c" before applying.

> I did exactly what you are saying here: I applied the patch and listed the effects:
> 1. The buffer-list-update-hook is called
> 2. The patch does not affect the perf difference between emacs -q and my setup.
> 
> > I must rely on you in this matter, because I cannot reproduce the
> > slowdown on my system.
> 
> I realize that and I am trying to be as helpful as possible by sharing all my observations.

OK, but please always say if your observations are before or after the
last patch I sent.

Thanks.

Here's the patch:

diff --git a/src/coding.c b/src/coding.c
index 905c7ce..c6d9643 100644
--- a/src/coding.c
+++ b/src/coding.c
@@ -7798,42 +7798,6 @@ static Lisp_Object Vcode_conversion_reused_workbuf;
 static bool reused_workbuf_in_use;
 
 
-/* Return a working buffer of code conversion.  MULTIBYTE specifies the
-   multibyteness of returning buffer.  */
-
-static Lisp_Object
-make_conversion_work_buffer (bool multibyte)
-{
-  Lisp_Object name, workbuf;
-  struct buffer *current;
-
-  if (reused_workbuf_in_use)
-    {
-      name = Fgenerate_new_buffer_name (Vcode_conversion_workbuf_name, Qnil);
-      workbuf = Fget_buffer_create (name);
-    }
-  else
-    {
-      reused_workbuf_in_use = 1;
-      if (NILP (Fbuffer_live_p (Vcode_conversion_reused_workbuf)))
-	Vcode_conversion_reused_workbuf
-	  = Fget_buffer_create (Vcode_conversion_workbuf_name);
-      workbuf = Vcode_conversion_reused_workbuf;
-    }
-  current = current_buffer;
-  set_buffer_internal (XBUFFER (workbuf));
-  /* We can't allow modification hooks to run in the work buffer.  For
-     instance, directory_files_internal assumes that file decoding
-     doesn't compile new regexps.  */
-  Fset (Fmake_local_variable (Qinhibit_modification_hooks), Qt);
-  Ferase_buffer ();
-  bset_undo_list (current_buffer, Qt);
-  bset_enable_multibyte_characters (current_buffer, multibyte ? Qt : Qnil);
-  set_buffer_internal (current);
-  return workbuf;
-}
-
-
 static void
 code_conversion_restore (Lisp_Object arg)
 {
@@ -7846,7 +7810,12 @@ code_conversion_restore (Lisp_Object arg)
       if (EQ (workbuf, Vcode_conversion_reused_workbuf))
 	reused_workbuf_in_use = 0;
       else
-	Fkill_buffer (workbuf);
+	{
+	  ptrdiff_t count = SPECPDL_INDEX ();
+	  specbind (Qbuffer_list_update_hook, Qnil);
+	  Fkill_buffer (workbuf);
+	  unbind_to (count, Qnil);
+	}
     }
   set_buffer_internal (XBUFFER (current));
 }
@@ -7857,9 +7826,51 @@ code_conversion_save (bool with_work_buf, bool multibyte)
   Lisp_Object workbuf = Qnil;
 
   if (with_work_buf)
-    workbuf = make_conversion_work_buffer (multibyte);
+    {
+      ptrdiff_t count = SPECPDL_INDEX ();
+      if (reused_workbuf_in_use)
+	{
+	  Lisp_Object name
+	    = Fgenerate_new_buffer_name (Vcode_conversion_workbuf_name, Qnil);
+	  specbind (Qbuffer_list_update_hook, Qnil);
+	  workbuf = Fget_buffer_create (name);
+	  unbind_to (count, Qnil);
+	}
+      else
+	{
+	  if (NILP (Fbuffer_live_p (Vcode_conversion_reused_workbuf)))
+	    {
+	      specbind (Qbuffer_list_update_hook, Qnil);
+	      Vcode_conversion_reused_workbuf
+		= Fget_buffer_create (Vcode_conversion_workbuf_name);
+	      unbind_to (count, Qnil);
+	    }
+	  workbuf = Vcode_conversion_reused_workbuf;
+	}
+    }
   record_unwind_protect (code_conversion_restore,
 			 Fcons (Fcurrent_buffer (), workbuf));
+  if (!NILP (workbuf))
+    {
+      struct buffer *current = current_buffer;
+      set_buffer_internal (XBUFFER (workbuf));
+      /* We can't allow modification hooks to run in the work buffer.  For
+	 instance, directory_files_internal assumes that file decoding
+	 doesn't compile new regexps.  */
+      Fset (Fmake_local_variable (Qinhibit_modification_hooks), Qt);
+      Ferase_buffer ();
+      bset_undo_list (current_buffer, Qt);
+      bset_enable_multibyte_characters (current_buffer, multibyte ? Qt : Qnil);
+      if (EQ (workbuf, Vcode_conversion_reused_workbuf))
+	reused_workbuf_in_use = 1;
+      else
+	{
+	  Fset (Fmake_local_variable (Qkill_buffer_query_functions), Qnil);
+	  Fset (Fmake_local_variable (Qkill_buffer_hook), Qnil);
+	}
+      set_buffer_internal (current);
+    }
+
   return workbuf;
 }
 





  reply	other threads:[~2019-03-25 16:42 UTC|newest]

Thread overview: 161+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-12 19:13 bug#31138: Native json slower than json.el Sebastien Chapuis
2018-04-13  7:24 ` Eli Zaretskii
2018-04-15 14:40   ` Sebastien Chapuis
2018-04-15 15:19     ` Eli Zaretskii
2019-03-23  1:59       ` Sébastien Chapuis
2019-03-23  8:15         ` Eli Zaretskii
2019-03-23  9:40           ` Eli Zaretskii
2019-03-23 12:59             ` Sébastien Chapuis
2019-03-23 13:21               ` Eli Zaretskii
2019-03-23 13:31                 ` yyoncho
2019-03-23 14:00                   ` Eli Zaretskii
2019-03-23 14:32                     ` yyoncho
2019-03-23 14:55                       ` Eli Zaretskii
2019-03-23 15:27                         ` yyoncho
2019-03-23 16:29                           ` Eli Zaretskii
     [not found]                             ` <CACCVLQW=_YngoTwXU+1BDvVVy5jwxSmDFUQJBvs8=PrP=fn=aw@mail.gmail.com>
2019-03-23 18:50                               ` Eli Zaretskii
2019-03-23 20:23                                 ` yyoncho
2019-03-23 20:54                                   ` Eli Zaretskii
2019-03-23 21:04                                     ` yyoncho
2019-03-24  3:32                                       ` Eli Zaretskii
2019-03-24  9:35                                         ` yyoncho
2019-03-24 11:20                                           ` Eli Zaretskii
2019-03-24 11:37                                             ` yyoncho
2019-03-24 15:15                                               ` Eli Zaretskii
2019-03-24 18:24                                                 ` yyoncho
2019-03-24 18:28                                                   ` Eli Zaretskii
2019-03-24 20:57                                                     ` yyoncho
2019-03-25  3:32                                                       ` Eli Zaretskii
2019-03-25  5:44                                                         ` yyoncho
2019-03-25 16:42                                                           ` Eli Zaretskii [this message]
2019-03-25 18:20                                                             ` yyoncho
2019-03-25 18:25                                                               ` Eli Zaretskii
2019-03-25 19:16                                                                 ` yyoncho
2019-03-25 20:05                                                                   ` Eli Zaretskii
2019-03-25 21:34                                                                     ` yyoncho
2019-03-25 23:04                                                                       ` Dmitry Gutov
2019-03-26  3:51                                                                       ` Eli Zaretskii
2019-03-26 16:14                                                                       ` Eli Zaretskii
2019-03-26 17:45                                                                         ` yyoncho
2019-03-26 18:11                                                                           ` Eli Zaretskii
2019-03-26 18:15                                                                             ` yyoncho
2019-04-16  1:36                                                                         ` Dmitry Gutov
2019-04-16  2:38                                                                           ` Eli Zaretskii
2019-04-16 13:50                                                                             ` Dmitry Gutov
2019-04-16 15:13                                                                               ` Eli Zaretskii
2019-04-16 15:30                                                                                 ` Dmitry Gutov
2019-04-16 16:10                                                                                   ` Eli Zaretskii
2019-04-16 16:23                                                                                     ` Dmitry Gutov
2019-04-16 16:44                                                                                       ` Eli Zaretskii
2019-04-21  8:58                                                                                         ` Eli Zaretskii
2019-04-21  9:15                                                                                           ` Dmitry Gutov
2019-04-21  9:31                                                                                             ` Eli Zaretskii
2019-04-21 10:23                                                                                               ` yyoncho
2019-04-21 10:37                                                                                                 ` Eli Zaretskii
2019-04-21 11:38                                                                                                   ` yyoncho
2019-04-21 12:15                                                                                                     ` Eli Zaretskii
2019-04-21 13:28                                                                                                       ` yyoncho
2019-04-21 19:03                                                                                                         ` Eli Zaretskii
2019-04-21 20:13                                                                                                           ` Eli Zaretskii
2019-04-22  5:38                                                                                                           ` yyoncho
2019-04-22  8:01                                                                                                             ` Eli Zaretskii
2019-04-22 13:00                                                                                                               ` yyoncho
2019-04-22 13:17                                                                                                                 ` Eli Zaretskii
2019-04-22 16:53                                                                                                                   ` Ivan
2019-04-22 16:58                                                                                                                     ` Eli Zaretskii
2019-04-21 22:17                                                                                                       ` Dmitry Gutov
2019-04-22  7:16                                                                                                         ` Eli Zaretskii
2019-04-22 13:54                                                                                                           ` Dmitry Gutov
2019-04-22 15:24                                                                                                             ` Eli Zaretskii
2019-04-22 15:31                                                                                                               ` Dmitry Gutov
2019-04-21 12:59                                                                                                 ` Philipp Stephani
2019-04-21 13:09                                                                                                   ` yyoncho
2019-04-21 13:33                                                                                                     ` Philipp Stephani
2019-04-22 11:48                                                                                                       ` Dmitry Gutov
2019-04-22 12:12                                                                                                         ` Eli Zaretskii
2019-04-22 12:24                                                                                                           ` Dmitry Gutov
2019-04-22 13:02                                                                                                             ` Eli Zaretskii
2019-04-22 15:02                                                                                                               ` Dmitry Gutov
2019-04-22 15:36                                                                                                                 ` Eli Zaretskii
2019-04-22 16:16                                                                                                                   ` Dmitry Gutov
2019-04-22 16:28                                                                                                                     ` Eli Zaretskii
2019-04-22 16:44                                                                                                                       ` Dmitry Gutov
2019-04-22 16:50                                                                                                                         ` Eli Zaretskii
2019-04-22 17:05                                                                                                                       ` Dmitry Gutov
2019-04-22 17:24                                                                                                                         ` Eli Zaretskii
2019-04-22 21:03                                                                                                                           ` Dmitry Gutov
2019-04-23 10:22                                                                                                                             ` Eli Zaretskii
2019-04-23 11:39                                                                                                                               ` Dmitry Gutov
2019-04-23 13:19                                                                                                                                 ` Eli Zaretskii
2019-04-22 16:49                                                                                                                     ` Eli Zaretskii
2019-04-22 17:11                                                                                                                       ` Dmitry Gutov
2019-04-22 17:26                                                                                                                         ` Eli Zaretskii
2019-04-22 22:23                                                                                                                           ` Dmitry Gutov
2019-04-23  6:00                                                                                                                             ` Eli Zaretskii
2019-04-23  9:46                                                                                                                               ` Philipp Stephani
2019-04-23 10:38                                                                                                                                 ` Eli Zaretskii
2019-04-23 10:44                                                                                                                                   ` Dmitry Gutov
2019-04-24  2:23                                                                                                                               ` Richard Stallman
2019-04-22 17:12                                                                                                                       ` Eli Zaretskii
2019-04-22 21:00                                                                                                                         ` Dmitry Gutov
2019-04-21 22:14                                                                                                 ` Dmitry Gutov
2019-04-22  7:06                                                                                                   ` Eli Zaretskii
2019-04-21 22:12                                                                                               ` Dmitry Gutov
2019-04-22  7:03                                                                                                 ` Eli Zaretskii
2019-04-22 11:46                                                                                                   ` Dmitry Gutov
2019-04-22 12:07                                                                                                     ` Eli Zaretskii
2019-04-22 12:58                                                                                                       ` Dmitry Gutov
2019-04-22 13:12                                                                                                         ` Eli Zaretskii
2019-04-22 13:58                                                                                                           ` Dmitry Gutov
2019-04-22 15:25                                                                                                             ` Eli Zaretskii
2019-04-22 15:41                                                                                                               ` Dmitry Gutov
2019-04-22 15:50                                                                                                                 ` Eli Zaretskii
2019-04-22 16:00                                                                                                                   ` Dmitry Gutov
2019-04-22 16:22                                                                                                                     ` Eli Zaretskii
2019-04-22 19:55                                                                                                                       ` Dmitry Gutov
2019-04-22 20:28                                                                                                                         ` Eli Zaretskii
2019-04-23 11:52                                                                                                                           ` Dmitry Gutov
2019-04-23 12:15                                                                                                                             ` Eli Zaretskii
2019-04-23 12:37                                                                                                                               ` yyoncho
2019-04-23 13:09                                                                                                                                 ` Eli Zaretskii
2019-04-23 13:27                                                                                                                                   ` yyoncho
2019-04-23 14:24                                                                                                                                     ` Eli Zaretskii
2019-04-23 12:37                                                                                                                               ` Sébastien Chapuis
2019-04-23 13:10                                                                                                                                 ` Eli Zaretskii
2019-04-23 14:22                                                                                                                               ` Dmitry Gutov
2019-04-23 14:40                                                                                                                                 ` Philipp Stephani
2019-04-23 15:09                                                                                                                                   ` Eli Zaretskii
2019-04-23 15:17                                                                                                                                     ` Eli Zaretskii
2019-04-23 15:36                                                                                                                                     ` yyoncho
2019-04-23 15:39                                                                                                                                       ` Eli Zaretskii
2019-04-23 15:43                                                                                                                                         ` yyoncho
2019-04-23 22:34                                                                                                                                     ` Dmitry Gutov
2019-04-24  6:20                                                                                                                                       ` Eli Zaretskii
2019-04-24  6:57                                                                                                                                         ` Dmitry Gutov
2019-04-24  7:28                                                                                                                                           ` Eli Zaretskii
2019-04-24  9:52                                                                                                                                             ` Dmitry Gutov
2019-04-23 14:58                                                                                                                                 ` Eli Zaretskii
2019-04-24 15:55                                                                                                                                   ` Dmitry Gutov
2019-04-24 16:21                                                                                                                                     ` Eli Zaretskii
2019-04-24 16:46                                                                                                                                       ` Dmitry Gutov
2019-04-24 17:06                                                                                                                                         ` Eli Zaretskii
2019-04-24 17:36                                                                                                                                           ` Dmitry Gutov
2019-04-24 17:43                                                                                                                                             ` Eli Zaretskii
2019-04-24 20:25                                                                                                                                               ` Dmitry Gutov
2019-04-25 10:44                                                                                                                                                 ` Eli Zaretskii
2019-04-25 14:27                                                                                                                                                   ` Dmitry Gutov
2020-08-22 23:28                                                                                                                                                     ` Lars Ingebrigtsen
2020-08-23  5:50                                                                                                                                                       ` Eli Zaretskii
2019-04-23 14:50                                                                                                                               ` Andy Moreton
2019-04-23 15:03                                                                                                                                 ` Eli Zaretskii
2019-04-23 15:44                                                                                                                                   ` Andy Moreton
2019-04-22 11:36                                                                                                 ` Dmitry Gutov
2019-04-22 12:01                                                                                                   ` Eli Zaretskii
2019-04-22 13:11                                                                                                     ` Dmitry Gutov
2019-03-30  9:07                                                               ` Eli Zaretskii
2019-04-22 18:20 ` Alex Gramiak
2019-04-22 18:27   ` Eli Zaretskii
2019-04-22 19:52     ` Alex Gramiak
2019-04-22 20:05       ` Dmitry Gutov
2019-04-23  3:06         ` Alex Gramiak
2019-04-23 11:44           ` Dmitry Gutov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=83tvfqnbxc.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=31138@debbugs.gnu.org \
    --cc=sebastien@chapu.is \
    --cc=yyoncho@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).