From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Alan Mackenzie Newsgroups: gmane.emacs.devel Subject: Re: Processing speed in large C++ raw strings. Date: Sat, 27 Apr 2019 11:37:34 +0000 Message-ID: <20190427113734.GA4822@ACM> References: <20190425183615.GB19807@ACM> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="21488"; mail-complaints-to="usenet@blaine.gmane.org" User-Agent: Mutt/1.10.1 (2018-07-13) Cc: emacs-devel To: Tadeus Prastowo Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Sat Apr 27 13:37:53 2019 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([209.51.188.17]) by blaine.gmane.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hKLeS-0005QU-M8 for ged-emacs-devel@m.gmane.org; Sat, 27 Apr 2019 13:37:52 +0200 Original-Received: from localhost ([127.0.0.1]:59006 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hKLeR-0006rm-JQ for ged-emacs-devel@m.gmane.org; Sat, 27 Apr 2019 07:37:51 -0400 Original-Received: from eggs.gnu.org ([209.51.188.92]:45728) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hKLeG-0006qN-B3 for emacs-devel@gnu.org; Sat, 27 Apr 2019 07:37:41 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hKLeF-0006Zl-1x for emacs-devel@gnu.org; Sat, 27 Apr 2019 07:37:40 -0400 Original-Received: from colin.muc.de ([193.149.48.1]:47647 helo=mail.muc.de) by eggs.gnu.org with smtp (Exim 4.71) (envelope-from ) id 1hKLeE-0006VP-NP for emacs-devel@gnu.org; Sat, 27 Apr 2019 07:37:38 -0400 Original-Received: (qmail 50409 invoked by uid 3782); 27 Apr 2019 11:37:35 -0000 Original-Received: from acm.muc.de (p4FE15039.dip0.t-ipconnect.de [79.225.80.57]) by colin.muc.de (tmda-ofmipd) with ESMTP; Sat, 27 Apr 2019 13:37:34 +0200 Original-Received: (qmail 4860 invoked by uid 1000); 27 Apr 2019 11:37:34 -0000 Content-Disposition: inline In-Reply-To: X-Delivery-Agent: TMDA/1.1.12 (Macallan) X-Primary-Address: acm@muc.de X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 193.149.48.1 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:235987 Archived-At: Hello, Tadeus. On Fri, Apr 26, 2019 at 22:15:28 +0200, Tadeus Prastowo wrote: > Hi Alan, > On Thu, Apr 25, 2019 at 8:41 PM Alan Mackenzie wrote: > > I have now optimized CC Mode, such that each such self-insert-command > > now takes around 0.07s-0.1s. I used two strategies for this: (i) breaking out > > of (expensive) fontification routines early, when the region being > > fontified is nothing but a string; (ii) Not fontifying the entire raw > > string for a change to only a small part of it. > I have been working with C++ template metaprograms for two years, and > since quite early, I have experienced CC Mode being very sluggish that > I often switch back-and-forth between cc-mode and text-mode. > I have not made any report since I don't feel like sparing my time to > collect some data for the report now that switching to text-mode does > the trick. So, since you are already at it, perhaps you may want to > find out why even scrolling the buffer in cc-mode is very slow when > visiting the file at > http://git.savannah.nongnu.org/cgit/tice.git/plain/tests/v1/test-v1_internals_program.cpp? You've submitted a bug report now. :-) > Specifically, I built master at commit > 82fc8ca6ba179596928db614ab903e44968ef44e and fired the result with > `emacs -Q' to visit the file locally. Then, to experience the > sluggishness, I pressed M-> followed by M-v several times. To further > experience it, I started to edit some template parameters, such as > changing `node1' to node `node5' in line 680. Thanks for drawing my attention to this problem with lots of templates. The bug is that, in a certain low-level place, CC Mode was failing to mark the < and > "as parentheses" (with syntax-table text properties), hence a lot of unneeded buffer scanning was being done. The following patch should speed up the scrolling operation markedly. It does not become instantaneous, but takes a fraction of a second, compared with the several seconds it has taken up to now. Would you please try it out. diff -r 1940f96b9799 cc-engine.el --- a/cc-engine.el Fri Apr 26 01:01:07 2019 +0000 +++ b/cc-engine.el Sat Apr 27 11:30:06 2019 +0000 @@ -5539,7 +5539,9 @@ (prog1 (looking-at "\\s(") (forward-char)))) (backward-char) - (if (c-forward-<>-arglist nil) ; Should always work. + (if (let ((c-parse-and-markup-<>-arglists t) + (c-restricted-<>-arglists t)) + (c-forward-<>-arglist nil)) ; Should always work. (when (> (point) to) (setq bound-<> (point))) (forward-char))) > Thank you very much for your work. > -- > Best regards, > Tadeus -- Alan Mackenzie (Nuremberg, Germany).