From mboxrd@z Thu Jan 1 00:00:00 1970 From: Carsten Dominik Subject: Re: [PATCH] Optimize org-habit-parse-todo Date: Tue, 25 Jan 2011 07:21:49 +0100 Message-ID: <3410A977-FA48-4EF3-9868-13A932FFD1DB@gmail.com> References: <87mxmxys27.fsf@fastmail.fm> Mime-Version: 1.0 (Apple Message framework v936) Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Return-path: Received: from [140.186.70.92] (port=58194 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PhcHu-0007eh-Vc for emacs-orgmode@gnu.org; Tue, 25 Jan 2011 01:22:01 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PhcHq-0005Bk-U2 for emacs-orgmode@gnu.org; Tue, 25 Jan 2011 01:21:58 -0500 Received: from mail-ey0-f169.google.com ([209.85.215.169]:42650) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PhcHq-0005BS-PT for emacs-orgmode@gnu.org; Tue, 25 Jan 2011 01:21:54 -0500 Received: by eyh6 with SMTP id 6so2280404eyh.0 for ; Mon, 24 Jan 2011 22:21:53 -0800 (PST) In-Reply-To: List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Carsten Dominik Cc: Matt Lundin , Org Mode On Jan 25, 2011, at 7:01 AM, Carsten Dominik wrote: > Hi Matt > > Hmmm, > > this looks like a very important optimisation indeed. > I am just wondering if it is always safe to do it like > this. Have you checked if this is influenced by > org-reverse-notes-order or similar things? I am sorry, I see now that this is done correctly. One request, can you resubmit and test for the count first, before doing the search? Just another very minor optimization. - Carsten > > - Carsten > > On Jan 19, 2011, at 1:39 PM, Matt Lundin wrote: > >> * lisp/org-habit.el: (org-habit-parse-todo) Don't parse more days >> than >> needed. >> >> When constructing a consistency graph, org-habit (with this patch) >> will >> stop searching for timestamps when the number of matches exceeds the >> span of time displayed in the graph. This can produce a significant >> speedup in agenda construction, especially for entries with many >> logbook >> entries. Previously, org-habit would parse all logbook timestamps, >> even >> if they numbered in the hundreds. >> >> Before: >> org-habit-parse-todo 33 0.7357430000 0.0222952424 >> After: >> org-habit-parse-todo 33 0.11648 0.0035296969 >> >> This patch respects the value of org-log-states-order-reversed, but >> assumes that users do not frequently change its value (and thus the >> order of their log entries). >> --- >> lisp/org-habit.el | 16 ++++++++++++---- >> 1 files changed, 12 insertions(+), 4 deletions(-) >> >> diff --git a/lisp/org-habit.el b/lisp/org-habit.el >> index b174a1f..a05dd1b 100644 >> --- a/lisp/org-habit.el >> +++ b/lisp/org-habit.el >> @@ -170,10 +170,18 @@ This list represents a \"habit\" for the rest >> of this module." >> habit-entry scheduled-repeat)) >> (setq deadline (+ scheduled (- dr-days sr-days)))) >> (org-back-to-heading t) >> - (while (re-search-forward "- State \"DONE\".*\\[\\([^]]+\\)\ >> \]" end t) >> - (push (time-to-days >> - (org-time-string-to-time (match-string-no-properties 1))) >> - closed-dates)) >> + (let* ((maxdays (+ org-habit-preceding-days org-habit- >> following-days)) >> + (reversed org-log-states-order-reversed) >> + (search (if reversed 're-search-forward 're-search-backward)) >> + (limit (if reversed end (point))) >> + (count 0)) >> + (unless reversed (goto-char end)) >> + (while (and (funcall search "- State \"DONE\".*\\[\\([^]]+\\)\\]" >> limit t) >> + (< count maxdays)) >> + (push (time-to-days >> + (org-time-string-to-time (match-string-no-properties 1))) >> + closed-dates) >> + (setq count (1+ count)))) >> (list scheduled sr-days deadline dr-days closed-dates)))) >> >> (defsubst org-habit-scheduled (habit) >> -- >> 1.7.3.5 >> >> >> _______________________________________________ >> Emacs-orgmode mailing list >> Please use `Reply All' to send replies to the list. >> Emacs-orgmode@gnu.org >> http://lists.gnu.org/mailman/listinfo/emacs-orgmode >