all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Oleksandr Gavenko <gavenkoa@gmail.com>
To: help-gnu-emacs@gnu.org
Subject: Re: What's your favourite *under_publicized* editing feature of Emacs?
Date: Wed, 09 Feb 2011 22:51:37 +0200	[thread overview]
Message-ID: <iiuuot$6hb$1@dough.gmane.org> (raw)
In-Reply-To: <jwvy65prfx1.fsf-monnier+gnu.emacs.help@gnu.org>

On 2011-02-09 6:37, Stefan Monnier wrote:
>>> I set 'grep-mode' on my log file (which follow GNU
>>> error coding convention). On 50-100 KiB logs it take
>>> 10 sec to highlight matches. On larger files I type
>>> C-g to stop matching for highlighting.
>
> You may want to try the Emacs trunk's version of compile.el (I think
> it'll work with Emacs-23 as well).  It should help out by being more
> lazy (e.g. it'll still takes 10s to parse the file when you jump to the
> end of it, but it should open instantaneously because it'll only need to
> parse the first page for that).
>
Sound interesting.

But you wrote that jumping to end of buffer take whole time ((

We recently discuss about Emacs hex mode and I ask how read only
needed part of file to display (as binaries some times very large
for opening in Emacs).

This allow Emacs spend time on processing only needed (displayed)
part of information.

Same with highlighting of compilation/grep like buffers.

Usually reference for file/line placed on single line (or two...).

So highlighting can be performed only on visible part on large files.

Does currently Emacs highlight all file or this depend on mode?

How about generic-modes?

>> And I realize that compilation-mode is dumb as it try
>> set on all matched file/line pairs text properties to
>> allow move to another file by RET.
>
> compilation-mode indeed does more work than I'd like at the "highlight"
> time, and some of that work could indeed be delayed to the moment the
> user hits RET on a line.  But my impression is that most of the time is
> spent regexp-matching (i.e. looking for matches) anyway, so moving this
> work won't make much difference if any.  IOW my impression is that if
> your code is faster it's because it uses either more efficient regexps,
> or fewer regexps.
>
>>      ("^\\([^:]+\\):\\([[:digit:]]+\\):[^
>
> E.g. this regexp is more efficient than the one used by grep.el, by
> disallowing : in file names (resulting in a backtrack-free regexp).
>
I previously ask about regex performance in this list and
try define-generic-mode with different regex. Time to
highlighting do not significant changed with different regex.

Seems problem in another place and I read doc how profile.

Look at 'my.log' file, which is 289 KiB long:

-*- mode: my-log; default-directory: "~/devel/job/plugin-hg/" -*-
WM: 0x0024: WM_GETMINMAXINFO
win-gui-admin.c:140: WndProc #8
WM: 0x0024: WM_GETMINMAXINFO
win-gui-admin.c:140: WndProc #8
WM: 0x0024: WM_GETMINMAXINFO
...  (repeat 2 last lines many times)

When I eval: (benchmark-run 1 (revert-buffer))
I get: (0.172 0 0.0)

When I change mode line to

-*- mode: grep; default-directory: "~/devel/job/plugin-hg/" -*-

and eval: (benchmark-run 1 (revert-buffer))
I get: (22.406 1 0.156)

As you can see it is 100 times slower!

I perform 'M-x elp-instrument-package grep'
and 'M-x elp-instrument-package compilation'. Next I perform
'(revert-buffer)' and 'M-x elp-results' and get:

grep-mode                              1           23.906      23.906
compilation-error-properties           4742        23.047  0.0048601855
compilation-internal-error-properties  4742        0.094   1.98...e-005
compilation-get-file-structure         4742        0.016   3.37...e-006
compilation-mode                       1           0.0           0.0
compilation-mode-font-lock-keywords    1           0.0           0.0
compilation-setup                      1           0.0           0.0

As you can see 'compilation-error-properties' eat a lot of time and
it executed on all lines like 'file:line: msg' (in my example half of
lines match such pattern)!

I press C-u C-x = on green underscored char (file name for jump) and see
among text properties: 'message' with value is:

((nil 140
       (("win-gui-admin.c" nil)
        nil
        (140 #1)))
  2 nil)

I assume that 'compilation-error-properties' spend time on setting this
properties.

So because of unnecessary work to set text property to well structured
data on *all* lines we have slow down instead perform parsing of
reference on demand.

As I previously shown 'my-log-goto' func for this purpose.

I think such idea (trying match pattern on point position) can be
generalized by looping across 'compilation-error-regexp-alist'.

Do you think this need filed as a bug or request?

Or I am something missing?

-- 
Best regards!




  reply	other threads:[~2011-02-09 20:51 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <mailman.0.1296117403.8303.help-gnu-emacs@gnu.org>
2011-01-28  9:54 ` What's your favourite *under_publicized* editing feature of Emacs? Simón Ortiz
2011-01-28 21:22   ` Ken Goldman
     [not found]   ` <mailman.21.1296249764.1176.help-gnu-emacs@gnu.org>
2011-01-28 22:59     ` Stefan Monnier
2011-01-29 14:46       ` Oleksandr Gavenko
2011-01-29 15:00         ` Eli Zaretskii
2011-01-29 15:02         ` Perry Smith
     [not found]         ` <mailman.10.1296313340.8933.help-gnu-emacs@gnu.org>
2011-01-29 16:08           ` Stefan Monnier
2011-02-17 10:53           ` Giorgos Keramidas
2011-02-17 13:43             ` Perry Smith
2011-02-17 14:01               ` Thien-Thi Nguyen
     [not found]               ` <mailman.9.1297951684.6316.help-gnu-emacs@gnu.org>
2011-02-17 19:04                 ` view/edit large files (was: What's your favourite *under_publicized* editing feature of Emacs?) Ted Zlatanov
2011-02-18  0:09             ` What's your favourite *under_publicized* editing feature of Emacs? Tim X
2011-01-29 12:55 ` Javier Sanz
2011-02-06 20:11   ` Oleksandr Gavenko
2011-02-08 23:10     ` Oleksandr Gavenko
     [not found]     ` <mailman.11.1297206657.16135.help-gnu-emacs@gnu.org>
2011-02-09  4:37       ` Stefan Monnier
2011-02-09 20:51         ` Oleksandr Gavenko [this message]
2011-02-09 21:31         ` Oleksandr Gavenko
2011-02-09 22:32           ` Thien-Thi Nguyen
2011-02-14 20:44             ` Oleksandr Gavenko
     [not found]         ` <mailman.10.1297284733.9144.help-gnu-emacs@gnu.org>
2011-02-10 17:24           ` Stefan Monnier
2011-03-01 21:30 What's your favourite *under_publicized* editing feature ofEmacs? Cthun
2011-03-02  1:00 ` What's your favourite *under_publicized* editing feature of Emacs? Steve
2011-03-02  5:34   ` PJ Weisberg
  -- strict thread matches above, loose matches on Subject: below --
2011-01-27  8:33 Le Wang
2011-01-27  9:29 ` Deniz Dogan
2011-01-27 12:03 ` Wang Lei
2011-01-27 14:13   ` suvayu ali
2011-01-27 14:12 ` Ken Goldman
2011-01-27 18:11 ` Erik Iverson
     [not found] ` <mailman.0.1296137574.27610.help-gnu-emacs@gnu.org>
2011-01-27 22:23   ` Joe Fineman
2011-01-28  6:40     ` Jason Rumney

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

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

  git send-email \
    --in-reply-to='iiuuot$6hb$1@dough.gmane.org' \
    --to=gavenkoa@gmail.com \
    --cc=help-gnu-emacs@gnu.org \
    /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 external index

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

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.