* Slow speed of week and month views
@ 2010-02-16 19:58 Matt Lundin
2010-02-21 7:37 ` Carsten Dominik
0 siblings, 1 reply; 22+ messages in thread
From: Matt Lundin @ 2010-02-16 19:58 UTC (permalink / raw)
To: Org Mode
Currently I use org-mode to keep track of todos, projects, deadlines and
the emacs diary to keep track of appointments. I would prefer to keep
the latter in org-mode, but the slow speed of the weekly and monthly
agenda views makes it difficult to gain a quick calendar overview of all
upcoming timestamped items.
Has anyone had success in setting up a *fast* calendar view for
org-mode? I use the following custom command to get a view of
timestamped items only:
--8<---------------cut here---------------start------------->8---
("cc" "Calendar (events)" agenda ""
((org-agenda-ndays 1)
(org-agenda-time-grid nil)
(org-agenda-prefix-format " %-12:t ")
(org-agenda-include-all-todo nil)
(org-agenda-repeating-timestamp-show-all t)
(org-agenda-skip-function '(org-agenda-skip-entry-if 'deadline 'scheduled))))
--8<---------------cut here---------------end--------------->8---
With 25 agenda files, if I type "v m" (view month) in the agenda results
for this custom command, it takes over 16 seconds to generate the
monthly calendar.[1]
I get similar results if I type "v m" in the default agenda view.[2] As
a point of comparison, I've included the time it takes to generate an
agenda view for a single day on my system.[3]
As far as I can tell, org-mode scans each agenda file anew for each day
shown in the weekly or monthly agenda (hence the many invocations of
org-agenda-get-day-entries in the results below), so the time it takes
to generate the agenda is roughly proportional to the number of days in
the view.
Does anyone have any tips for speeding up the weekly or monthly agenda
views? I have vague and utterly naïve notions of a function that would
scan each agenda file *once* for timestamps within a given range rather
than searching the agenda files again for each new day---but such a
function is far beyond my elisp skills. Any help would be greatly
appreciated.
Thanks!
Matt
Footnotes:
[1] Monthly view of custom command with 25 agenda files:
org-agenda-view-mode-dispatch 1 15.528815 15.528815
org-agenda-month-view 1 15.384877 15.384877
org-agenda-change-time-span 1 15.384839 15.384839
org-agenda-redo 1 15.383679 15.383679
org-agenda-list 1 15.382742 15.382742
org-agenda-get-day-entries 700 13.948870999 0.0199269585
org-agenda-get-scheduled 700 6.4163719999 0.0091662457
org-agenda-skip-entry-if 12871 5.3256909999 0.0004137744
org-agenda-skip-if 12871 5.1750260000 0.0004020686
org-agenda-get-deadlines 700 4.2478989999 0.0060684271
org-agenda-get-timestamps 700 1.7289499999 0.0024699285
org-agenda-get-sexps 700 0.6763130000 0.0009661614
org-agenda-get-blocks 700 0.6087859999 0.0008696942
org-agenda-todayp 1400 0.3336939999 0.0002383528
org-agenda-skip 15534 0.0450969999 2.903...e-06
org-agenda-files 3 0.016815 0.005605
org-agenda-cleanup-fancy-diary 28 0.0062590000 0.0002235357
org-agenda-mode 1 0.00606 0.00606
org-agenda-highlight-todo 86 0.0041800000 4.860...e-05
org-agenda-format-date-aligned 28 0.0033799999 0.0001207142
org-agenda-new-marker 136 0.0012809999 9.419...e-06
org-agenda-mark-clocking-task 1 0.00121 0.00121
org-agenda-align-tags 1 0.000903 0.000903
org-agenda-find-same-or-today-or-agenda 1 0.000499 0.000499
org-agenda-fontify-priorities 1 0.000394 0.000394
org-agenda-fix-displayed-tags 86 0.0003439999 3.999...e-06
org-agenda-add-time-grid-maybe 23 0.000236 1.026...e-05
org-agenda-set-mode-name 2 6.2e-05 3.1e-05
org-agenda-compute-time-span 1 3.8e-05 3.8e-05
org-agenda-mark-header-line 1 3.5e-05 3.5e-05
org-agenda-post-command-hook 2 1.6e-05 8e-06
org-agenda-reset-markers 1 1e-05 1e-05
org-agenda-ndays-to-span 2 6e-06 3e-06
org-agenda-check-type 1 5e-06 5e-06
[2] Elp results for monthly agenda view:
org-agenda-view-mode-dispatch 1 14.143243 14.143243
org-agenda-month-view 1 13.974747 13.974747
org-agenda-change-time-span 1 13.974703 13.974703
org-agenda-redo 1 13.972615 13.972615
org-agenda-list 1 13.97065 13.97065
org-agenda-get-day-entries 700 12.608783999 0.0180125485
org-agenda-get-scheduled 700 5.9895430000 0.0085564900
org-agenda-get-deadlines 700 3.8111570000 0.0054445100
org-agenda-get-timestamps 700 1.2642759999 0.0018061085
org-agenda-get-sexps 700 0.6626510000 0.0009466442
org-agenda-skip 15534 0.6255180000 4.026...e-05
org-agenda-get-blocks 700 0.6051640000 0.0008645200
org-agenda-todayp 1400 0.326468 0.0002331914
org-agenda-align-tags 1 0.023695 0.023695
org-agenda-highlight-todo 178 0.0217819999 0.0001223707
org-agenda-files 3 0.0175449999 0.0058483333
org-agenda-cleanup-fancy-diary 28 0.006159 0.0002199642
org-agenda-mode 1 0.006109 0.006109
org-agenda-mark-clocking-task 1 0.005423 0.005423
org-agenda-format-date-aligned 28 0.003358 0.0001199285
org-agenda-new-marker 314 0.0026219999 8.350...e-06
org-agenda-add-time-grid-maybe 27 0.0011129999 4.122...e-05
org-agenda-fontify-priorities 1 0.000879 0.000879
org-agenda-fix-displayed-tags 178 0.0008699999 4.887...e-06
org-agenda-find-same-or-today-or-agenda 1 0.000471 0.000471
org-agenda-deadline-face 27 0.0002540000 9.407...e-06
org-agenda-reset-markers 1 8.5e-05 8.5e-05
org-agenda-set-mode-name 2 5.7e-05 2.85e-05
org-agenda-mark-header-line 1 3.6e-05 3.6e-05
org-agenda-compute-time-span 1 3.3e-05 3.3e-05
org-agenda-post-command-hook 2 2.2e-05 1.1e-05
org-agenda-ndays-to-span 2 7e-06 3.5e-06
org-agenda-check-type 1 5e-06 5e-06
[3] Agenda view for single day:
org-agenda-list 1 1.765911 1.765911
org-agenda-get-day-entries 25 1.075021 0.04300084
org-agenda-get-scheduled 25 0.8153739999 0.0326149599
org-agenda-get-deadlines 25 0.1540369999 0.0061614799
org-agenda-get-timestamps 25 0.0491 0.001964
org-agenda-get-sexps 25 0.023261 0.00093044
org-agenda-skip 555 0.0225499999 4.063...e-05
org-agenda-get-blocks 25 0.021848 0.0008739199
org-agenda-files 3 0.0159939999 0.0053313333
org-agenda-align-tags 1 0.013129 0.013129
org-agenda-highlight-todo 59 0.0100849999 0.0001709322
org-agenda-mode 1 0.007312 0.007312
org-agenda-todayp 50 0.0030340000 6.068e-05
org-agenda-mark-clocking-task 1 0.002379 0.002379
org-agenda-new-marker 112 0.0008930000 7.973...e-06
org-agenda-add-time-grid-maybe 1 0.000831 0.000831
org-agenda-fontify-priorities 1 0.000378 0.000378
org-agenda-fix-displayed-tags 59 0.0002479999 4.203...e-06
org-agenda-cleanup-fancy-diary 1 0.00022 0.00022
org-agenda-deadline-face 18 0.000182 1.011...e-05
org-agenda-format-date-aligned 1 0.000117 0.000117
org-agenda-reset-markers 1 8.5e-05 8.5e-05
org-agenda-mark-header-line 1 3.7e-05 3.7e-05
org-agenda-set-mode-name 1 2.7e-05 2.7e-05
org-agenda-post-command-hook 1 1.8e-05 1.8e-05
org-agenda-ndays-to-span 2 7e-06 3.5e-06
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Slow speed of week and month views
2010-02-16 19:58 Matt Lundin
@ 2010-02-21 7:37 ` Carsten Dominik
2010-02-21 12:34 ` Matthew Lundin
0 siblings, 1 reply; 22+ messages in thread
From: Carsten Dominik @ 2010-02-21 7:37 UTC (permalink / raw)
To: Matt Lundin; +Cc: Org Mode
Hi Matt,
I am afraid I don't see any major speed improvements that could make
this happen.
Yes, one could parse all the files once, build a table in memory and
get the entries for each day from there - but that comes down to a
complete rewrite of the parser, maybe even to switching to an internal
representation model for Org-mode.
I don't see that happening, I am afraid.
- Carsten
On Feb 16, 2010, at 8:58 PM, Matt Lundin wrote:
> Currently I use org-mode to keep track of todos, projects, deadlines
> and
> the emacs diary to keep track of appointments. I would prefer to keep
> the latter in org-mode, but the slow speed of the weekly and monthly
> agenda views makes it difficult to gain a quick calendar overview of
> all
> upcoming timestamped items.
>
> Has anyone had success in setting up a *fast* calendar view for
> org-mode? I use the following custom command to get a view of
> timestamped items only:
>
> --8<---------------cut here---------------start------------->8---
> ("cc" "Calendar (events)" agenda ""
> ((org-agenda-ndays 1)
> (org-agenda-time-grid nil)
> (org-agenda-prefix-format " %-12:t ")
> (org-agenda-include-all-todo nil)
> (org-agenda-repeating-timestamp-show-all t)
> (org-agenda-skip-function '(org-agenda-skip-entry-if 'deadline
> 'scheduled))))
> --8<---------------cut here---------------end--------------->8---
>
> With 25 agenda files, if I type "v m" (view month) in the agenda
> results
> for this custom command, it takes over 16 seconds to generate the
> monthly calendar.[1]
>
> I get similar results if I type "v m" in the default agenda view.[2]
> As
> a point of comparison, I've included the time it takes to generate an
> agenda view for a single day on my system.[3]
>
> As far as I can tell, org-mode scans each agenda file anew for each
> day
> shown in the weekly or monthly agenda (hence the many invocations of
> org-agenda-get-day-entries in the results below), so the time it takes
> to generate the agenda is roughly proportional to the number of days
> in
> the view.
>
> Does anyone have any tips for speeding up the weekly or monthly agenda
> views? I have vague and utterly naïve notions of a function that would
> scan each agenda file *once* for timestamps within a given range
> rather
> than searching the agenda files again for each new day---but such a
> function is far beyond my elisp skills. Any help would be greatly
> appreciated.
>
> Thanks!
> Matt
>
> Footnotes:
>
> [1] Monthly view of custom command with 25 agenda files:
>
> org-agenda-view-mode-dispatch
> 1 15.528815 15.528815
> org-agenda-month-view
> 1 15.384877 15.384877
> org-agenda-change-time-span
> 1 15.384839 15.384839
> org-agenda-redo
> 1 15.383679 15.383679
> org-agenda-list
> 1 15.382742 15.382742
> org-agenda-get-day-entries
> 700 13.948870999 0.0199269585
> org-agenda-get-scheduled
> 700 6.4163719999 0.0091662457
> org-agenda-skip-entry-if
> 12871 5.3256909999 0.0004137744
> org-agenda-skip-if
> 12871 5.1750260000 0.0004020686
> org-agenda-get-deadlines
> 700 4.2478989999 0.0060684271
> org-agenda-get-timestamps
> 700 1.7289499999 0.0024699285
> org-agenda-get-sexps
> 700 0.6763130000 0.0009661614
> org-agenda-get-blocks
> 700 0.6087859999 0.0008696942
> org-agenda-todayp
> 1400 0.3336939999 0.0002383528
> org-agenda-skip
> 15534 0.0450969999 2.903...e-06
> org-agenda-files
> 3 0.016815 0.005605
> org-agenda-cleanup-fancy-diary
> 28 0.0062590000 0.0002235357
> org-agenda-mode
> 1 0.00606 0.00606
> org-agenda-highlight-todo
> 86 0.0041800000 4.860...e-05
> org-agenda-format-date-aligned
> 28 0.0033799999 0.0001207142
> org-agenda-new-marker
> 136 0.0012809999 9.419...e-06
> org-agenda-mark-clocking-task
> 1 0.00121 0.00121
> org-agenda-align-tags
> 1 0.000903 0.000903
> org-agenda-find-same-or-today-or-agenda
> 1 0.000499 0.000499
> org-agenda-fontify-priorities
> 1 0.000394 0.000394
> org-agenda-fix-displayed-tags
> 86 0.0003439999 3.999...e-06
> org-agenda-add-time-grid-maybe
> 23 0.000236 1.026...e-05
> org-agenda-set-mode-name
> 2 6.2e-05 3.1e-05
> org-agenda-compute-time-span
> 1 3.8e-05 3.8e-05
> org-agenda-mark-header-line
> 1 3.5e-05 3.5e-05
> org-agenda-post-command-hook
> 2 1.6e-05 8e-06
> org-agenda-reset-markers
> 1 1e-05 1e-05
> org-agenda-ndays-to-span
> 2 6e-06 3e-06
> org-agenda-check-type
> 1 5e-06 5e-06
>
> [2] Elp results for monthly agenda view:
>
> org-agenda-view-mode-dispatch
> 1 14.143243 14.143243
> org-agenda-month-view
> 1 13.974747 13.974747
> org-agenda-change-time-span
> 1 13.974703 13.974703
> org-agenda-redo
> 1 13.972615 13.972615
> org-agenda-list
> 1 13.97065 13.97065
> org-agenda-get-day-entries
> 700 12.608783999 0.0180125485
> org-agenda-get-scheduled
> 700 5.9895430000 0.0085564900
> org-agenda-get-deadlines
> 700 3.8111570000 0.0054445100
> org-agenda-get-timestamps
> 700 1.2642759999 0.0018061085
> org-agenda-get-sexps
> 700 0.6626510000 0.0009466442
> org-agenda-skip
> 15534 0.6255180000 4.026...e-05
> org-agenda-get-blocks
> 700 0.6051640000 0.0008645200
> org-agenda-todayp
> 1400 0.326468 0.0002331914
> org-agenda-align-tags
> 1 0.023695 0.023695
> org-agenda-highlight-todo
> 178 0.0217819999 0.0001223707
> org-agenda-files
> 3 0.0175449999 0.0058483333
> org-agenda-cleanup-fancy-diary
> 28 0.006159 0.0002199642
> org-agenda-mode
> 1 0.006109 0.006109
> org-agenda-mark-clocking-task
> 1 0.005423 0.005423
> org-agenda-format-date-aligned
> 28 0.003358 0.0001199285
> org-agenda-new-marker
> 314 0.0026219999 8.350...e-06
> org-agenda-add-time-grid-maybe
> 27 0.0011129999 4.122...e-05
> org-agenda-fontify-priorities
> 1 0.000879 0.000879
> org-agenda-fix-displayed-tags
> 178 0.0008699999 4.887...e-06
> org-agenda-find-same-or-today-or-agenda
> 1 0.000471 0.000471
> org-agenda-deadline-face
> 27 0.0002540000 9.407...e-06
> org-agenda-reset-markers
> 1 8.5e-05 8.5e-05
> org-agenda-set-mode-name
> 2 5.7e-05 2.85e-05
> org-agenda-mark-header-line
> 1 3.6e-05 3.6e-05
> org-agenda-compute-time-span
> 1 3.3e-05 3.3e-05
> org-agenda-post-command-hook
> 2 2.2e-05 1.1e-05
> org-agenda-ndays-to-span
> 2 7e-06 3.5e-06
> org-agenda-check-type
> 1 5e-06 5e-06
>
> [3] Agenda view for single day:
>
> org-agenda-list
> 1 1.765911 1.765911
> org-agenda-get-day-entries
> 25 1.075021 0.04300084
> org-agenda-get-scheduled
> 25 0.8153739999 0.0326149599
> org-agenda-get-deadlines
> 25 0.1540369999 0.0061614799
> org-agenda-get-timestamps
> 25 0.0491 0.001964
> org-agenda-get-sexps
> 25 0.023261 0.00093044
> org-agenda-skip
> 555 0.0225499999 4.063...e-05
> org-agenda-get-blocks
> 25 0.021848 0.0008739199
> org-agenda-files
> 3 0.0159939999 0.0053313333
> org-agenda-align-tags
> 1 0.013129 0.013129
> org-agenda-highlight-todo
> 59 0.0100849999 0.0001709322
> org-agenda-mode
> 1 0.007312 0.007312
> org-agenda-todayp
> 50 0.0030340000 6.068e-05
> org-agenda-mark-clocking-task
> 1 0.002379 0.002379
> org-agenda-new-marker
> 112 0.0008930000 7.973...e-06
> org-agenda-add-time-grid-maybe
> 1 0.000831 0.000831
> org-agenda-fontify-priorities
> 1 0.000378 0.000378
> org-agenda-fix-displayed-tags
> 59 0.0002479999 4.203...e-06
> org-agenda-cleanup-fancy-diary
> 1 0.00022 0.00022
> org-agenda-deadline-face
> 18 0.000182 1.011...e-05
> org-agenda-format-date-aligned
> 1 0.000117 0.000117
> org-agenda-reset-markers
> 1 8.5e-05 8.5e-05
> org-agenda-mark-header-line
> 1 3.7e-05 3.7e-05
> org-agenda-set-mode-name
> 1 2.7e-05 2.7e-05
> org-agenda-post-command-hook
> 1 1.8e-05 1.8e-05
> org-agenda-ndays-to-span
> 2 7e-06 3.5e-06
>
>
>
>
> _______________________________________________
> Emacs-orgmode mailing list
> Please use `Reply All' to send replies to the list.
> Emacs-orgmode@gnu.org
> http://lists.gnu.org/mailman/listinfo/emacs-orgmode
- Carsten
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Slow speed of week and month views
2010-02-21 7:37 ` Carsten Dominik
@ 2010-02-21 12:34 ` Matthew Lundin
0 siblings, 0 replies; 22+ messages in thread
From: Matthew Lundin @ 2010-02-21 12:34 UTC (permalink / raw)
To: Carsten Dominik; +Cc: Matt Lundin, Org Mode
Hi Carsten,
Carsten Dominik <carsten.dominik@gmail.com> writes:
> I am afraid I don't see any major speed improvements that could make
> this happen.
>
> Yes, one could parse all the files once, build a table in memory and
>get the entries for each day from there - but that comes down to a
>complete rewrite of the parser, maybe even to switching to an internal
>representation model for Org-mode.
>
> I don't see that happening, I am afraid.
Thanks so much for taking the time to look at this. The combination of
diary and org-mode works fine for now, so I believe I will stick with
that.
If I use org-mode for appointments, I imagine I could reserve a single
diary.org file for appointments and limit weekly and monthly calendar
custom commands to that file.
Best,
Matt
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [Orgmode] Slow speed of week and month views
@ 2017-08-04 15:14 Christoph Groth
2017-08-05 3:07 ` Adam Porter
0 siblings, 1 reply; 22+ messages in thread
From: Christoph Groth @ 2017-08-04 15:14 UTC (permalink / raw)
To: emacs-orgmode
Carsten Dominik wrote in 2010:
> I am afraid I don't see any major speed improvements that could
> make this happen. Yes, one could parse all the files once, build
> a table in memory and get the entries for each day from there -
> but that comes down to a complete rewrite of the parser, maybe
> even to switching to an internal representation model for
> Org-mode.
> I don't see that happening, I am afraid.
Computing the agenda month view takes 20 seconds in my case.
That's perhaps the most serious problem with orgmode as I (and I
suppose others as well) use it. It would be great if this issue
could be solved after all.
Would it be really so difficult to do? The actual parsing seems
to be done in the function org-agenda-get-day-entries as called by
org-agenda-list. Inside org-agenda-get-day-entries the crucial
bit seems to be (org-agenda-today-p date). If that bit got
replaced by something that matches more than a single day,
wouldn't this mostly do the trick?
This is much easier than "rewriting the parser", so it seems that
I'm overlooking some problems.
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [Orgmode] Slow speed of week and month views
2017-08-04 15:14 [Orgmode] Slow speed of week and month views Christoph Groth
@ 2017-08-05 3:07 ` Adam Porter
2017-08-05 21:09 ` Karl Voit
0 siblings, 1 reply; 22+ messages in thread
From: Adam Porter @ 2017-08-05 3:07 UTC (permalink / raw)
To: emacs-orgmode
Christoph Groth <christoph@grothesque.org> writes:
> Carsten Dominik wrote in 2010:
>
>> I am afraid I don't see any major speed improvements that could make
>> this happen. Yes, one could parse all the files once, build a table
>> in memory and get the entries for each day from there -
>> but that comes down to a complete rewrite of the parser, maybe even
>> to switching to an internal representation model for Org-mode.
>
>> I don't see that happening, I am afraid.
Wow, you must have done some digging to find that, Christoph. :)
> Computing the agenda month view takes 20 seconds in my case. That's
> perhaps the most serious problem with orgmode as I (and I suppose
> others as well) use it. It would be great if this issue could be
> solved after all.
>
> Would it be really so difficult to do? The actual parsing seems to be
> done in the function org-agenda-get-day-entries as called by
> org-agenda-list. Inside org-agenda-get-day-entries the crucial bit
> seems to be (org-agenda-today-p date). If that bit got replaced by
> something that matches more than a single day, wouldn't this mostly do
> the trick?
>
> This is much easier than "rewriting the parser", so it seems that I'm
> overlooking some problems.
I think Carsten is correct that it would require significant new code.
I looked at the code you mentioned, but I think you missed the bigger
structure. org-agenda-list first builds a list of day numbers from the
span that is set, then it calls org-agenda-get-day-entries for each day
number.
The (org-agenda-today-p date) form in org-agenda-get-day-entries is only
checked when the function is getting TODO items, and then it calls
org-agenda-get-todos to actually get the entries. And as far as I can
tell, org-agenda-list doesn't set the :todo selector at all, so the
org-agenda-get-todos function isn't called when building a time-based
agenda view; instead it's called for the org-todo-list command. This
seems to be confirmed by the docstring for org-agenda-entry-types, which
doesn't indicate that :todo is allowed as a type for daily/weekly
agendas.
I'm not as expert as Carsten or any of the current maintainers, but a
possible way to speed up agenda creation for longer time spans would be
to avoid parsing files repeatedly. IIUC they are parsed once for every
date shown in the agenda. Instead, if they were parsed once and
returned a list of items that was filtered or grouped once, that would
probably be faster.
But doing that would, as Carsten said, require rewriting a lot of code.
Essentially you'd be creating a new agenda system, so you'd have to
reimplement a lot of existing code. You could do it in parallel, rather
than replacing existing code, so you wouldn't have to break the existing
agenda system. But I don't think there's any way to shortcut writing
the new system. I don't think there's any "low hanging fruit."
Anyway, something based on org-map-entries might be interesting, but
it's hard to say if it would actually be faster in the end.
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [Orgmode] Slow speed of week and month views
2017-08-05 3:07 ` Adam Porter
@ 2017-08-05 21:09 ` Karl Voit
2017-08-05 22:17 ` John Kitchin
2017-08-05 22:35 ` Nicolas Goaziou
0 siblings, 2 replies; 22+ messages in thread
From: Karl Voit @ 2017-08-05 21:09 UTC (permalink / raw)
To: emacs-orgmode
Thanks for the insight!
* Adam Porter <adam@alphapapa.net> wrote:
>
> But doing that would, as Carsten said, require rewriting a lot of code.
> Essentially you'd be creating a new agenda system, so you'd have to
> reimplement a lot of existing code. You could do it in parallel, rather
> than replacing existing code, so you wouldn't have to break the existing
> agenda system. But I don't think there's any way to shortcut writing
> the new system. I don't think there's any "low hanging fruit."
My daily agenda takes twenty seconds, my weekly approximately a
minute and generating a monthly agenda is something I can only do
when I plan to leave the computer for a longer break.
Org-mode does not scale well, I'm afraid.
Repeatedly going through all agenda files does not seem to be a very
reasonable design choice for the general use-case. I would like to
see an alternative approach for the future of Org-mode.
--
get mail|git|SVN|photos|postings|SMS|phonecalls|RSS|CSV|XML into Org-mode:
> get Memacs from https://github.com/novoid/Memacs <
Personal Information Management > http://Karl-Voit.at/tags/pim/
Emacs-related > http://Karl-Voit.at/tags/emacs/
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [Orgmode] Slow speed of week and month views
2017-08-05 21:09 ` Karl Voit
@ 2017-08-05 22:17 ` John Kitchin
2017-08-05 22:33 ` Nicolas Goaziou
` (3 more replies)
2017-08-05 22:35 ` Nicolas Goaziou
1 sibling, 4 replies; 22+ messages in thread
From: John Kitchin @ 2017-08-05 22:17 UTC (permalink / raw)
To: Karl Voit; +Cc: emacs-orgmode@gnu.org
[-- Attachment #1: Type: text/plain, Size: 5244 bytes --]
I can think of two possibilities for a future approach (besides a deep dive
on profiling the current elisp to improve the speed there). They both
involve some substantial coding though, and would probably add
dependencies. I am curious what anyone things about these, or if there are
other ideas.
One is to use the new dynamic module capability to write an org parser in
C, or a dedicated agenda function, which would presumably be faster than in
elisp. This seems hard, and for me would certainly be a multiyear project
I am sure! The downside of this is the need to compile the module. I don't
know how easy it would be to make this work across platforms with the
relatively easy install org-mode currently has. This could have a side
benefit though of a c-lib that could be used by others to expand where
org-mode is used.
The other way that might work is to rely more heavily on a cached version
of the files, perhaps in a different format than elisp, that is faster to
work with. The approach I have explored in this is to index org files into
a sqlite database. The idea then would be to generate the agenda from a sql
query. I use something like this already to "find stuff in orgmode
anywhere". One of the reasons I wrote this is the org-agenda list of files
isn't practical for me because my files are so scattered on my file system.
I had a need to be able to find TODOs in research projects in a pretty wide
range of locations.
The code I use is at
https://github.com/jkitchin/scimax/blob/master/org-db.el, and from one
database I can find headlines, contacts, locations, TODO headlines across
my file system, all the files that contain a particular link, and my own
recent org files. This approach relies on emacsql, and a set of hook
functions to update the database whenever a file is changed. It is not
robust, e.g. the file could be out of sync with the db if it is modified
outside emacs, but this works well enough for me so far. Updated files get
reindexed whenever emacs is idle. It was a compromise on walking the file
system all the time or daily, or trying to use inotify and you can always
run a command to prune/sync all the files any time you want.
sqlite is ok, but with emacsql you cannot put strings in it directly (at
least when I wrote the org-db code), which has limited it for full-text
search so far. Also with text, the db got up to about 0.5 GB in size, and
started slowing down. So it doesn't have text in it for now. It has all the
other limitations of sqlite too, limited support for locking, single
process....
I am moderately motivated to switch from sqlite to MongoDB, but the support
for Mongo in emacs is pretty crummy (I tried writing a few traditional
interfaces, but the performance was not that good, and limited since Mongo
uses bson, and it is just not the same as json!). Why Mongo? Mostly because
the Mongo query language is basically json and easy to generate in Emacs,
unlike sql. Also, it is flexible and easy to adapt to new things, e.g.
indexing src-blocks or tables or whatever org-element you want. (And I want
to use Mongo for something else too ;). Obviously these all add
dependencies, and might not be suitable for the core org-mode distribution.
But I do think it is important to think about ways to scale org-mode while
maintaining compatibility with the core.
The main point of the database was to get a query language, persistence and
good performance. I have also used caches to speed up using bibtex files,
and my org-contacts with reasonable performance. These have been all elisp,
with no additional dependencies. Maybe one could do something similar to
keep an agenda cache that is persistent and updated via hook functions.
Thoughts?
John
-----------------------------------
Professor John Kitchin
Doherty Hall A207F
Department of Chemical Engineering
Carnegie Mellon University
Pittsburgh, PA 15213
412-268-7803
@johnkitchin
http://kitchingroup.cheme.cmu.edu
On Sat, Aug 5, 2017 at 5:09 PM, Karl Voit <devnull@karl-voit.at> wrote:
> Thanks for the insight!
>
> * Adam Porter <adam@alphapapa.net> wrote:
> >
> > But doing that would, as Carsten said, require rewriting a lot of code.
> > Essentially you'd be creating a new agenda system, so you'd have to
> > reimplement a lot of existing code. You could do it in parallel, rather
> > than replacing existing code, so you wouldn't have to break the existing
> > agenda system. But I don't think there's any way to shortcut writing
> > the new system. I don't think there's any "low hanging fruit."
>
> My daily agenda takes twenty seconds, my weekly approximately a
> minute and generating a monthly agenda is something I can only do
> when I plan to leave the computer for a longer break.
>
> Org-mode does not scale well, I'm afraid.
>
> Repeatedly going through all agenda files does not seem to be a very
> reasonable design choice for the general use-case. I would like to
> see an alternative approach for the future of Org-mode.
>
> --
> get mail|git|SVN|photos|postings|SMS|phonecalls|RSS|CSV|XML into Org-mode:
> > get Memacs from https://github.com/novoid/Memacs <
> Personal Information Management > http://Karl-Voit.at/tags/pim/
> Emacs-related > http://Karl-Voit.at/tags/emacs/
>
>
>
[-- Attachment #2: Type: text/html, Size: 6622 bytes --]
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Slow speed of week and month views
2017-08-05 22:17 ` John Kitchin
@ 2017-08-05 22:33 ` Nicolas Goaziou
2017-08-06 2:28 ` [Orgmode] " Tim Cross
` (2 subsequent siblings)
3 siblings, 0 replies; 22+ messages in thread
From: Nicolas Goaziou @ 2017-08-05 22:33 UTC (permalink / raw)
To: John Kitchin; +Cc: Karl Voit, emacs-orgmode@gnu.org
Hello,
John Kitchin <jkitchin@andrew.cmu.edu> writes:
> I can think of two possibilities for a future approach (besides a deep dive
> on profiling the current elisp to improve the speed there). They both
> involve some substantial coding though, and would probably add
> dependencies. I am curious what anyone things about these, or if there are
> other ideas.
These are interesting ideas, but I'd rather have a deep dive on
profiling the current Elisp.
> The main point of the database was to get a query language, persistence and
> good performance. I have also used caches to speed up using bibtex files,
> and my org-contacts with reasonable performance. These have been all elisp,
> with no additional dependencies. Maybe one could do something similar to
> keep an agenda cache that is persistent and updated via hook
> functions.
If an agenda cache is required, it can be very simple. Associate entries
to agenda files. Whenever a file is modified, drop all the entries. No
need to refresh it IMO. I doubt many agenda files are modified between
two agenda calls.
Regards,
--
Nicolas Goaziou
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Slow speed of week and month views
2017-08-05 21:09 ` Karl Voit
2017-08-05 22:17 ` John Kitchin
@ 2017-08-05 22:35 ` Nicolas Goaziou
2017-08-06 8:00 ` Karl Voit
1 sibling, 1 reply; 22+ messages in thread
From: Nicolas Goaziou @ 2017-08-05 22:35 UTC (permalink / raw)
To: Karl Voit; +Cc: Karl Voit, emacs-orgmode
Hello,
Karl Voit <devnull@Karl-Voit.at> writes:
> My daily agenda takes twenty seconds, my weekly approximately a
> minute and generating a monthly agenda is something I can only do
> when I plan to leave the computer for a longer break.
>
> Org-mode does not scale well, I'm afraid.
>
> Repeatedly going through all agenda files does not seem to be a very
> reasonable design choice for the general use-case. I would like to
> see an alternative approach for the future of Org-mode.
Well, we would at least need to profiling report as a starting point.
Could you provide one?
Regards,
--
Nicolas Goaziou
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [Orgmode] Slow speed of week and month views
2017-08-05 22:17 ` John Kitchin
2017-08-05 22:33 ` Nicolas Goaziou
@ 2017-08-06 2:28 ` Tim Cross
2017-08-06 2:36 ` Adam Porter
2017-08-06 7:54 ` Karl Voit
3 siblings, 0 replies; 22+ messages in thread
From: Tim Cross @ 2017-08-06 2:28 UTC (permalink / raw)
To: John Kitchin; +Cc: Karl Voit, emacs-orgmode@gnu.org
I think the only viable first step is the profiling.
One of the main reasons I like org-mode is that all the data is just
text in files and it does not have any dependencies on other external
systems apart for publishing/exporting.
While there may be a need for external utilities to improve performance
for large/complex org files, this should be the last resort. The more
org relies on external packages, the more complex things become for
maintaining support on multiple platforms.
The first step is profiling so that we really understand where the
bottlenecks are. It may be these can only be resolved in some cases
using sqlite/mongodb/something-else, but I'm not sure if we know that
yet.
Tim
John Kitchin writes:
> I can think of two possibilities for a future approach (besides a deep dive
> on profiling the current elisp to improve the speed there). They both
> involve some substantial coding though, and would probably add
> dependencies. I am curious what anyone things about these, or if there are
> other ideas.
>
> One is to use the new dynamic module capability to write an org parser in
> C, or a dedicated agenda function, which would presumably be faster than in
> elisp. This seems hard, and for me would certainly be a multiyear project
> I am sure! The downside of this is the need to compile the module. I don't
> know how easy it would be to make this work across platforms with the
> relatively easy install org-mode currently has. This could have a side
> benefit though of a c-lib that could be used by others to expand where
> org-mode is used.
>
> The other way that might work is to rely more heavily on a cached version
> of the files, perhaps in a different format than elisp, that is faster to
> work with. The approach I have explored in this is to index org files into
> a sqlite database. The idea then would be to generate the agenda from a sql
> query. I use something like this already to "find stuff in orgmode
> anywhere". One of the reasons I wrote this is the org-agenda list of files
> isn't practical for me because my files are so scattered on my file system.
> I had a need to be able to find TODOs in research projects in a pretty wide
> range of locations.
>
> The code I use is at
> https://github.com/jkitchin/scimax/blob/master/org-db.el, and from one
> database I can find headlines, contacts, locations, TODO headlines across
> my file system, all the files that contain a particular link, and my own
> recent org files. This approach relies on emacsql, and a set of hook
> functions to update the database whenever a file is changed. It is not
> robust, e.g. the file could be out of sync with the db if it is modified
> outside emacs, but this works well enough for me so far. Updated files get
> reindexed whenever emacs is idle. It was a compromise on walking the file
> system all the time or daily, or trying to use inotify and you can always
> run a command to prune/sync all the files any time you want.
>
> sqlite is ok, but with emacsql you cannot put strings in it directly (at
> least when I wrote the org-db code), which has limited it for full-text
> search so far. Also with text, the db got up to about 0.5 GB in size, and
> started slowing down. So it doesn't have text in it for now. It has all the
> other limitations of sqlite too, limited support for locking, single
> process....
>
> I am moderately motivated to switch from sqlite to MongoDB, but the support
> for Mongo in emacs is pretty crummy (I tried writing a few traditional
> interfaces, but the performance was not that good, and limited since Mongo
> uses bson, and it is just not the same as json!). Why Mongo? Mostly because
> the Mongo query language is basically json and easy to generate in Emacs,
> unlike sql. Also, it is flexible and easy to adapt to new things, e.g.
> indexing src-blocks or tables or whatever org-element you want. (And I want
> to use Mongo for something else too ;). Obviously these all add
> dependencies, and might not be suitable for the core org-mode distribution.
> But I do think it is important to think about ways to scale org-mode while
> maintaining compatibility with the core.
>
> The main point of the database was to get a query language, persistence and
> good performance. I have also used caches to speed up using bibtex files,
> and my org-contacts with reasonable performance. These have been all elisp,
> with no additional dependencies. Maybe one could do something similar to
> keep an agenda cache that is persistent and updated via hook functions.
>
> Thoughts?
>
> John
>
> -----------------------------------
> Professor John Kitchin
> Doherty Hall A207F
> Department of Chemical Engineering
> Carnegie Mellon University
> Pittsburgh, PA 15213
> 412-268-7803
> @johnkitchin
> http://kitchingroup.cheme.cmu.edu
>
>
> On Sat, Aug 5, 2017 at 5:09 PM, Karl Voit <devnull@karl-voit.at> wrote:
>
>> Thanks for the insight!
>>
>> * Adam Porter <adam@alphapapa.net> wrote:
>> >
>> > But doing that would, as Carsten said, require rewriting a lot of code.
>> > Essentially you'd be creating a new agenda system, so you'd have to
>> > reimplement a lot of existing code. You could do it in parallel, rather
>> > than replacing existing code, so you wouldn't have to break the existing
>> > agenda system. But I don't think there's any way to shortcut writing
>> > the new system. I don't think there's any "low hanging fruit."
>>
>> My daily agenda takes twenty seconds, my weekly approximately a
>> minute and generating a monthly agenda is something I can only do
>> when I plan to leave the computer for a longer break.
>>
>> Org-mode does not scale well, I'm afraid.
>>
>> Repeatedly going through all agenda files does not seem to be a very
>> reasonable design choice for the general use-case. I would like to
>> see an alternative approach for the future of Org-mode.
>>
>> --
>> get mail|git|SVN|photos|postings|SMS|phonecalls|RSS|CSV|XML into Org-mode:
>> > get Memacs from https://github.com/novoid/Memacs <
>> Personal Information Management > http://Karl-Voit.at/tags/pim/
>> Emacs-related > http://Karl-Voit.at/tags/emacs/
>>
>>
>>
--
Tim Cross
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [Orgmode] Slow speed of week and month views
2017-08-05 22:17 ` John Kitchin
2017-08-05 22:33 ` Nicolas Goaziou
2017-08-06 2:28 ` [Orgmode] " Tim Cross
@ 2017-08-06 2:36 ` Adam Porter
2017-08-06 7:54 ` Karl Voit
3 siblings, 0 replies; 22+ messages in thread
From: Adam Porter @ 2017-08-06 2:36 UTC (permalink / raw)
To: emacs-orgmode
Thanks for your comments, John, that is very interesting. I'll have to
check out your db code.
I'll drop a penny in the bucket with this:
http://github.com/alphapapa/org-agenda-ng
I spent a few hours trying an alternative approach that uses
org-element-parse-buffer to parse each file, then operates on the parse
tree it produces. I was hoping it might have a chance to be an
improvement, but unfortunately it's not: org-element-parse-buffer is
very slow in comparison to the existing agenda code, and it eats up
almost all the time spent building the (very primitive) agenda views.
So, I think all we need is for someone to write a version of
org-element-parse-buffer in C or CL or whatever their favorite language
that compiles to a fast binary may be. Then we can read that into Emacs
and operate on the resulting tree quickly. Yep, that's ALL we
need... ;)
Seriously, though, it would be amazing if the new library support in
Emacs could be used to interface with a fast Org parser that provided
the same output as org-element-parse-buffer. Maybe it could even be
added to Emacs core, as the Org file format doesn't change much.
All that's way over my head, I'm afraid. Would some kind of bounty work
for a project like this? I'd be willing to contribute a few dollars and
some testing. :)
I also gave a cursory look at profiling org-element-parse-buffer, but I
don't think Nicolas left any low-hanging fruit there. But I'm not
experienced with profiling code like that, so don't take my word for
it. :)
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [Orgmode] Slow speed of week and month views
2017-08-05 22:17 ` John Kitchin
` (2 preceding siblings ...)
2017-08-06 2:36 ` Adam Porter
@ 2017-08-06 7:54 ` Karl Voit
2017-08-06 13:47 ` John Kitchin
3 siblings, 1 reply; 22+ messages in thread
From: Karl Voit @ 2017-08-06 7:54 UTC (permalink / raw)
To: emacs-orgmode
Hello John,
Great to read your thoughts on the topic - I am a huge admirer of
your work and we both seem to cope with similar issues with
Org-mode.
* John Kitchin <jkitchin@andrew.cmu.edu> wrote:
>
> One is to use the new dynamic module capability to write an org parser in
> C, or a dedicated agenda function, which would presumably be faster than in
> elisp. This seems hard, and for me would certainly be a multiyear project
> I am sure! The downside of this is the need to compile the module. I don't
> know how easy it would be to make this work across platforms with the
> relatively easy install org-mode currently has. This could have a side
> benefit though of a c-lib that could be used by others to expand where
> org-mode is used.
I'm not a fan of C at all but having the parser in C with the
possibility to use this parser for external tools as well sounds
awesome to me. After all, I've written a primitive parser for a
sub-set of Org-mode for https://github.com/novoid/lazyblorg using
Python.
> The other way that might work is to rely more heavily on a cached version
> of the files, perhaps in a different format than elisp, that is faster to
> work with. The approach I have explored in this is to index org files into
> a sqlite database. The idea then would be to generate the agenda from a sql
> query. I use something like this already to "find stuff in orgmode
> anywhere". One of the reasons I wrote this is the org-agenda list of files
> isn't practical for me because my files are so scattered on my file system.
> I had a need to be able to find TODOs in research projects in a pretty wide
> range of locations.
>
> The code I use is at
> https://github.com/jkitchin/scimax/blob/master/org-db.el, and from one
> database I can find headlines, contacts, locations, TODO headlines across
> my file system, all the files that contain a particular link, and my own
> recent org files.
I didn't try org-db.el yet. So far, I survived using "git grep" and
counsel-grep [0]
> I am moderately motivated to switch from sqlite to MongoDB
Is org-db.el your standard way of accessing informations or do you
use it only for occasional searches where you assume that the usual
methods would be slow?
> The main point of the database was to get a query language, persistence and
> good performance. I have also used caches to speed up using bibtex files,
> and my org-contacts with reasonable performance. These have been all elisp,
> with no additional dependencies. Maybe one could do something similar to
> keep an agenda cache that is persistent and updated via hook functions.
Oh yeah. My org-contacts were unusable without at least some minor
performance improvements as well. Most important to me: improving
manipulation of properties using [1].
For example, org-set-property takes almost 20 seconds to give me its
interactive input line in my main Org-mode file. This is a no-go.
[1] helped me here a lot.
[0] https://github.com/novoid/dot-emacs/blob/master/config.org#optimizing-search-methods
[1] https://github.com/novoid/dot-emacs/blob/master/config.org#my-org-region-to-property--my-map-p
--
get mail|git|SVN|photos|postings|SMS|phonecalls|RSS|CSV|XML into Org-mode:
> get Memacs from https://github.com/novoid/Memacs <
Personal Information Management > http://Karl-Voit.at/tags/pim/
Emacs-related > http://Karl-Voit.at/tags/emacs/
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Slow speed of week and month views
2017-08-05 22:35 ` Nicolas Goaziou
@ 2017-08-06 8:00 ` Karl Voit
2017-08-06 8:15 ` Nicolas Goaziou
0 siblings, 1 reply; 22+ messages in thread
From: Karl Voit @ 2017-08-06 8:00 UTC (permalink / raw)
To: emacs-orgmode
* Nicolas Goaziou <mail@nicolasgoaziou.fr> wrote:
> Hello,
Hi Nicolas,
> Karl Voit <devnull@Karl-Voit.at> writes:
>
>> My daily agenda takes twenty seconds, my weekly approximately a
>> minute and generating a monthly agenda is something I can only do
>> when I plan to leave the computer for a longer break.
>>
>> Org-mode does not scale well, I'm afraid.
>
> Well, we would at least need to profiling report as a starting point.
> Could you provide one?
First: I've occasionally mentioned all kinds of performance issues
over the last years. I even started threads on how to improve things
on a completely new level.
I can provide many performance annoyances that affect me on a daily
basis.
So I am glad to be able to improve the situation for anybody. I have
had slow agenda performance for many years and I had to live with
it.
Here is a current profiling report from my daily agenda:
- command-execute 21948 98%
- call-interactively 21948 98%
- my-org-agenda 21518 96%
- if 21518 96%
- org-agenda-list 21518 96%
- byte-code 21518 96%
- byte-code 18530 82%
- apply 18530 82%
- org-agenda-get-day-entries 18530 82%
- #<compiled 0x374b19> 14961 66%
- org-agenda-get-scheduled 14957 66%
- byte-code 13977 62%
- org-is-habit-p 6424 28%
- org-entry-get 6236 27%
- org--property-local-values 5876 26%
- org-get-property-block 4258 19%
- org-inlinetask-in-task-p 1619 7%
org-inlinetask-outline-regexp 4 0%
- org-back-to-heading 1512 6%
- funcall 1512 6%
- #<compiled 0x53b0215> 1512 6%
outline-back-to-heading 1041 4%
org-before-first-heading-p 360 1%
org-get-limited-outline-regexp 19 0%
- org-at-planning-p 3396 15%
- funcall 2796 12%
- #<compiled 0xabed2b> 2796 12%
- org-inlinetask-in-task-p 1202 5%
org-inlinetask-outline-regexp 12 0%
- org-back-to-heading 1075 4%
- funcall 1071 4%
- #<compiled 0x53ae983> 1071 4%
outline-back-to-heading 575 2%
org-get-limited-outline-regexp 12 0%
- org-get-todo-state 2044 9%
- org-back-to-heading 1456 6%
- funcall 1456 6%
- #<compiled 0x53aec35> 1456 6%
outline-back-to-heading 1021 4%
+ org-agenda-skip 528 2%
+ org-get-tags-at 276 1%
+ org-agenda--timestamp-to-absolute 96 0%
+ org-habit-parse-todo 65 0%
+ org-agenda-format-item 32 0%
org-get-priority 16 0%
byte-code 8 0%
string-prefix-p 4 0%
org-outline-level 4 0%
- #<compiled 0x374ae3> 2237 10%
- org-agenda-get-deadlines 2237 10%
- byte-code 1899 8%
- org-at-planning-p 896 4%
- funcall 736 3%
- #<compiled 0xabed2b> 736 3%
- org-back-to-heading 284 1%
- funcall 280 1%
- #<compiled 0x5145e8f> 280 1%
outline-back-to-heading 144 0%
- org-inlinetask-in-task-p 280 1%
org-inlinetask-outline-regexp 4 0%
org-get-limited-outline-regexp 4 0%
- org-get-todo-state 599 2%
- org-back-to-heading 399 1%
- funcall 399 1%
- #<compiled 0x514547b> 399 1%
- outline-back-to-heading 251 1%
outline-on-heading-p 4 0%
+ org-agenda-skip 104 0%
+ org-agenda--timestamp-to-absolute 12 0%
abbreviate-file-name 4 0%
- #<compiled 0x374b3d> 1308 5%
- org-agenda-get-blocks 688 3%
- byte-code 360 1%
- org-agenda-skip 88 0%
org-in-src-block-p 12 0%
org-end-of-subtree 4 0%
- org-get-todo-state 4 0%
- org-back-to-heading 4 0%
- funcall 4 0%
- #<compiled 0x547456b> 4 0%
outline-back-to-heading 4 0%
- org-get-tags-at 4 0%
- funcall 4 0%
- #<compiled 0x54745d7> 4 0%
- funcall 4 0%
- #<compiled 0x5110c41> 4 0%
match-string-no-properties 4 0%
org-get-priority 4 0%
time-to-days 4 0%
+ org-agenda-get-timestamps 620 2%
+ #<compiled 0x374b29> 24 0%
- org-agenda-prepare 1952 8%
- org-agenda-prepare-buffers 1848 8%
- funcall 1844 8%
- #<compiled 0x53d5ed1> 1844 8%
+ org-end-of-subtree 596 2%
+ org-refresh-category-properties 252 1%
+ org-at-heading-p 172 0%
+ org-set-regexps-and-options 120 0%
+ org-in-commented-heading-p 8 0%
org-check-agenda-file 4 0%
+ org-agenda-mode 104 0%
+ org-agenda-finalize 772 3%
+ org-get-entries-from-diary 196 0%
+ org-agenda-finalize-entries 28 0%
put-text-property 8 0%
+ counsel-M-x 430 1%
+ ... 334 1%
+ timer-event-handler 76 0%
mouse-fixup-help-message 10 0%
You can find my personal setup on
https://github.com/novoid/dot-emacs/blob/master/config.org
Things related to my agenda start at
https://github.com/novoid/dot-emacs/blob/master/config.org#agenda
(the report is from my non-work files)
--
get mail|git|SVN|photos|postings|SMS|phonecalls|RSS|CSV|XML into Org-mode:
> get Memacs from https://github.com/novoid/Memacs <
Personal Information Management > http://Karl-Voit.at/tags/pim/
Emacs-related > http://Karl-Voit.at/tags/emacs/
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Slow speed of week and month views
2017-08-06 8:00 ` Karl Voit
@ 2017-08-06 8:15 ` Nicolas Goaziou
2017-08-06 9:01 ` Karl Voit
0 siblings, 1 reply; 22+ messages in thread
From: Nicolas Goaziou @ 2017-08-06 8:15 UTC (permalink / raw)
To: Karl Voit; +Cc: Karl Voit, emacs-orgmode
Hello,
Karl Voit <devnull@Karl-Voit.at> writes:
> First: I've occasionally mentioned all kinds of performance issues
> over the last years.
That's important indeed. But performance issues needs a proper profiling
report to be useful. The type of data being processed (i.e., something
that would be unusual, like 9k clock lines in a LOGBOOK drawer).
> I even started threads on how to improve things
> on a completely new level.
This doesn't ring a bell, sorry.
> I can provide many performance annoyances that affect me on a daily
> basis.
Great! Hopefully some of them can be fixed.
> So I am glad to be able to improve the situation for anybody. I have
> had slow agenda performance for many years and I had to live with
> it.
> Here is a current profiling report from my daily agenda:
Could you report it again running Org un-compiled (C-u M-x org-reload)?
Also, another report using "M-x elp-instrument-package" would be great,
too.
Thank you.
Regards,
--
Nicolas Goaziou
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Slow speed of week and month views
2017-08-06 8:15 ` Nicolas Goaziou
@ 2017-08-06 9:01 ` Karl Voit
2017-08-06 9:13 ` Adam Porter
2017-08-06 9:26 ` Nicolas Goaziou
0 siblings, 2 replies; 22+ messages in thread
From: Karl Voit @ 2017-08-06 9:01 UTC (permalink / raw)
To: emacs-orgmode
Hi Nicolas,
* Nicolas Goaziou <mail@nicolasgoaziou.fr> wrote:
>
> Karl Voit <devnull@Karl-Voit.at> writes:
>
>> First: I've occasionally mentioned all kinds of performance issues
>> over the last years.
btw, working within my Memacs agenda [1] with a bit under a million
lines of Org-mode is the worst case scenario from my point of view
so far. Jumping from one day to another could lead to waiting times
of minutes.
And then there is the single-thread issue which results in 100%
CPU-core usage on only one of my four cores.
If you consider modern intel i5 CPUs (like mine) and the fairly
moderate data package of a few Megabytes, this is hard to explain to
someone who has IT/programming background but no Emacs experience.
> That's important indeed. But performance issues needs a proper profiling
> report to be useful. The type of data being processed (i.e., something
> that would be unusual, like 9k clock lines in a LOGBOOK drawer).
I totally agree.
With a fairly modified configuration (like mine on [0]) and a large
set of long Org-mode files I can't publish, it is hard to do
analysis here. So I can offer to report any performance annoyances
and anything you need to execute (report) on my side.
My Org-mode is from git/maint. Currently: release_9.0.3-261-g62dc27
but I can upgrade any time to the newest maint commit.
>> I even started threads on how to improve things
>> on a completely new level.
>
> This doesn't ring a bell, sorry.
This was a comment, not a complaint ;-)
>> So I am glad to be able to improve the situation for anybody. I have
>> had slow agenda performance for many years and I had to live with
>> it.
>
>> Here is a current profiling report from my daily agenda:
>
> Could you report it again running Org un-compiled (C-u M-x org-reload)?
> Also, another report using "M-x elp-instrument-package" would be great,
> too.
Sure:
I just learned about elp-instrument-package. What prefixes are of interest to
you?
un-compiled agenda profiler-report:
The output here seems very nasty. I put the exported result for temporarily on:
http://Karl-Voit.at/temp/2017-08-06_org-mode_agenda_profile_report_un-compiled.log
- command-execute 21982 86%
- call-interactively 21982 86%
- counsel-M-x 17686 69%
- ivy-read 17669 69%
- read-from-minibuffer 17529 69%
- minibuffer-inactive-mode 17367 68%
- run-mode-hooks 17367 68%
- run-hooks 17367 68%
- yankpad-local-category-to-major-mode 17367 68%
- yankpad--categories 17367 68%
- yankpad--file-elements 17359 68%
- org-element-parse-buffer 17282 68%
- save-excursion 17027 67%
- org-element--parse-elements 17027 67%
- save-excursion 17027 67%
- let 17027 67%
- while 17027 67%
- let* 17027 67%
- cond 17019 67%
- org-element--parse-elements 17019 67%
- save-excursion 17019 67%
- let 17019 67%
- while 17019 67%
- let* 17019 67%
- cond 17019 67%
- org-element--parse-elements 17019 67%
- save-excursion 17019 67%
- let 17015 67%
- while 17015 67%
- let* 17015 67%
- cond 17015 67%
- org-element--parse-elements 17015 67%
- save-excursion 17007 66%
- let 17007 66%
- while 17003 66%
- let* 16999 66%
- cond 16590 65%
- org-element--parse-objects 16586 65%
- save-excursion 16586 65%
- save-restriction 16586 65%
- let 16302 64%
- while 16294 64%
- let 16242 63%
- setq 16242 63%
- cons 16242 63%
- if 16242 63%
- org-element--parse-objects 16238 63%
- save-excursion 16234 63%
- save-restriction 16234 63%
- let 16234 63%
- while 16230 63%
- and 16230 63%
- setq 16230 63%
- org-element--object-lex 16230 63%
- if 16230 63%
- let* 16230 63%
- save-excursion 16230 63%
- while 16230 63%
- let 16222 63%
- if 16190 63%
- progn 16190 63%
- insert-before-markers 16190 63%
- org-habit-build-graph 16190 63%
- let* 16190 63%
- while 16190 63%
- let* 16190 63%
- if 16190 63%
- save-current-buffer 16186 63%
- save-excursion 16186 63%
- save-restriction 16186 63%
- let 16186 63%
- let 16186 63%
- while 16186 63%
- let* 16186 63%
- cond 16186 63%
- funcall 16186 63%
- #<lambda 0xdbf41b167> 12831 50%
- setq 12831 50%
- cons 12831 50%
- org-agenda-get-scheduled 12831 50%
- let* 12831 50%
- while 12831 50%
- catch 11947 47%
- let* 7991 31%
- and 5499 21%
- org-is-habit-p 5499 21%
- string= 5499 21%
- org-entry-get 5363 21%
- org--property-local-values 5019 19%
- org-get-property-block 3675 14%
- org-inlinetask-in-task-p 1520 5%
- save-excursion 1408 5%
- let* 888 3%
- or 880 3%
- and 872 3%
progn 316 1%
looking-at-p 4 0%
- org-inlinetask-outline-regexp 4 0%
let 4 0%
- org-back-to-heading 1315 5%
- funcall 1311 5%
- #<compiled 0xf0fcdb> 1311 5%
outline-back-to-heading 955 3%
org-before-first-heading-p 324 1%
- org-get-limited-outline-regexp 28 0%
- cond 28 0%
not 24 0%
let* 4 0%
member-ignore-case 4 0%
- let 1832 7%
- unwind-protect 1788 7%
- progn 1788 7%
- org-get-todo-state 1636 6%
- org-back-to-heading 1164 4%
- funcall 1164 4%
- #<compiled 0xefeb49> 1164 4%
- outline-back-to-heading 812 3%
outline-on-heading-p 4 0%
- save-excursion 472 1%
- let* 460 1%
- org-get-tags-at 344 1%
- funcall 344 1%
- #<compiled 0x15e9259> 344 1%
- funcall 344 1%
- #<compiled 0x161ccf5> 344 1%
- org-up-heading-safe 320 1%
org-outline-level 28 0%
- funcall 8 0%
- #<compiled 0xaccfe1> 8 0%
- org-back-to-heading 8 0%
- funcall 8 0%
- #<compiled 0x38d6a5> 8 0%
- outline-back-to-heading 8 0%
outline-on-heading-p 8 0%
- org-back-to-heading 12 0%
- funcall 12 0%
- #<compiled 0x161cc6b> 12 0%
outline-back-to-heading 12 0%
match-string-no-properties 8 0%
- org-agenda-format-item 36 0%
- let* 36 0%
- let 36 0%
- unwind-protect 36 0%
- progn 36 0%
- let* 36 0%
- org-agenda-get-category-icon 28 0%
- catch 28 0%
- let 28 0%
- while 28 0%
- if 28 0%
- progn 28 0%
- if 28 0%
- throw 28 0%
- apply 28 0%
- create-image 28 0%
- image-type 28 0%
- image-type-from-file-header 28 0%
insert-file-contents-literally 12 0%
- if 4 0%
- progn 4 0%
- if 4 0%
setq 4 0%
setq 4 0%
- org-add-props 32 0%
- org-agenda-new-marker 16 0%
let 4 0%
- if 12 0%
- + 12 0%
org-get-priority 12 0%
- make-string 20 0%
- org-reduced-level 20 0%
org-outline-level 12 0%
- and 16 0%
- org-habit-parse-todo 16 0%
- save-excursion 16 0%
- let* 16 0%
- let* 8 0%
- while 8 0%
- and 8 0%
funcall 8 0%
- org-get-scheduled-time 4 0%
- org-entry-get 4 0%
- org-entry-properties 4 0%
- funcall 4 0%
- #<compiled 0xaadad7> 4 0%
- org-back-to-heading 4 0%
- funcall 4 0%
- #<compiled 0x39ccdf5> 4 0%
outline-back-to-heading 4 0%
- org-no-properties 4 0%
- nth 4 0%
- org-heading-components 4 0%
- org-back-to-heading 4 0%
- funcall 4 0%
- #<compiled 0x514a419> 4 0%
outline-back-to-heading 4 0%
buffer-substring 4 0%
- cond 80 0%
- org-agenda--timestamp-to-absolute 68 0%
- condition-case 64 0%
- apply 64 0%
- org-time-string-to-absolute 60 0%
- funcall 28 0%
- #<compiled 0x42a89f1> 28 0%
apply 20 0%
org-parse-time-string 4 0%
- org-closest-date 12 0%
- time-to-days 12 0%
time-to-day-in-year 8 0%
- time-to-days 12 0%
- time-to-day-in-year 12 0%
date-leap-year-p 8 0%
org-get-wdays 4 0%
- and 4 0%
string-match-p 4 0%
- if 28 0%
- cond 24 0%
- or 24 0%
- not 24 0%
memq 24 0%
- if 4 0%
- or 4 0%
and 4 0%
string-prefix-p 4 0%
- if 3100 12%
- let 3100 12%
- unwind-protect 3036 11%
- progn 3036 11%
- org-at-planning-p 2928 11%
- funcall 2396 9%
- #<compiled 0xabed2b> 2392 9%
- org-inlinetask-in-task-p 1176 4%
- save-excursion 1044 4%
- let* 1032 4%
- or 1028 4%
- and 1028 4%
progn 460 1%
- org-inlinetask-outline-regexp 4 0%
let 4 0%
- org-back-to-heading 828 3%
- funcall 828 3%
- #<compiled 0xf167e5> 828 3%
outline-back-to-heading 404 1%
- org-get-limited-outline-regexp 32 0%
- cond 32 0%
not 32 0%
- org-agenda-skip 844 3%
- let 840 3%
- if 584 2%
- or 584 2%
save-excursion 224 0%
- and 164 0%
- org-end-of-subtree 136 0%
- org-back-to-heading 52 0%
- funcall 52 0%
- #<compiled 0x3a9b173> 52 0%
outline-back-to-heading 40 0%
org-in-src-block-p 44 0%
- #<lambda 0x299c1f6eb2a54011> 2239 8%
- setq 2239 8%
- org-agenda-get-deadlines 2239 8%
- let* 2239 8%
- while 2231 8%
- catch 1867 7%
- if 911 3%
- let 911 3%
- unwind-protect 907 3%
- progn 907 3%
- org-at-planning-p 835 3%
- funcall 647 2%
- #<compiled 0xabed2b> 647 2%
- org-back-to-heading 304 1%
- funcall 304 1%
- #<compiled 0x51968b5> 304 1%
outline-back-to-heading 152 0%
- org-inlinetask-in-task-p 228 0%
- save-excursion 184 0%
- let* 180 0%
- or 176 0%
and 176 0%
- org-inlinetask-outline-regexp 4 0%
let 4 0%
- org-get-limited-outline-regexp 8 0%
- cond 8 0%
not 8 0%
- let* 704 2%
- let 640 2%
- unwind-protect 628 2%
- progn 628 2%
- org-get-todo-state 564 2%
- org-back-to-heading 352 1%
- funcall 352 1%
- #<compiled 0x5196805> 352 1%
outline-back-to-heading 232 0%
- cond 20 0%
- org-agenda--timestamp-to-absolute 20 0%
- condition-case 20 0%
- apply 20 0%
- org-time-string-to-absolute 16 0%
time-to-days 8 0%
- org-closest-date 4 0%
org-parse-time-string 4 0%
- funcall 4 0%
- #<compiled 0xa7f257> 4 0%
apply 4 0%
- if 4 0%
org-get-wdays 4 0%
- org-agenda-skip 252 0%
- let 252 0%
- if 176 0%
- or 176 0%
save-excursion 56 0%
- and 44 0%
- org-end-of-subtree 32 0%
- org-back-to-heading 16 0%
- funcall 16 0%
- #<compiled 0x4d3e4a1> 16 0%
outline-back-to-heading 16 0%
org-in-src-block-p 8 0%
- list 8 0%
- format 8 0%
abbreviate-file-name 8 0%
- #<lambda 0xd02f2dc11b> 1096 4%
- setq 1096 4%
- cons 1096 4%
- org-agenda-get-blocks 644 2%
- let* 644 2%
- while 640 2%
- catch 348 1%
- let 200 0%
- setq 96 0%
- time-to-days 8 0%
- org-time-string-to-time 4 0%
- funcall 4 0%
- #<compiled 0xa5f001> 4 0%
org-parse-time-string 4 0%
- if 8 0%
- save-excursion 8 0%
- setq 4 0%
org-get-category 4 0%
- if 4 0%
- setq 4 0%
- org-get-tags-at 4 0%
- funcall 4 0%
- #<compiled 0x194f7af> 4 0%
- funcall 4 0%
- #<compiled 0x194f7f7> 4 0%
match-string-no-properties 4 0%
- org-agenda-skip 148 0%
- let 148 0%
- if 64 0%
- or 64 0%
save-excursion 40 0%
org-in-src-block-p 8 0%
- and 4 0%
org-end-of-subtree 4 0%
- list 4 0%
format 4 0%
- org-agenda-get-timestamps 452 1%
- let* 452 1%
- while 452 1%
- catch 308 1%
- let 236 0%
- unwind-protect 232 0%
- progn 232 0%
- if 204 0%
- or 204 0%
- org-at-planning-p 108 0%
- funcall 72 0%
- #<compiled 0xabed2b> 72 0%
- org-inlinetask-in-task-p 40 0%
- save-excursion 36 0%
- let* 36 0%
- or 36 0%
- and 36 0%
progn 12 0%
- org-back-to-heading 28 0%
- funcall 28 0%
- #<compiled 0xe2c1bd> 28 0%
outline-back-to-heading 12 0%
- org-at-date-range-p 20 0%
funcall 20 0%
org-before-first-heading-p 20 0%
- org-agenda-skip 28 0%
- let 28 0%
- if 20 0%
- or 20 0%
org-in-src-block-p 4 0%
- and 4 0%
org-end-of-subtree 4 0%
save-excursion 4 0%
- let* 72 0%
- org-get-todo-state 40 0%
- org-back-to-heading 28 0%
- funcall 28 0%
- #<compiled 0xe63629> 28 0%
outline-back-to-heading 28 0%
- save-excursion 8 0%
- let* 8 0%
- org-get-tags-at 8 0%
- funcall 8 0%
- #<compiled 0xa96477> 8 0%
- funcall 8 0%
- #<compiled 0xa964bf> 8 0%
org-up-heading-safe 8 0%
- if 8 0%
- and 4 0%
- if 4 0%
- /= 4 0%
- org-agenda--timestamp-to-absolute 4 0%
- condition-case 4 0%
- apply 4 0%
org-time-string-to-absolute 4 0%
- #<lambda 0xdbf41b167> 20 0%
- setq 20 0%
- cons 20 0%
- org-agenda-get-sexps 20 0%
- let* 20 0%
while 20 0%
- org-habit-get-faces 4 0%
- let* 4 0%
- if 4 0%
- org-habit-deadline 4 0%
let 4 0%
- setq 32 0%
- cond 32 0%
- let* 32 0%
- cond 32 0%
- let 32 0%
- and 28 0%
- org-element-link-parser 20 0%
- catch 20 0%
- let 20 0%
cond 20 0%
- org-element-bold-parser 4 0%
- save-excursion 4 0%
- if 4 0%
progn 4 0%
- or 4 0%
- and 4 0%
- org-element-underline-parser 4 0%
save-excursion 4 0%
and 8 0%
- if 4 0%
- apply 4 0%
org-element-set-contents 4 0%
- and 52 0%
- setq 52 0%
- org-element--object-lex 48 0%
- if 48 0%
- let* 44 0%
- save-excursion 44 0%
- while 44 0%
and 40 0%
let 4 0%
- if 8 0%
- apply 4 0%
- org-element-set-contents 4 0%
cond 4 0%
- let 4 0%
- setq 4 0%
- cons 4 0%
- if 4 0%
- org-element-put-property 4 0%
- if 4 0%
org-add-props 4 0%
- if 276 1%
- let 276 1%
- org-indent-add-properties 276 1%
- let 276 1%
- unwind-protect 276 1%
- progn 276 1%
- save-excursion 276 1%
- save-restriction 276 1%
- let* 276 1%
- let* 276 1%
- unwind-protect 276 1%
- progn 276 1%
- while 276 1%
- cond 276 1%
- org-at-item-p 212 0%
- save-excursion 212 0%
- and 212 0%
- org-list-in-valid-context-p 212 0%
- not 212 0%
- org-in-block-p 212 0%
- funcall 208 0%
- #<compiled 0x55fbbbb> 196 0%
- org-between-regexps-p 144 0%
- org-in-regexp 16 0%
- funcall 12 0%
#<compiled 0xd19097> 12 0%
outline-next-heading 28 0%
outline-previous-heading 24 0%
- org-indent-set-line-properties 64 0%
- let* 36 0%
- cond 12 0%
- concat 12 0%
- org-add-props 8 0%
concat 4 0%
org-add-props 12 0%
add-text-properties 8 0%
- org-list-item-body-column 20 0%
- save-excursion 20 0%
- if 16 0%
- + 8 0%
progn 8 0%
save-excursion 4 0%
goto-char 4 0%
org-element--parse-elements 4 0%
- org-element--current-element 381 1%
- save-excursion 381 1%
- let 377 1%
- cond 373 1%
- let 241 0%
- cond 213 0%
- cond 149 0%
- funcall 129 0%
- #<compiled 0x51f78c1> 125 0%
- server-execute-continuation 125 0%
- funcall 125 0%
- #<compiled 0x51f7937> 125 0%
- #<compiled 0x51f7923> 125 0%
- server-execute 125 0%
- funcall 125 0%
- #<compiled 0x51f7987> 125 0%
- funcall 125 0%
- #<compiled 0x51f79e9> 125 0%
- server-visit-files 121 0%
- apply 121 0%
- ad-Advice-server-visit-files 121 0%
- #<compiled 0xda1221> 121 0%
- apply 121 0%
- #<compiled 0xd2dbe3> 121 0%
- find-file-noselect 121 0%
- find-file-noselect-1 106 0%
- after-find-file 106 0%
- normal-mode 106 0%
- fundamental-mode 104 0%
- run-mode-hooks 104 0%
- run-hooks 104 0%
- yankpad-local-category-to-major-mode 104 0%
- yankpad--categories 104 0%
- yankpad--file-elements 104 0%
- insert-file-contents 56 0%
- org-indent-refresh-maybe 56 0%
- org-indent-add-properties 56 0%
- org-at-item-p 40 0%
- org-list-in-valid-context-p 40 0%
- org-in-block-p 40 0%
- funcall 40 0%
- #<compiled 0x51ae903> 40 0%
- org-between-regexps-p 32 0%
org-in-regexp 4 0%
outline-next-heading 4 0%
outline-previous-heading 4 0%
org-list-item-body-column 4 0%
- org-element-parse-buffer 48 0%
- org-element--parse-elements 48 0%
- org-element--parse-elements 48 0%
- org-element--parse-elements 48 0%
- org-element--parse-elements 48 0%
- org-element--parse-elements 36 0%
- org-element--parse-elements 24 0%
- org-element--parse-objects 12 0%
- org-element--object-lex 12 0%
- org-element-link-parser 8 0%
- funcall 8 0%
#<compiled 0xae4fe7> 8 0%
- org-element--parse-elements 8 0%
org-element--parse-elements 4 0%
- org-element--current-element 4 0%
org-element-item-parser 4 0%
org-element--current-element 4 0%
- org-element--parse-objects 4 0%
org-element--object-lex 4 0%
org-element--current-element 4 0%
- org-element--current-element 12 0%
org-element-table-parser 4 0%
- funcall 2 0%
- #<compiled 0x22c097> 2 0%
- set-auto-mode 2 0%
set-auto-mode-1 2 0%
- create-file-buffer 15 0%
- apply 15 0%
- uniquify--create-file-buffer-advice 15 0%
uniquify-rationalize-file-buffer-names 15 0%
- server-switch-buffer 4 0%
- apply 4 0%
- server-switch-buffer--with-editor-server-window-alist 4 0%
- #<compiled 0xd303a9> 4 0%
select-frame-set-input-focus 4 0%
- mapc 20 0%
- #<lambda 0x3e9d1a848d8f578e> 20 0%
- let 20 0%
- cond 20 0%
- cond 20 0%
- mapc 20 0%
- #<lambda 0x3e9d1a848d8f578e> 20 0%
- let 20 0%
- cond 20 0%
- cond 20 0%
- mapc 20 0%
- #<lambda 0x3e9d1a848d8f578e> 20 0%
- let 20 0%
- cond 16 0%
- cond 16 0%
- mapc 12 0%
- #<lambda 0x3e9d1a848d8f578e> 8 0%
let 8 0%
org-element-type 4 0%
- org-element-plain-list-parser 32 0%
- or 28 0%
- org-element--list-struct 28 0%
- let 28 0%
- save-excursion 24 0%
- catch 24 0%
- while 24 0%
- cond 24 0%
- let 24 0%
- setq 12 0%
- cons 12 0%
- progn 12 0%
- let 8 0%
- list 8 0%
- and 4 0%
- let 4 0%
- unwind-protect 4 0%
progn 4 0%
save-excursion 8 0%
- while 4 0%
- let 4 0%
setq 4 0%
and 4 0%
- save-excursion 4 0%
- let* 4 0%
- list 4 0%
- nconc 4 0%
list 4 0%
- org-element-paragraph-parser 8 0%
- save-excursion 8 0%
- let* 8 0%
- let 8 0%
- while 8 0%
- not 8 0%
- cond 8 0%
- not 4 0%
and 4 0%
save-excursion 4 0%
- looking-at 4 0%
- org-item-re 4 0%
- let 4 0%
cond 4 0%
org-element-drawer-parser 4 0%
- org-element--collect-affiliated-keywords 28 0%
- if 28 0%
- let 20 0%
- while 12 0%
and 8 0%
- let* 4 0%
- if 4 0%
or 4 0%
- org-element-item-parser 40 0%
- save-excursion 40 0%
- let* 28 0%
- progn 12 0%
cond 4 0%
- org-element-put-property 8 0%
- let 4 0%
- org-list-get-tag 4 0%
org-list-get-nth 4 0%
- list 4 0%
list 4 0%
let 4 0%
- progn 40 0%
- let* 40 0%
- org-get-limited-outline-regexp 24 0%
- cond 24 0%
not 20 0%
let* 4 0%
- org-at-heading-p 4 0%
outline-on-heading-p 4 0%
- org-element-headline-parser 28 0%
- save-excursion 28 0%
- let* 28 0%
if 8 0%
and 8 0%
org-trim 4 0%
- min 4 0%
- save-excursion 4 0%
org-end-of-subtree 4 0%
- org-element-paragraph-parser 12 0%
- save-excursion 12 0%
- let* 12 0%
save-excursion 8 0%
- let 4 0%
- while 4 0%
- not 4 0%
- cond 4 0%
- not 4 0%
and 4 0%
- org-element-table-row-parser 4 0%
- save-excursion 4 0%
- let* 4 0%
and 4 0%
- setq 12 0%
- cons 8 0%
- org-element-put-property 8 0%
- if 8 0%
setcar 8 0%
- org-element-property 4 0%
- if 4 0%
plist-get 4 0%
- and 4 0%
- org-element-property 4 0%
if 4 0%
- org-element--current-element 8 0%
- save-excursion 8 0%
- let 8 0%
- cond 8 0%
- org-element-headline-parser 8 0%
- save-excursion 8 0%
- let* 8 0%
- min 8 0%
- save-excursion 8 0%
org-end-of-subtree 8 0%
- org-element--parse-elements 255 1%
- org-element--parse-elements 255 1%
- org-element--parse-elements 243 0%
- org-element--parse-elements 243 0%
- org-element--parse-elements 159 0%
- org-element--parse-elements 119 0%
- org-element--parse-elements 55 0%
- org-element--parse-elements 40 0%
- org-element--current-element 24 0%
org-get-limited-outline-regexp 8 0%
org-element-paragraph-parser 4 0%
- org-element--parse-elements 8 0%
org-element--current-element 4 0%
- org-element--parse-elements 4 0%
- org-element--current-element 4 0%
org-element-paragraph-parser 4 0%
- org-element--parse-objects 8 0%
org-element--object-lex 8 0%
- org-element--current-element 15 0%
org-element-item-parser 11 0%
- org-element--parse-objects 36 0%
org-element--object-lex 28 0%
- org-element--parse-objects 4 0%
org-element--object-lex 4 0%
- org-element--current-element 20 0%
org-element-paragraph-parser 12 0%
org-get-limited-outline-regexp 4 0%
- org-at-heading-p 4 0%
outline-on-heading-p 4 0%
- org-element--parse-objects 28 0%
- org-element--parse-objects 16 0%
org-element--object-lex 16 0%
- org-element--object-lex 8 0%
- org-element-link-parser 4 0%
- funcall 4 0%
#<compiled 0xae4fe7> 4 0%
- org-element--current-element 8 0%
org-element-item-parser 4 0%
- org-element--current-element 72 0%
- org-element--list-struct 28 0%
- funcall 28 0%
- #<compiled 0x469e687> 24 0%
match-string-no-properties 4 0%
funcall 4 0%
org-element-paragraph-parser 8 0%
org-element-quote-block-parser 4 0%
- org-element-src-block-parser 4 0%
- org-unescape-code-in-string 4 0%
- replace-regexp-in-string 4 0%
apply 4 0%
org-element--collect-affiliated-keywords 4 0%
org-get-limited-outline-regexp 4 0%
- org-element--parse-objects 8 0%
- org-element--object-lex 8 0%
- org-element-link-parser 4 0%
funcall 4 0%
- org-element--current-element 12 0%
- org-element-headline-parser 8 0%
- org-end-of-subtree 8 0%
- org-back-to-heading 4 0%
- funcall 4 0%
- #<compiled 0x4674a3d> 4 0%
outline-back-to-heading 4 0%
- insert-file-contents 61 0%
- org-indent-refresh-maybe 44 0%
- org-indent-add-properties 44 0%
- org-at-item-p 16 0%
- org-list-in-valid-context-p 16 0%
- org-in-block-p 16 0%
funcall 12 0%
org-indent-set-line-properties 12 0%
- set-auto-coding 17 0%
- find-auto-coding 17 0%
- byte-code 17 0%
sgml-html-meta-auto-coding-function 17 0%
- org-mode 16 0%
- org-install-agenda-files-menu 12 0%
- org-agenda-files 12 0%
- mapcar 12 0%
#<compiled 0xac09f3> 12 0%
- org-set-regexps-and-options 4 0%
- org-remove-keyword-keys 4 0%
mapcar 4 0%
- org-element-map 8 0%
- funcall 8 0%
- #<compiled 0x4d65559> 8 0%
- #<compiled 0x4d6553d> 8 0%
- mapc 8 0%
- #<compiled 0x4d6553d> 8 0%
- mapc 8 0%
- #<compiled 0x4d6553d> 8 0%
- mapc 8 0%
- #<compiled 0x4d6553d> 8 0%
mapc 4 0%
- ivy--exhibit 84 0%
- ivy--insert-minibuffer 59 0%
ivy--resize-minibuffer-to-fit 59 0%
- ivy--filter 17 0%
- funcall 17 0%
- #<compiled 0x53aa837> 17 0%
- cl-remove-if-not 17 0%
- apply 17 0%
- cl-remove 17 0%
- apply 17 0%
- cl-delete 13 0%
#<compiled 0xe42463> 13 0%
- ivy--format 4 0%
- funcall 4 0%
- #<compiled 0xe549cf> 4 0%
- internal--after-with-selected-window 4 0%
- select-window 4 0%
- apply 4 0%
ad-Advice-select-window 4 0%
- timer-event-handler 15 0%
- byte-code 15 0%
apply 15 0%
- redisplay_internal (C function) 8 0%
- eval 8 0%
- sml/generate-minor-modes 8 0%
- rm--mode-list-as-string-list 4 0%
mapcar 4 0%
sml/fill-width-available 4 0%
- #<compiled 0x4f2e365> 4 0%
- ivy--minibuffer-setup 4 0%
- ivy--exhibit 4 0%
- ivy--format 4 0%
- mapcar 4 0%
counsel-M-x-transformer 4 0%
- ivy-call 96 0%
- #<compiled 0xd6c0df> 96 0%
- command-execute 96 0%
- call-interactively 96 0%
- profiler-report 96 0%
- profiler-report-cpu 96 0%
- profiler-report-profile-other-window 92 0%
- profiler-report-setup-buffer 92 0%
- profiler-report-setup-buffer-1 76 0%
- profiler-report-mode 76 0%
- run-mode-hooks 76 0%
- run-hooks 76 0%
- yankpad-local-category-to-major-mode 76 0%
- yankpad--categories 76 0%
- yankpad--file-elements 76 0%
- insert-file-contents 40 0%
- org-indent-refresh-maybe 40 0%
- org-indent-add-properties 40 0%
- org-at-item-p 32 0%
- org-list-in-valid-context-p 32 0%
- org-in-block-p 32 0%
- funcall 32 0%
- #<compiled 0x2bb81bf> 28 0%
org-between-regexps-p 16 0%
outline-next-heading 4 0%
outline-previous-heading 4 0%
org-indent-set-line-properties 4 0%
- org-element-parse-buffer 36 0%
- org-element--parse-elements 36 0%
- org-element--parse-elements 36 0%
- org-element--parse-elements 28 0%
- org-element--parse-elements 28 0%
- org-element--parse-elements 20 0%
- org-element--current-element 12 0%
org-element-item-parser 4 0%
org-element-table-row-parser 4 0%
- org-element--parse-elements 8 0%
- org-element--current-element 8 0%
org-element-paragraph-parser 4 0%
- org-element--current-element 8 0%
- org-element--list-struct 4 0%
funcall 4 0%
- org-element--current-element 8 0%
- org-element-headline-parser 4 0%
replace-regexp-in-string 4 0%
org-get-limited-outline-regexp 4 0%
- profiler-report-render-calltree 16 0%
- profiler-report-rerender-calltree 16 0%
- profiler-report-render-calltree-1 16 0%
- profiler-calltree-build 16 0%
- profiler-calltree-build-unified 16 0%
- maphash 16 0%
- #<compiled 0x53da6bd> 4 0%
gethash 4 0%
profiler-cpu-profile 4 0%
- ivy--reset-state 40 0%
- ivy--filter 12 0%
- ivy--re-filter 8 0%
- funcall 8 0%
- #<compiled 0x4d5e7e7> 8 0%
- cl-remove-if-not 8 0%
- apply 8 0%
- cl-remove 4 0%
#<compiled 0xa7facd> 4 0%
- ivy--recompute-index 4 0%
- ivy--preselect-index 4 0%
cl-position 4 0%
- my-org-agenda 2768 10%
- if 2768 10%
- org-agenda-list 2768 10%
- catch 2768 10%
- org-agenda-prepare 1662 6%
- let 1662 6%
- if 1662 6%
- if 1662 6%
- org-agenda-prepare-buffers 1652 6%
- funcall 1652 6%
- #<compiled 0x50e6899> 1648 6%
- org-end-of-subtree 480 1%
- org-back-to-heading 100 0%
- funcall 100 0%
- #<compiled 0x50e6a49> 100 0%
- outline-back-to-heading 100 0%
outline-on-heading-p 20 0%
org-outline-level 12 0%
- org-refresh-category-properties 268 1%
- funcall 100 0%
#<compiled 0x50e68f1> 100 0%
- org-at-property-p 8 0%
- org-get-property-block 8 0%
- org-inlinetask-in-task-p 8 0%
- save-excursion 8 0%
- let* 8 0%
- or 8 0%
- and 8 0%
progn 4 0%
- org-end-of-subtree 8 0%
- org-back-to-heading 8 0%
- funcall 8 0%
#<compiled 0x50e6981> 8 0%
- org-back-to-heading 4 0%
- funcall 4 0%
- #<compiled 0x50e6929> 4 0%
outline-back-to-heading 4 0%
- org-at-heading-p 160 0%
outline-on-heading-p 128 0%
- org-set-regexps-and-options 140 0%
- org--setup-collect-keywords 140 0%
- org-element-at-point 32 0%
- save-excursion 32 0%
- save-restriction 32 0%
- let 32 0%
- cond 32 0%
- org-element--parse-to 28 0%
- catch 28 0%
- save-excursion 28 0%
- save-restriction 28 0%
- let* 28 0%
- let 28 0%
- while 28 0%
- if 24 0%
- setq 24 0%
- org-element--current-element 24 0%
- save-excursion 24 0%
- let 24 0%
- cond 24 0%
- let 24 0%
- cond 24 0%
- cond 24 0%
- org-element-keyword-parser 16 0%
- save-excursion 12 0%
- let 12 0%
- list 8 0%
nconc 8 0%
- org-trim 4 0%
replace-regexp-in-string 4 0%
- org-element-comment-parser 4 0%
- save-excursion 4 0%
- let* 4 0%
prog2 4 0%
- let 4 0%
cond 4 0%
- progn 4 0%
- let* 4 0%
- org-at-heading-p 4 0%
outline-on-heading-p 4 0%
- insert-file-contents 4 0%
- set-auto-coding 4 0%
find-auto-coding 4 0%
org-in-commented-heading-p 16 0%
delete-dups 4 0%
- org-agenda-mode 10 0%
- easy-menu-change 10 0%
- easy-menu-create-menu 10 0%
mapcar 10 0%
- let* 1106 4%
- org-agenda-finalize 1004 3%
- if 1004 3%
- save-excursion 1004 3%
- let 1004 3%
- if 996 3%
- progn 620 2%
- org-agenda-dim-blocked-tasks 620 2%
- save-excursion 620 2%
- let 620 2%
- while 620 2%
- let 620 2%
- if 620 2%
- and 620 2%
- save-current-buffer 620 2%
- save-excursion 616 2%
- org-entry-blocked-p 608 2%
- run-hook-with-args-until-failure 504 1%
- org-block-todo-from-children-or-siblings-or-parent 372 1%
- funcall 372 1%
- #<compiled 0x374abf> 368 1%
- org-entry-get 120 0%
- org--property-local-values 108 0%
- org-get-property-block 68 0%
- org-inlinetask-in-task-p 28 0%
- save-excursion 28 0%
- let* 28 0%
- or 28 0%
- and 28 0%
progn 20 0%
- org-up-heading-safe 116 0%
org-outline-level 16 0%
outline-next-heading 32 0%
- org-entry-is-done-p 20 0%
org-get-todo-state 20 0%
- org-entry-is-todo-p 4 0%
org-get-todo-state 4 0%
- org-depend-block-todo 132 0%
- let* 132 0%
- catch 132 0%
- setq 84 0%
- org-entry-get 76 0%
- org--property-local-values 72 0%
- org-get-property-block 32 0%
- org-inlinetask-in-task-p 20 0%
- save-excursion 20 0%
- let* 20 0%
- or 20 0%
- and 20 0%
progn 20 0%
- while 48 0%
- cond 48 0%
- setq 44 0%
- org-find-entry-with-id 44 0%
- org-find-property 44 0%
- funcall 44 0%
- #<compiled 0x1a2c4ad> 44 0%
- org-at-property-p 12 0%
- org-get-property-block 4 0%
- org-back-to-heading 4 0%
- funcall 4 0%
- #<compiled 0x4e380e7> 4 0%
outline-back-to-heading 4 0%
- save-excursion 4 0%
if 4 0%
- org-entry-get 92 0%
- org--property-local-values 76 0%
- org-get-property-block 44 0%
- org-inlinetask-in-task-p 16 0%
- save-excursion 16 0%
- let* 16 0%
- or 16 0%
- and 16 0%
progn 12 0%
org-before-first-heading-p 8 0%
- org-get-limited-outline-regexp 4 0%
- cond 4 0%
not 4 0%
- org-entry-properties 8 0%
- funcall 4 0%
#<compiled 0x4f2e4f7> 4 0%
- let 364 1%
- save-excursion 364 1%
- while 364 1%
- if 364 1%
- progn 364 1%
- put-text-property 364 1%
- let 364 1%
- save-excursion 364 1%
- save-excursion 364 1%
- save-restriction 364 1%
- delete-dups 352 1%
- mapcar 352 1%
- org-get-tags-at 348 1%
- funcall 348 1%
- #<compiled 0x55a0661> 348 1%
- funcall 348 1%
- #<compiled 0x55a06a9> 348 1%
- org-up-heading-safe 336 1%
org-outline-level 28 0%
- funcall 12 0%
- #<compiled 0xaccfe1> 12 0%
- org-back-to-heading 12 0%
- funcall 12 0%
- #<compiled 0x4f2f733> 12 0%
- outline-back-to-heading 12 0%
outline-on-heading-p 12 0%
- org-back-to-heading 4 0%
- funcall 4 0%
- #<compiled 0x40cb849> 4 0%
- outline-back-to-heading 4 0%
outline-on-heading-p 4 0%
match-string-no-properties 4 0%
- org-agenda-align-tags 12 0%
- let 12 0%
- save-excursion 12 0%
- while 12 0%
- add-text-properties 4 0%
- flycheck-handle-change 4 0%
run-at-time 4 0%
- delete-region 4 0%
- flycheck-handle-change 4 0%
- run-at-time 4 0%
timer-relative-time 4 0%
- save-excursion 4 0%
- while 4 0%
- org-activate-links 4 0%
- funcall 4 0%
- #<compiled 0xe55619> 4 0%
- org-element-link-parser 4 0%
- catch 4 0%
- let 4 0%
- cond 4 0%
cond 4 0%
- run-hooks 4 0%
- #<lambda 0x363f84cb9b50089c> 4 0%
remove-text-properties 4 0%
- while 52 0%
- if 44 0%
- progn 32 0%
- if 32 0%
- insert 28 0%
- org-agenda-finalize-entries 28 0%
- let 28 0%
- setq 24 0%
- mapcar 24 0%
- sort 20 0%
- org-entries-lessp 20 0%
- let* 20 0%
- if 20 0%
- setq 20 0%
- funcall 20 0%
- bh/agenda-sort 20 0%
- let 20 0%
- cond 20 0%
- cond 16 0%
- apply 16 0%
bh/is-due-deadline 4 0%
- bh/is-not-scheduled-or-deadline 4 0%
- and 4 0%
- not 4 0%
- bh/is-deadline 4 0%
- or 4 0%
bh/is-late-deadline 4 0%
bh/is-scheduled-late 4 0%
bh/is-late-deadline 4 0%
- org-agenda-highlight-todo 4 0%
- let 4 0%
- if 4 0%
- let 4 0%
- if 4 0%
- and 4 0%
equal 4 0%
- let 12 0%
- setq 12 0%
- org-get-entries-from-diary 12 0%
- let* 12 0%
- save-excursion 12 0%
- let 12 0%
- unwind-protect 12 0%
- progn 12 0%
- funcall 12 0%
- diary-list-entries 12 0%
- diary-fancy-display 8 0%
- special-mode 4 0%
- run-mode-hooks 4 0%
- run-hooks 4 0%
- mode-icons-reset 4 0%
- mode-icons-set-current-mode-icon 4 0%
- mode-icons-set-mode-icon 4 0%
- mode-icons-get-mode-icon 4 0%
- mode-icons-get-icon-spec 4 0%
- funcall 4 0%
#<compiled 0x533ab05> 4 0%
- diary-fancy-display-mode 4 0%
- run-mode-hooks 4 0%
- run-hooks 4 0%
- yankpad-local-category-to-major-mode 4 0%
- yankpad--categories 4 0%
- yankpad--file-elements 4 0%
- org-mode 4 0%
- org-install-agenda-files-menu 4 0%
- org-agenda-files 4 0%
- mapcar 4 0%
#<compiled 0xac09f3> 4 0%
- while 8 0%
- catch 8 0%
- let 8 0%
- cond 8 0%
- setq 8 0%
- apply 8 0%
- org-agenda-get-day-entries 8 0%
- let* 8 0%
- if 8 0%
- org-get-agenda-file-buffer 4 0%
org-find-base-buffer-visiting 4 0%
- if 50 0%
- and 34 0%
- pos-visible-in-window-p 4 0%
- eval 4 0%
- sml/generate-minor-modes 4 0%
- rm--mode-list-as-string-list 4 0%
mapcar 4 0%
- byte-code 659 2%
- read-file-name 659 2%
- read-file-name-default 659 2%
- completing-read 659 2%
- completing-read-default 659 2%
- read-from-minibuffer 595 2%
- minibuffer-inactive-mode 375 1%
- run-mode-hooks 375 1%
- run-hooks 375 1%
- yankpad-local-category-to-major-mode 375 1%
- yankpad--categories 375 1%
- yankpad--file-elements 375 1%
- insert-file-contents 316 1%
- org-indent-refresh-maybe 316 1%
- org-indent-add-properties 316 1%
- org-at-item-p 280 1%
- org-list-in-valid-context-p 280 1%
- org-in-block-p 280 1%
- funcall 276 1%
- #<compiled 0x4dbba7b> 268 1%
- org-between-regexps-p 188 0%
- org-in-regexp 32 0%
- funcall 20 0%
#<compiled 0x533db2d> 8 0%
outline-next-heading 44 0%
outline-previous-heading 28 0%
org-indent-set-line-properties 16 0%
- org-element-parse-buffer 52 0%
- org-element--parse-elements 52 0%
- org-element--parse-elements 52 0%
- org-element--parse-elements 36 0%
- org-element--parse-elements 36 0%
- org-element--current-element 28 0%
org-element-paragraph-parser 4 0%
org-element--collect-affiliated-keywords 4 0%
org-element--list-struct 4 0%
- org-element--parse-objects 4 0%
org-element--object-lex 4 0%
- org-element--parse-elements 4 0%
org-element--current-element 4 0%
- org-element--current-element 16 0%
- org-element-headline-parser 12 0%
org-end-of-subtree 4 0%
org-get-limited-outline-regexp 4 0%
- org-mode 7 0%
- org-install-agenda-files-menu 7 0%
- org-agenda-files 7 0%
- mapcar 7 0%
#<compiled 0xac09f3> 7 0%
- redisplay_internal (C function) 27 0%
- #<compiled 0x408127> 23 0%
- apply 23 0%
- redisplay--update-region-highlights 23 0%
- funcall 17 0%
- #<compiled 0x24f542f> 17 0%
- redisplay--update-region-highlight 17 0%
- #<compiled 0x1826f19> 17 0%
apply 17 0%
- eval 4 0%
- list 4 0%
- nyan-create 4 0%
nyan-add-scroll-handler 4 0%
sml/generate-position-help 18 0%
- command-execute 2 0%
- call-interactively 2 0%
delete-backward-char 2 0%
- next-line 347 1%
- funcall 347 1%
- #<compiled 0x470bbab> 347 1%
- line-move 347 1%
- line-move-visual 347 1%
- posn-at-point 160 0%
- eval 160 0%
- sml/generate-minor-modes 140 0%
- sml/fill-width-available 122 0%
- format-mode-line 104 0%
- eval 104 0%
- list 104 0%
- nyan-create 50 0%
nyan-add-scroll-handler 11 0%
create-image 9 0%
nyan-catface-index 6 0%
- rm--mode-list-as-string-list 18 0%
mapcar 13 0%
- list 15 0%
- nyan-create 10 0%
create-image 6 0%
mode-icons--generate-narrow 5 0%
- completing-read-default 248 0%
- read-from-minibuffer 244 0%
- minibuffer-inactive-mode 220 0%
- run-mode-hooks 220 0%
- run-hooks 220 0%
- yankpad-local-category-to-major-mode 220 0%
- yankpad--categories 220 0%
- yankpad--file-elements 220 0%
- org-element-parse-buffer 160 0%
- org-element--parse-elements 160 0%
- org-element--parse-elements 156 0%
- org-element--parse-elements 144 0%
- org-element--parse-elements 132 0%
- org-element--parse-elements 76 0%
- org-element--current-element 36 0%
org-element-item-parser 12 0%
org-get-limited-outline-regexp 8 0%
org-at-heading-p 4 0%
- org-element--parse-elements 20 0%
org-element--parse-elements 12 0%
org-element--current-element 8 0%
- org-element--parse-objects 20 0%
org-element--object-lex 16 0%
- org-element--current-element 36 0%
- org-element--list-struct 24 0%
funcall 24 0%
org-get-limited-outline-regexp 8 0%
org-element-paragraph-parser 4 0%
- org-element--parse-objects 16 0%
org-element--object-lex 16 0%
- org-element--current-element 4 0%
org-element-section-parser 4 0%
- org-element--current-element 12 0%
- org-element-headline-parser 8 0%
org-element--parse-objects 4 0%
org-element--get-node-properties 4 0%
- org-element--current-element 4 0%
- org-element-headline-parser 4 0%
org-end-of-subtree 4 0%
- insert-file-contents 40 0%
- org-indent-refresh-maybe 40 0%
- org-indent-add-properties 40 0%
org-indent-set-line-properties 24 0%
- org-at-item-p 8 0%
- org-list-in-valid-context-p 4 0%
org-in-block-p 4 0%
- org-mode 16 0%
- org-set-regexps-and-options 8 0%
- org-make-options-regexp 8 0%
- regexp-opt 8 0%
- regexp-opt-group 8 0%
- regexp-opt-group 8 0%
- mapcar 4 0%
#<compiled 0x276407> 4 0%
- regexp-opt-group 4 0%
- regexp-opt-group 4 0%
- regexp-opt-group 4 0%
- regexp-opt-group 4 0%
- regexp-opt-group 4 0%
- regexp-opt-group 4 0%
- regexp-opt-group 4 0%
regexp-opt-group 4 0%
- org-install-agenda-files-menu 8 0%
- org-agenda-files 8 0%
- mapcar 8 0%
#<compiled 0xac09f3> 8 0%
- redisplay_internal (C function) 4 0%
- eval 4 0%
- sml/generate-minor-modes 4 0%
sml/fill-width-available 4 0%
- scroll-up-command 116 0%
- scroll-up 39 0%
- eval 39 0%
- sml/generate-minor-modes 31 0%
- sml/fill-width-available 24 0%
- format-mode-line 18 0%
- eval 18 0%
list 18 0%
- rm--mode-list-as-string-list 7 0%
- mapcar 7 0%
- rm--propertize 2 0%
eval 2 0%
list 8 0%
- kill-buffer 90 0%
- server-kill-buffer-query-function 46 0%
- yes-or-no-p 46 0%
- read-key 46 0%
- funcall 46 0%
- #<compiled 0x4d6559d> 46 0%
- read-key-sequence-vector 46 0%
- timer-event-handler 3 0%
- byte-code 3 0%
apply 3 0%
- yes-or-no-p 25 0%
- read-key 25 0%
- funcall 25 0%
- #<compiled 0x54a2c61> 25 0%
- read-key-sequence-vector 25 0%
- timer-event-handler 4 0%
- byte-code 4 0%
apply 4 0%
- server-kill-buffer 19 0%
- server-buffer-done 19 0%
- server-delete-client 19 0%
- delete-process 19 0%
- redisplay_internal (C function) 4 0%
- eval 4 0%
- sml/generate-minor-modes 4 0%
sml/fill-width-available 4 0%
- previous-line 50 0%
- funcall 50 0%
- #<compiled 0x5325b03> 50 0%
- line-move 50 0%
- line-move-visual 34 0%
- posn-at-point 2 0%
- eval 2 0%
- sml/generate-minor-modes 2 0%
rm--mode-list-as-string-list 2 0%
- default-line-height 13 0%
default-font-height 4 0%
- line-move-partial 3 0%
- default-line-height 2 0%
default-font-height 2 0%
- profiler-report-write-profile 18 0%
- profiler-write-profile 18 0%
- write-file 14 0%
- save-buffer 9 0%
- basic-save-buffer 9 0%
- funcall 4 0%
- #<compiled 0x22e131> 4 0%
- run-hooks 4 0%
delete-trailing-whitespace 4 0%
- basic-save-buffer-1 3 0%
basic-save-buffer-2 3 0%
- vc-before-save 2 0%
- byte-code 2 0%
- vc-backend 2 0%
- vc-registered 2 0%
- byte-code 2 0%
- mapc 2 0%
- #<compiled 0x27e217> 2 0%
- vc-call-backend 2 0%
- apply 2 0%
- vc-sccs-registered 2 0%
- vc-default-registered 2 0%
- vc-check-master-templates 2 0%
- mapcar 2 0%
#<compiled 0x27e61d> 2 0%
- set-visited-file-name 5 0%
- apply 5 0%
- ad-Advice-set-visited-file-name 5 0%
- #<compiled 0x22d685> 5 0%
- funcall 5 0%
- #<compiled 0x54d8005> 5 0%
- set-auto-mode 5 0%
assoc-default 5 0%
+ timer-event-handler 1137 4%
+ ... 1063 4%
+ mouse-fixup-help-message 622 2%
+ redisplay_internal (C function) 560 2%
undefined 18 0%
tooltip-hide 1 0%
+ yas--post-command-handler 1 0%
[0] https://github.com/novoid/dot-emacs
[1] https://github.com/novoid/Memacs
--
get mail|git|SVN|photos|postings|SMS|phonecalls|RSS|CSV|XML into Org-mode:
> get Memacs from https://github.com/novoid/Memacs <
Personal Information Management > http://Karl-Voit.at/tags/pim/
Emacs-related > http://Karl-Voit.at/tags/emacs/
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Slow speed of week and month views
2017-08-06 9:01 ` Karl Voit
@ 2017-08-06 9:13 ` Adam Porter
2017-08-06 10:03 ` Karl Voit
2017-08-06 9:26 ` Nicolas Goaziou
1 sibling, 1 reply; 22+ messages in thread
From: Adam Porter @ 2017-08-06 9:13 UTC (permalink / raw)
To: emacs-orgmode
Karl Voit <devnull@Karl-Voit.at> writes:
> With a fairly modified configuration (like mine on [0]) and a large
> set of long Org-mode files I can't publish, it is hard to do
> analysis here. So I can offer to report any performance annoyances
> and anything you need to execute (report) on my side.
It might be helpful if you posted a censored version of your large Org
files somewhere. There's a function by Nicolas that replaces all the
characters with "x", and there's also a function that replaces words
with random words of the same length (that one takes a while to run).
> I just learned about elp-instrument-package. What prefixes are of interest to
> you?
FYI, here's a handy "elp-profile" macro that automatically
de-instruments after running. It shows the top 20 functions by default,
but you can adjust that easily.
https://alphapapa.github.io/emacs-package-dev-handbook/#orgc830139
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Slow speed of week and month views
2017-08-06 9:01 ` Karl Voit
2017-08-06 9:13 ` Adam Porter
@ 2017-08-06 9:26 ` Nicolas Goaziou
2017-08-06 10:18 ` Karl Voit
1 sibling, 1 reply; 22+ messages in thread
From: Nicolas Goaziou @ 2017-08-06 9:26 UTC (permalink / raw)
To: Karl Voit; +Cc: Karl Voit, emacs-orgmode
Karl Voit <devnull@Karl-Voit.at> writes:
> I just learned about elp-instrument-package. What prefixes are of interest to
> you?
"org-" prefix. The nice thing about `elp-instrument-package' is that is
reports the number of times a function is called.
> un-compiled agenda profiler-report:
Thank you. However, there is much cruft going on there. "yankpad-",
"ivy-", "yas-"... Even `profiler-report-write-profile' is registered in
there.
Could you try to minimize as much as possible the non-Org interaction?
You may need to load a minimal config to do so. You could also try to
evaluate the command you want to time with M-: instead of M-x, e.g.
M-: (org-agenda nil "a")
Thanks.
Regards,
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Slow speed of week and month views
2017-08-06 9:13 ` Adam Porter
@ 2017-08-06 10:03 ` Karl Voit
2017-08-06 10:28 ` Adam Porter
0 siblings, 1 reply; 22+ messages in thread
From: Karl Voit @ 2017-08-06 10:03 UTC (permalink / raw)
To: emacs-orgmode
Hi Adam,
* Adam Porter <adam@alphapapa.net> wrote:
> Karl Voit <devnull@Karl-Voit.at> writes:
>
>> With a fairly modified configuration (like mine on [0]) and a large
>> set of long Org-mode files I can't publish, it is hard to do
>> analysis here. So I can offer to report any performance annoyances
>> and anything you need to execute (report) on my side.
>
> It might be helpful if you posted a censored version of your large Org
> files somewhere. There's a function by Nicolas that replaces all the
> characters with "x", and there's also a function that replaces words
> with random words of the same length (that one takes a while to run).
Nicolas, can you provide an URL for this? Sounds interesting.
>> I just learned about elp-instrument-package. What prefixes are of interest to
>> you?
>
> FYI, here's a handy "elp-profile" macro that automatically
> de-instruments after running. It shows the top 20 functions by default,
> but you can adjust that easily.
>
> https://alphapapa.github.io/emacs-package-dev-handbook/#orgc830139
I executed following code below (without changing the prefixes yet
for testing purposes) which resulted in my usual Agenda but no
additional buffer showing any results. M-x elp-results is also
empty.
What did I do the wrong way?
(defmacro elp-profile (times &rest body)
"Call this macro from an Org source block and you'll get a results block
showing which 20 functions were called the most times, how long they
took to run, etc. Set prefixes to a list of strings matching the prefixes
of the functions you want to instrument.
Use it like this:
(elp-profile 10
(goto-char (point-min))
(search-forward \"something\"))
"
(declare (indent defun))
`(let ((prefixes '("string-" "s-" "buffer-" "append" "delq" "map"
"list" "car" "save-" "outline-" "delete-dups"
"sort" "line-" "nth" "concat" "char-to-string"
"rx-" "goto-" "when" "search-" "re-"))
output)
(dolist (prefix prefixes)
(elp-instrument-package prefix))
(dotimes (x ,times)
,@body)
(elp-results)
(elp-restore-all)
(point-min)
(forward-line 20)
(delete-region (point) (point-max))
(setq output (buffer-substring-no-properties (point-min) (point-max)))
(kill-buffer)
(delete-window)
output))
(elp-profile 1
(goto-char (point-min))
(org-agenda-list))
--
get mail|git|SVN|photos|postings|SMS|phonecalls|RSS|CSV|XML into Org-mode:
> get Memacs from https://github.com/novoid/Memacs <
Personal Information Management > http://Karl-Voit.at/tags/pim/
Emacs-related > http://Karl-Voit.at/tags/emacs/
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Slow speed of week and month views
2017-08-06 9:26 ` Nicolas Goaziou
@ 2017-08-06 10:18 ` Karl Voit
2017-08-07 11:41 ` Nicolas Goaziou
0 siblings, 1 reply; 22+ messages in thread
From: Karl Voit @ 2017-08-06 10:18 UTC (permalink / raw)
To: emacs-orgmode
* Nicolas Goaziou <mail@nicolasgoaziou.fr> wrote:
> Karl Voit <devnull@Karl-Voit.at> writes:
>
>> I just learned about elp-instrument-package. What prefixes are of interest to
>> you?
>
> "org-" prefix. The nice thing about `elp-instrument-package' is that is
> reports the number of times a function is called.
Results at the end of this posting.
>> un-compiled agenda profiler-report:
>
> Thank you. However, there is much cruft going on there. "yankpad-",
> "ivy-", "yas-"... Even `profiler-report-write-profile' is registered in
> there.
Yes, this is my configuration ;-)
I'm no expert in interpreting the results but as far as I understood
it, the cruft you mentioned takes only a fraction of CPU time for
the task.
> Could you try to minimize as much as possible the non-Org interaction?
> You may need to load a minimal config to do so. You could also try to
> evaluate the command you want to time with M-: instead of M-x, e.g.
>
> M-: (org-agenda nil "a")
I may take some time to come up with a minimum config and my agenda
files.
However, in case this is much faster compared to my current
situation, this does not help me with my issues and just shows that
Org itself does not have urgent performance issues, right?
org-agenda-list 1 22.456601085 22.456601085
org-agenda-get-day-entries 17 18.255724348 1.0738661381
org-agenda-get-scheduled 17 14.40543005 0.8473782382
org-element--parse-elements 2712 8.0038418899 0.0029512691
org-entry-get 2002 6.3268592120 0.0031602693
org--property-local-values 1937 6.1333810950 0.0031664331
org-is-habit-p 1779 5.9716177949 0.0033567272
org-get-property-block 1943 5.5327713039 0.0028475405
org-back-to-heading 7664 5.1811751059 0.0006760405
org-at-planning-p 2338 4.4562334949 0.0019060023
org-inlinetask-in-task-p 4191 3.4042555110 0.0008122776
org-get-todo-state 2284 3.3749943680 0.0014776682
org-agenda-get-deadlines 17 2.7361401300 0.1609494194
org-agenda-prepare 1 2.200086025 2.200086025
org-agenda-prepare-buffers 1 1.980565276 1.980565276
org-element-parse-buffer 6 1.4980202550 0.2496700425
org-agenda-finalize 1 1.094985093 1.094985093
org-agenda-skip 2545 1.0722660840 0.0004213226
org-end-of-subtree 449 1.0195991870 0.0022708222
org-element--current-element 6040 0.8202829350 0.0001358084
org-get-entries-from-diary 1 0.806067286 0.806067286
org-up-heading-safe 398 0.7662179339 0.0019251706
org-get-tags-at 126 0.7296816199 0.0057911239
org-before-first-heading-p 2036 0.7035860589 0.0003455727
org-agenda-dim-blocked-tasks 1 0.689500952 0.689500952
org-element--parse-objects 4566 0.6892202150 0.0001509461
org-entry-blocked-p 61 0.678698494 0.0111262048
org-agenda-get-blocks 17 0.628517483 0.0369716166
org-outline-level 1353 0.5567370970 0.0004114834
org-add-props 15547 0.5454277439 3.508...e-05
org-element-item-parser 1698 0.5263746370 0.0003099968
org-indent-refresh-maybe 6 0.495835792 0.0826392986
org-indent-add-properties 6 0.4955369260 0.0825894876
org-agenda-get-timestamps 17 0.4623098930 0.0271946995
org-block-todo-from-children-or-siblings-or-parent 61 0.3965410289 0.0065006726
org-refresh-category-properties 17 0.363467201 0.0213804235
org-at-item-p 5646 0.3450254890 6.110...e-05
org-list-in-valid-context-p 1698 0.3091587659 0.0001820723
org-in-block-p 1698 0.3039967379 0.0001790322
org-agenda-mode 1 0.219065373 0.219065373
org-between-regexps-p 6792 0.1952452710 2.874...e-05
org-set-regexps-and-options 23 0.1858347920 0.0080797735
org--setup-collect-keywords 25 0.1807199010 0.0072287960
org-at-heading-p 6015 0.1549813460 2.576...e-05
org-depend-block-todo 45 0.147637119 0.0032808248
org-agenda--timestamp-to-absolute 4282 0.1214312879 2.835...e-05
org-time-string-to-absolute 4282 0.1054320980 2.462...e-05
org-get-limited-outline-regexp 8392 0.0991706369 1.181...e-05
org-in-src-block-p 2481 0.0879872789 3.546...e-05
org-element--object-lex 5148 0.0862918539 1.676...e-05
org-indent-set-line-properties 5832 0.0773937020 1.327...e-05
org-element-at-point 43 0.0534147080 0.0012422025
org-at-date-range-p 167 0.0512554689 0.0003069189
org-element--parse-to 43 0.050396487 0.0011720113
org-find-entry-with-id 4 0.049598946 0.0123997365
org-find-property 4 0.049565889 0.0123914722
org-element-paragraph-parser 2499 0.0472630119 1.891...e-05
org-closest-date 2179 0.0333128859 1.528...e-05
org-in-regexp 6792 0.0328371180 4.834...e-06
org-parse-time-string 4980 0.0325066720 6.527...e-06
org-element--list-struct 204 0.0299346770 0.0001467386
org-agenda-finalize-entries 1 0.028590852 0.028590852
org-element-headline-parser 186 0.0279479120 0.0001502575
org-agenda-format-item 63 0.0225724880 0.0003582934
org-at-property-p 6 0.021528419 0.0035880698
org-agenda-get-sexps 17 0.0213119410 0.0012536435
org-tag-string-to-alist 7 0.019620708 0.0028029582
org-entry-is-done-p 62 0.019182333 0.0003093924
org-list-item-body-column 1698 0.0190441769 1.121...e-05
org-entries-lessp 289 0.0187772820 6.497...e-05
org-entry-properties 65 0.0166800490 0.0002566161
org-in-commented-heading-p 11 0.016132671 0.0014666064
org-element-comment-parser 38 0.0139885649 0.0003681201
org-habit-parse-todo 4 0.013850074 0.0034625185
org-inlinetask-outline-regexp 4191 0.0137324080 3.276...e-06
org-agenda-get-category-icon 63 0.0134784819 0.0002139441
org-element--collect-affiliated-keywords 1858 0.0126514760 6.809...e-06
org-mode 6 0.0117698550 0.0019616425
org-get-priority 59 0.0115445370 0.0001956701
org-agenda-align-tags 1 0.011071635 0.011071635
org-element-link-parser 340 0.0101422319 2.983...e-05
org-entry-is-todo-p 41 0.010028271 0.0002445919
org-element-keyword-parser 275 0.0092091630 3.348...e-05
org-time-string-to-time 694 0.0087923020 1.266...e-05
org-heading-components 15 0.0070980520 0.0004732034
org-get-heading 14 0.006817632 0.0004869737
org-get-indentation 3948 0.0068139819 1.725...e-06
org-item-re 7010 0.0066241309 9.449...e-07
org-agenda-highlight-todo 63 0.0064883529 0.0001029897
org-install-agenda-files-menu 6 0.0058662939 0.0009777156
org-element-section-parser 156 0.0054134160 3.470...e-05
org-agenda-files 9 0.0050733739 0.0005637082
org-get-wdays 2101 0.0049502890 2.356...e-06
org-agenda-new-marker 127 0.0047657869 3.752...e-05
org-activate-links 17 0.004302121 0.0002530659
org-element-drawer-parser 216 0.0039796950 1.842...e-05
org-element-bold-parser 1254 0.0037389459 2.981...e-06
org-element-plain-list-parser 354 0.0034136569 9.643...e-06
org-element-set-contents 7092 0.0033066540 4.662...e-07
org-element-table-cell-parser 1224 0.0031456279 2.569...e-06
org-agenda-skip-eval 4962 0.0031400739 6.328...e-07
org-element-map 6 0.00309839 0.0005163983
org-element-table-row-parser 456 0.0029639309 6.499...e-06
org-element-src-block-parser 42 0.0024836220 5.913...e-05
org-element-table-parser 84 0.0023370089 2.782...e-05
org-check-agenda-file 34 0.0022809730 6.708...e-05
org-habit-insert-consistency-graphs 1 0.002140971 0.002140971
org-make-options-regexp 23 0.0020471070 8.900...e-05
org-date-to-gregorian 306 0.0020049500 6.552...e-06
org-not-nil 3902 0.0019919079 5.104...e-07
org-mark-ring-push 2 0.001923639 0.0009618195
org-element--get-node-properties 186 0.0016896940 9.084...e-06
org-get-category 63 0.0016745019 2.657...e-05
org-remove-uninherited-tags 250 0.0010946129 4.378...e-06
org-agenda-fix-displayed-tags 63 0.0010371940 1.646...e-05
org-get-agenda-file-buffer 34 0.00101761 2.992...e-05
org-today 91 0.000911803 1.001...e-05
org-find-base-buffer-visiting 34 0.0008710779 2.561...e-05
org-get-repeat 4 0.0008627859 0.0002156964
org-split-string 216 0.0008330470 3.856...e-06
org-element-quote-block-parser 30 0.000754545 2.51515e-05
org-habit-build-graph 4 0.000723021 0.0001807552
org-link-expand-abbrev 84 0.0006686299 7.959...e-06
org-get-scheduled-time 4 0.000649615 0.0001624037
org-element-italic-parser 156 0.000549965 3.525...e-06
org-element-subscript-parser 90 0.000514684 5.718...e-06
org-element--get-time-properties 186 0.0004972190 2.673...e-06
org-find-invisible-foreground 6 0.0004684680 7.807...e-05
org-agenda-today-p 35 0.0004448479 1.270...e-05
org-agenda-quit 1 0.000391807 0.000391807
org-agenda--quit 1 0.000379794 0.000379794
org-set-startup-visibility 6 0.0003552530 5.920...e-05
org-unescape-code-in-string 42 0.0003384670 8.058...e-06
org-indent-mode 6 0.000272112 4.5352e-05
org-indent-notify-modified-headline 6 0.00027114 4.519e-05
org-delete-all 256 0.0002682720 1.047...e-06
org-setup-filling 6 0.000266367 4.439...e-05
org-get-time-of-day 24 0.0002553330 1.063...e-05
org-add-prop-inherited 150 0.0002186310 1.457...e-06
org-reduced-level 264 0.0002176899 8.245...e-07
org-agenda-fontify-priorities 1 0.00018978 0.00018978
org-tag-alist-to-groups 23 0.00018918 8.225...e-06
org-downcase-keep-props 119 0.00018673 1.569...e-06
org-element-latex-fragment-parser 48 0.0001767690 3.682...e-06
org-refresh-effort-properties 6 0.0001657769 2.762...e-05
org-get-todo-face 61 0.000163882 2.686...e-06
org-string-nw-p 94 0.0001472979 1.566...e-06
org-refresh-properties 6 0.0001372320 2.287...e-05
org-macro-initialize-templates 6 0.0001306730 2.177...e-05
org-extract-log-state-settings 42 0.0001298379 3.091...e-06
org-element--cache-put 310 0.0001260349 4.065...e-07
org-file-menu-entry 119 0.0001125649 9.459...e-07
org-agenda-add-time-grid-maybe 1 0.000109388 0.000109388
org-replace-escapes 4 0.000105688 2.6422e-05
org-element-timestamp-parser 12 0.0001047390 8.72825e-06
org-agenda-prepare-window 1 9.9871e-05 9.9871e-05
org-current-level 6 9.577...e-05 1.596...e-05
org-cycle-hide-archived-subtrees 6 9.5675e-05 1.594...e-05
org-set-font-lock-defaults 6 9.310...e-05 1.551...e-05
org-indent-initialize-agent 9 8.4457e-05 9.384...e-06
org-link-get-parameter 108 7.829...e-05 7.249...e-07
org-macro--collect-macros 6 7.703...e-05 1.283...e-05
org-element-underline-parser 12 7.525e-05 6.270...e-06
org-element-fixed-width-parser 6 7.4863e-05 1.247...e-05
org-cycle-show-empty-lines 6 7.3664e-05 1.227...e-05
org-diary-default-entry 1 7.0578e-05 7.0578e-05
org-habit-get-faces 112 6.4307e-05 5.741...e-07
org-agenda-cleanup-fancy-diary 1 6.356e-05 6.356e-05
org-element-strike-through-parser 6 6.255...e-05 1.042...e-05
org-agenda-reset-markers 2 6.045e-05 3.0225e-05
org-add-to-diary-list 1 6.0132e-05 6.0132e-05
org-element-property 116 5.776...e-05 4.979...e-07
org-element-footnote-reference-parser 6 5.7708e-05 9.618e-06
org-modify-diary-entry-string 1 5.1566e-05 5.1566e-05
org-habit-get-priority 4 4.9648e-05 1.2412e-05
org-hide-archived-subtrees 6 4.606...e-05 7.678...e-06
org-agenda-format-date-aligned 1 4.2942e-05 4.2942e-05
org-update-radio-target-regexp 6 3.823...e-05 6.372...e-06
org-compile-prefix-format 1 3.7413e-05 3.7413e-05
org-remove-keyword-keys 6 3.4821e-05 5.8035e-06
org-setup-comments-handling 6 2.999...e-05 4.999...e-06
org-cycle-hide-drawers 6 2.991...e-05 4.985...e-06
org-element-statistics-cookie-parser 6 2.7851e-05 4.641...e-06
org-agenda-get-day-face 1 2.6736e-05 2.6736e-05
org-element-type 43 2.670...e-05 6.210...e-07
org-habit-duration-to-days 5 2.6443e-05 5.288...e-06
org-overview 6 2.4111e-05 4.0185e-06
org-set-visibility-according-to-property 6 2.3298e-05 3.883e-06
org-skip-whitespace 6 2.1282e-05 3.547e-06
org-compute-latex-and-related-regexp 6 1.661...e-05 2.768...e-06
org-face-from-face-or-color 63 1.6135e-05 2.561...e-07
org-assign-fast-keys 6 1.3769e-05 2.294...e-06
org-days-to-iso-week 1 1.3219e-05 1.3219e-05
org-element-cache-reset 6 9.770...e-06 1.628...e-06
org-remove-flyspell-overlays-in 16 8.941e-06 5.588125e-07
org-check-running-clock 6 6.843e-06 1.140...e-06
org-load-modules-maybe 6 5.871e-06 9.785e-07
org-agenda-set-mode-name 1 5.861e-06 5.861e-06
org-unhighlight 2 5.846e-06 2.923e-06
org-before-change-function 6 4.290...e-06 7.15e-07
org-property-inherit-p 6 4.238...e-06 7.064...e-07
org-unbracket-string 2 4.196e-06 2.098e-06
org-agenda-update-agenda-type 2 3.555e-06 1.7775e-06
org-time-stamp-format 8 3.013e-06 3.76625e-07
org-table-sticky-header--scroll-function 1 2.138e-06 2.138e-06
org-agenda-ndays-to-span 2 1.525e-06 7.625e-07
org-agenda-fit-window-to-buffer 1 1.452e-06 1.452e-06
org-agenda-mark-clocking-task 1 1.257e-06 1.257e-06
org-set-sorting-strategy 1 1.201e-06 1.201e-06
org-agenda-span-name 1 1.092e-06 1.092e-06
org-font-lock-add-tag-faces 1 1.031e-06 1.031e-06
org-agenda-span-to-ndays 1 1.02e-06 1.02e-06
org-agenda-use-sticky-p 1 1.018e-06 1.018e-06
--
get mail|git|SVN|photos|postings|SMS|phonecalls|RSS|CSV|XML into Org-mode:
> get Memacs from https://github.com/novoid/Memacs <
Personal Information Management > http://Karl-Voit.at/tags/pim/
Emacs-related > http://Karl-Voit.at/tags/emacs/
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Slow speed of week and month views
2017-08-06 10:03 ` Karl Voit
@ 2017-08-06 10:28 ` Adam Porter
0 siblings, 0 replies; 22+ messages in thread
From: Adam Porter @ 2017-08-06 10:28 UTC (permalink / raw)
To: emacs-orgmode
Karl Voit <devnull@Karl-Voit.at> writes:
>> It might be helpful if you posted a censored version of your large Org
>> files somewhere. There's a function by Nicolas that replaces all the
>> characters with "x", and there's also a function that replaces words
>> with random words of the same length (that one takes a while to run).
>
> Nicolas, can you provide an URL for this? Sounds interesting.
I have it saved, here you go:
#+BEGIN_SRC elisp
(defun scramble-contents ()
(interactive)
(let ((tree (org-element-parse-buffer)))
(org-element-map tree '(code comment comment-block example-block fixed-width
keyword link node-property plain-text verbatim)
(lambda (obj)
(cl-case (org-element-type obj)
((code comment comment-block example-block fixed-width keyword
node-property verbatim)
(let ((value (org-element-property :value obj)))
(org-element-put-property
obj :value (replace-regexp-in-string "[[:alnum:]]" "x" value))))
(link
(unless (string= (org-element-property :type obj) "radio")
(org-element-put-property obj :raw-link "http://orgmode.org")))
(plain-text
(org-element-set-element
obj (replace-regexp-in-string "[[:alnum:]]" "x" obj)))))
nil nil nil t)
(let ((buffer (get-buffer-create "*Scrambled text*")))
(with-current-buffer buffer
(insert (org-element-interpret-data tree))
(goto-char (point-min)))
(switch-to-buffer buffer))))
#+END_SRC
The other one can be found here:
https://gist.github.com/alphapapa/2d141b60ccbe92f1b90000debde2ddd2
> I executed following code below (without changing the prefixes yet
> for testing purposes) which resulted in my usual Agenda but no
> additional buffer showing any results. M-x elp-results is also
> empty.
>
> What did I do the wrong way?
>
> (defmacro elp-profile (times &rest body)
> "Call this macro from an Org source block and you'll get a results block
> showing which 20 functions were called the most times, how long they
> took to run, etc. Set prefixes to a list of strings matching the prefixes
> of the functions you want to instrument.
Did you read the docstring? ;) It's intended to be run from an Org
source block with Babel. Sorry, I should have emphasized that. You can
rip out the lines that mess with the window and buffer if you just want
to run it directly and leave the results buffer open.
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [Orgmode] Slow speed of week and month views
2017-08-06 7:54 ` Karl Voit
@ 2017-08-06 13:47 ` John Kitchin
0 siblings, 0 replies; 22+ messages in thread
From: John Kitchin @ 2017-08-06 13:47 UTC (permalink / raw)
To: Karl Voit; +Cc: emacs-orgmode
Karl Voit writes:
> Hello John,
>
> Great to read your thoughts on the topic - I am a huge admirer of
> your work and we both seem to cope with similar issues with
> Org-mode.
Thanks! I am an equal admirer of the Memacs package. I think we share
some common interests there. I came across the mother of all demos
recently: http://dougengelbart.org/events/1968-demo-highlights.html. It
was inspired by the early Memex ideas.
>
> * John Kitchin <jkitchin@andrew.cmu.edu> wrote:
>>
>> One is to use the new dynamic module capability to write an org parser in
>> C, or a dedicated agenda function, which would presumably be faster than in
>> elisp. This seems hard, and for me would certainly be a multiyear project
>> I am sure! The downside of this is the need to compile the module. I don't
>> know how easy it would be to make this work across platforms with the
>> relatively easy install org-mode currently has. This could have a side
>> benefit though of a c-lib that could be used by others to expand where
>> org-mode is used.
>
> I'm not a fan of C at all but having the parser in C with the
> possibility to use this parser for external tools as well sounds
> awesome to me. After all, I've written a primitive parser for a
> sub-set of Org-mode for https://github.com/novoid/lazyblorg using
> Python.
I am also not so fond of C, but I am starting to learn it these days. I
have had several use cases where I either generate or want to consume
org in something other than Emacs. I don't know that C is the right
thing to use, maybe a Cython library would work as well with a very thin
C interface. It is on my bucket list to learn how to do something like
that.
>
>> The other way that might work is to rely more heavily on a cached version
>> of the files, perhaps in a different format than elisp, that is faster to
>> work with. The approach I have explored in this is to index org files into
>> a sqlite database. The idea then would be to generate the agenda from a sql
>> query. I use something like this already to "find stuff in orgmode
>> anywhere". One of the reasons I wrote this is the org-agenda list of files
>> isn't practical for me because my files are so scattered on my file system.
>> I had a need to be able to find TODOs in research projects in a pretty wide
>> range of locations.
>>
>> The code I use is at
>> https://github.com/jkitchin/scimax/blob/master/org-db.el, and from one
>> database I can find headlines, contacts, locations, TODO headlines across
>> my file system, all the files that contain a particular link, and my own
>> recent org files.
>
> I didn't try org-db.el yet. So far, I survived using "git grep" and
> counsel-grep [0]
The main limitation with those for me is I don't know how you would find
a headline with an EMAIL property and some tag, for example, since those
are on different lines.
>
>> I am moderately motivated to switch from sqlite to MongoDB
>
> Is org-db.el your standard way of accessing informations or do you
> use it only for occasional searches where you assume that the usual
> methods would be slow?
I think of it as my extended memory. For the buffers that are currently
open/my agenda files/recent files/project files, I usually use the
regular tools to move around and search. org-db is more for jumping to a
headline I had open last month for example, or for files that are not in
my agenda. Or to get a list of headlines with EMAIL properties and some
tag combination from any org-file I have ever opened. This is just a
query (https://github.com/jkitchin/scimax/blob/master/org-db.el#L499) on
the sqlite db, and then I can build a completion command in helm or ivy
to select them. (My elisp cached contacts code is what I usually use
https://github.com/jkitchin/scimax/blob/master/contacts.el). I don't
claim it is optimal, but it handles about 6200 contacts from 32
org-files easily!
>
>> The main point of the database was to get a query language, persistence and
>> good performance. I have also used caches to speed up using bibtex files,
>> and my org-contacts with reasonable performance. These have been all elisp,
>> with no additional dependencies. Maybe one could do something similar to
>> keep an agenda cache that is persistent and updated via hook functions.
>
> Oh yeah. My org-contacts were unusable without at least some minor
> performance improvements as well. Most important to me: improving
> manipulation of properties using [1].
The other reason I wanted org-db is also performance related. I have
close to 3400 (and growing) org files indexed in it and I want to search
across them, but I don't need them in my agenda list. I want a
structured search, e.g. to search specifically for headlines with
properties and tags, or links, or by file tags, src block, etc. I
haven't gotten completely there yet,
Another db approach is described here:
https://github.com/wvxvw/sphinx-mode. It is more comprehensive than my
sqlite implementation, and uses Sphinx on top of MySQL I think. I
haven't worked with it though.
>
> For example, org-set-property takes almost 20 seconds to give me its
> interactive input line in my main Org-mode file. This is a no-go.
> [1] helped me here a lot.
>
> [0] https://github.com/novoid/dot-emacs/blob/master/config.org#optimizing-search-methods
> [1] https://github.com/novoid/dot-emacs/blob/master/config.org#my-org-region-to-property--my-map-p
--
Professor John Kitchin
Doherty Hall A207F
Department of Chemical Engineering
Carnegie Mellon University
Pittsburgh, PA 15213
412-268-7803
@johnkitchin
http://kitchingroup.cheme.cmu.edu
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Slow speed of week and month views
2017-08-06 10:18 ` Karl Voit
@ 2017-08-07 11:41 ` Nicolas Goaziou
0 siblings, 0 replies; 22+ messages in thread
From: Nicolas Goaziou @ 2017-08-07 11:41 UTC (permalink / raw)
To: Karl Voit; +Cc: Karl Voit, emacs-orgmode
Hello,
Karl Voit <devnull@Karl-Voit.at> writes:
> Results at the end of this posting.
Thank you.
I assume you have around 17 agenda files, use a single day view and have
much more SCHEDULED than DEADLINE? Is it right?
> I may take some time to come up with a minimum config and my agenda
> files.
I suggest to use
M-: (org-agenda nil "a")
as a first step.
> However, in case this is much faster compared to my current
> situation, this does not help me with my issues and just shows that
> Org itself does not have urgent performance issues, right?
No worries. It will still be excruciatingly slow.
Regards,
--
Nicolas Goaziou
^ permalink raw reply [flat|nested] 22+ messages in thread
end of thread, other threads:[~2017-08-07 11:42 UTC | newest]
Thread overview: 22+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-08-04 15:14 [Orgmode] Slow speed of week and month views Christoph Groth
2017-08-05 3:07 ` Adam Porter
2017-08-05 21:09 ` Karl Voit
2017-08-05 22:17 ` John Kitchin
2017-08-05 22:33 ` Nicolas Goaziou
2017-08-06 2:28 ` [Orgmode] " Tim Cross
2017-08-06 2:36 ` Adam Porter
2017-08-06 7:54 ` Karl Voit
2017-08-06 13:47 ` John Kitchin
2017-08-05 22:35 ` Nicolas Goaziou
2017-08-06 8:00 ` Karl Voit
2017-08-06 8:15 ` Nicolas Goaziou
2017-08-06 9:01 ` Karl Voit
2017-08-06 9:13 ` Adam Porter
2017-08-06 10:03 ` Karl Voit
2017-08-06 10:28 ` Adam Porter
2017-08-06 9:26 ` Nicolas Goaziou
2017-08-06 10:18 ` Karl Voit
2017-08-07 11:41 ` Nicolas Goaziou
-- strict thread matches above, loose matches on Subject: below --
2010-02-16 19:58 Matt Lundin
2010-02-21 7:37 ` Carsten Dominik
2010-02-21 12:34 ` Matthew Lundin
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.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).