From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: martin rudalics Newsgroups: gmane.emacs.devel Subject: Re: Scrolling xdisp.c. Room for optimisation in syntax.c/CC Mode. Date: Mon, 20 Oct 2014 09:29:51 +0200 Message-ID: <5444B9EF.4050506@gmx.at> References: <20141018181937.GA5924@acm.acm> <20141018202839.GB5924@acm.acm> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------010809010307080603000403" X-Trace: ger.gmane.org 1413790226 21561 80.91.229.3 (20 Oct 2014 07:30:26 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 20 Oct 2014 07:30:26 +0000 (UTC) To: Alan Mackenzie , emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Mon Oct 20 09:30:19 2014 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1Xg7Q2-0004eM-Ja for ged-emacs-devel@m.gmane.org; Mon, 20 Oct 2014 09:30:18 +0200 Original-Received: from localhost ([::1]:42823 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Xg7Q2-000431-6w for ged-emacs-devel@m.gmane.org; Mon, 20 Oct 2014 03:30:18 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:35593) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Xg7Pr-0003yb-4d for emacs-devel@gnu.org; Mon, 20 Oct 2014 03:30:14 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Xg7Pj-0001xE-K0 for emacs-devel@gnu.org; Mon, 20 Oct 2014 03:30:07 -0400 Original-Received: from mout.gmx.net ([212.227.17.20]:64961) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Xg7Pj-0001wh-8U for emacs-devel@gnu.org; Mon, 20 Oct 2014 03:29:59 -0400 Original-Received: from [188.22.45.220] ([188.22.45.220]) by mail.gmx.com (mrgmx101) with ESMTPSA (Nemesis) id 0M2XkX-1XwpHd08Zh-00sNGl; Mon, 20 Oct 2014 09:29:56 +0200 In-Reply-To: <20141018202839.GB5924@acm.acm> X-Provags-ID: V03:K0:r79qCEG0vfrbAWQinqUGLwFYSbqRcJ5C/nW8PgphLimgxgDIOBf ntYL7gxv4l0hpE5TyTlxK/ymbv5XS6LN8YOTTTJIlqL+b7oSfGiQgGSFy1Zi6RTmwxprfjF TSWx6fa8RFMgdG3R61Ajt6orR7OLTQ55InQgFdcmekbBDu6NX0yMoyf752t3GElHjtHRAU6 Ee+l4YK49FWFGVS7dmHcg== X-UI-Out-Filterresults: notjunk:1; X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] X-Received-From: 212.227.17.20 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 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-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:175577 Archived-At: This is a multi-part message in MIME format. --------------010809010307080603000403 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Results for Windows XP with CPPFLAGS='-DGLYPH_DEBUG=1' CFLAGS='-O0 -g3' --enable-checking=yes --enable-check-lisp-object-type=yes: Unmodified xdisp.c from trunk: 24.3 1007 scrolls, total time = 105.60900020599365s. 24.4 1007 scrolls, total time = 73.21900010108948s. 25.0 1007 scrolls, total time = 318.5629997253418s. xdisp.c from trunk with odd apostrophes eradicated: 24.3 1007 scrolls, total time = 100.1240005493164s. 24.4 1007 scrolls, total time = 60.13900017738342s. 25.0 1007 scrolls, total time = 197.95300006866455s. I can't test with older versions since those don't have `scroll-down-command' here. So while it might be worthwhile to do such an optimization, here the great differenece is the 3-to-5-fold increase of execution time from 24.4 to 25.0 for which I don't have an explanation. The cc-mode used is always the one bundled with the respective Emacs version. martin BTW, if you want to quickly visualize constructs like (defconst odd-apostrophes "/\\*\\([^*']\\|\\*+[^*'/]\\)*\\(\\**'\\([^*']\\|\\*+[^*'/]\\)*\\**'\\([^*']\\|\\*+[^*'/]\\)*\\)*\\**\\('\\)\\([^*']\\|\\*+[^*'/]\\)*\\*+/" ) without adding comments like ;; 1 2 3 4 5 6 you can use the regexp-lock.el package I attached here ;-) --------------010809010307080603000403 Content-Type: application/gzip; name="regexp-lock.el.gz" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="regexp-lock.el.gz" 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 aqqlZpByVmxxJLV0Je4Pk3tQr4MXAQA= --------------010809010307080603000403--