emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* 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; 19+ 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] 19+ 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; 19+ 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] 19+ 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; 19+ 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] 19+ 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; 19+ 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] 19+ 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; 19+ 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] 19+ 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; 19+ 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] 19+ 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; 19+ 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] 19+ 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; 19+ 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] 19+ 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; 19+ 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] 19+ 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; 19+ 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] 19+ 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; 19+ 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] 19+ 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; 19+ 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] 19+ 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; 19+ 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] 19+ 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; 19+ 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] 19+ 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; 19+ 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] 19+ 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; 19+ 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] 19+ 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; 19+ 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] 19+ 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; 19+ 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] 19+ 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; 19+ 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] 19+ messages in thread

end of thread, other threads:[~2017-08-07 11:42 UTC | newest]

Thread overview: 19+ 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

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).