Ihor Radchenko <yanta...@posteo.net> writes: > > However, please move the obsolete function definition to org-compat > instead of removing it completely. We do it to avoid unexpected breakage > for people and libraries who happen to use this public function.
Done. See attached > Also, with the old approach, if you observe slowdowns, you likely have > some property being calculated slowly (like BLOCKED in my case). Do you > happen to know which property is it for your setup? According to my profiler, I think it's using 30% of the CPU time during my custom org-clock-sum just to get ITEM. I suppose it's because it thinks it has to grab and cache everything when all I'm after is ITEM. I don't see anything else that looks suspicious in the profiler so I suspect you're seeing a much worse case then I am. I'll copy paste my previous performance numbers here again just so you can see my slowdown is only between 1.5x and 3x. org-cached-entry-get 1st run: 26.868990287 2nd run: 16.043983143 org-entry-get 1st run: 18.209056578 2nd run: 5.003186764
>From 5d9cef1250ef1eb656b84d3168ebfecb0e9c9c5c Mon Sep 17 00:00:00 2001 From: Morgan Smith <morgan.j.sm...@outlook.com> Date: Wed, 1 May 2024 12:36:40 -0400 Subject: [PATCH] Obsolete `org-cached-entry-get' in favor of `org-entry-get' We have a better performing cache mechanism in `org-entry-get'. * lisp/org.el (org-make-tags-matcher): Replace uses of `org-cached-entry-get' with `org-entry-get'. (org-cached-entry-get): Move to ... * lisp/org-compat.el (org-cached-entry-get): ... here. Obsolete in favor of `org-entry-get'. --- lisp/org-compat.el | 20 ++++++++++++++++++++ lisp/org.el | 20 ++------------------ 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/lisp/org-compat.el b/lisp/org-compat.el index 11eb905ee..b73cfc910 100644 --- a/lisp/org-compat.el +++ b/lisp/org-compat.el @@ -649,6 +649,26 @@ Counting starts at 1." (define-obsolete-variable-alias 'org-plantuml-executable-args 'org-plantuml-args "Org 9.6") +(defvar org-cached-props nil) +(defun org-cached-entry-get (pom property) + (if (or (eq t org-use-property-inheritance) + (and (stringp org-use-property-inheritance) + (let ((case-fold-search t)) + (string-match-p org-use-property-inheritance property))) + (and (listp org-use-property-inheritance) + (member-ignore-case property org-use-property-inheritance))) + ;; Caching is not possible, check it directly. + (org-entry-get pom property 'inherit) + ;; Get all properties, so we can do complicated checks easily. + (cdr (assoc-string property + (or org-cached-props + (setq org-cached-props (org-entry-properties pom))) + t)))) + +(make-obsolete 'org-cached-entry-get + "Performs badly. Instead use `org-entry-get' with the argument INHERIT set to `selective'" + "9.7") + (defconst org-latex-line-break-safe "\\\\[0pt]" "Linebreak protecting the following [...]. diff --git a/lisp/org.el b/lisp/org.el index 2d1a2055f..36b52b0ab 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -11480,22 +11480,6 @@ are also TODO tasks." (defalias 'org-tags-sparse-tree 'org-match-sparse-tree) -(defvar org-cached-props nil) -(defun org-cached-entry-get (pom property) - (if (or (eq t org-use-property-inheritance) - (and (stringp org-use-property-inheritance) - (let ((case-fold-search t)) - (string-match-p org-use-property-inheritance property))) - (and (listp org-use-property-inheritance) - (member-ignore-case property org-use-property-inheritance))) - ;; Caching is not possible, check it directly. - (org-entry-get pom property 'inherit) - ;; Get all properties, so we can do complicated checks easily. - (cdr (assoc-string property - (or org-cached-props - (setq org-cached-props (org-entry-properties pom))) - t)))) - (defun org-global-tags-completion-table (&optional files) "Return the list of all tags in all agenda buffer/files. Optional FILES argument is a list of files which can be used @@ -11670,7 +11654,7 @@ See also `org-scan-tags'." ("CATEGORY" '(org-get-category (point))) ("TODO" 'todo) - (p `(org-cached-entry-get nil ,p)))) + (p `(org-entry-get (point) ,p 'selective)))) ;; Determine operand (aka. property ;; value). (pv (match-string 8 term)) @@ -11707,7 +11691,7 @@ See also `org-scan-tags'." (setq term rest))) (push `(and ,@tagsmatcher) orlist) (setq tagsmatcher nil)) - (setq tagsmatcher `(progn (setq org-cached-props nil) (or ,@orlist))))) + (setq tagsmatcher `(or ,@orlist)))) ;; Make the TODO matcher. (when (org-string-nw-p todomatch) -- 2.41.0