From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matt Lundin Subject: Agenda very slow with org-agenda-dimmed-blocked-tasks Date: Tue, 11 Aug 2015 06:31:05 -0500 Message-ID: <87d1yujc3q.fsf@fastmail.fm> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:33814) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZP7m2-0000tD-ND for emacs-orgmode@gnu.org; Tue, 11 Aug 2015 07:31:21 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZP7ls-0003Lr-AK for emacs-orgmode@gnu.org; Tue, 11 Aug 2015 07:31:18 -0400 Received: from out2-smtp.messagingengine.com ([66.111.4.26]:38541) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZP7lr-0003LB-Vi for emacs-orgmode@gnu.org; Tue, 11 Aug 2015 07:31:08 -0400 Received: from archthink (c-50-172-132-15.hsd1.il.comcast.net [50.172.132.15]) by mail.messagingengine.com (Postfix) with ESMTPA id AFCB06801BA for ; Tue, 11 Aug 2015 07:31:05 -0400 (EDT) List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Org Mode --=-=-= Content-Type: text/plain The recent commit 570b1935e7db9913a2eb9084b6f1adc0d07a36cc dramatically slowed down the generation of the agenda on my machine when org-agenda-dimmed-blocked-tasks and org-enforce-todo-dependencies are both set to t. There seem to be an extraordinary number of calls to org-entry-blocked-p and org-entry-get. Here's are the first several lines of profiling information from a custom agenda command that has both of the settings above enabled: --8<---------------cut here---------------start------------->8--- org-agenda-redo 1 7.827560172 7.827560172 org-agenda-run-series 2 7.8218210500 3.9109105250 org-let 3 7.20083237 2.4002774566 org-agenda-finalize 4 6.844503497 1.7111258742 org-agenda-dim-blocked-tasks 1 6.699442204 6.699442204 org-entry-blocked-p 9935 5.7348475660 0.0005772367 org-block-todo-from-children-or-siblings-or-parent 9935 4.0232743180 0.0004049596 org-entry-get 20138 1.5084527930 7.490...e-05 org-get-todo-state 47077 1.2677654579 2.692...e-05 org-entry-is-done-p 29892 1.0612141059 3.550...e-05 org-back-to-heading 89176 0.7644088809 8.571...e-06 org-property--local-values 10203 0.6607707660 6.476...e-05 org-outline-level 45939 0.6526133970 1.420...e-05 org-entry-is-todo-p 16970 0.6425987680 3.786...e-05 [snip] --8<---------------cut here---------------end--------------->8--- By way of comparison here is the profiling information for the same custom agenda command prior to the commit. Notice the 139 calls to org-agenda-blocked-p compared to the 9935 above: --8<---------------cut here---------------start------------->8--- org-agenda-redo 1 2.16555618 2.16555618 org-agenda-run-series 1 2.164402155 2.164402155 org-let 2 1.563410317 0.7817051585 org-agenda-finalize 4 1.212033806 0.3030084515 org-agenda-dim-blocked-tasks 1 1.170204698 1.170204698 org-let2 3 0.591343907 0.1971146356 org-agenda-prepare 4 0.3530507439 0.0882626859 org-agenda-prepare-buffers 1 0.327547542 0.327547542 org-agenda-list-stuck-projects 1 0.326917219 0.326917219 org-tags-view 1 0.326905634 0.326905634 org-scan-tags 50 0.3165784299 0.0063315685 org-todo-list 1 0.225206383 0.225206383 org-set-regexps-and-options 50 0.198799971 0.0039759994 org--setup-collect-keywords 50 0.1926802859 0.0038536057 org-agenda-finalize-entries 3 0.183284111 0.0610947036 org-element-at-point 100 0.1775049539 0.0017750495 org-element--parse-to 100 0.174980767 0.0017498076 org-agenda-highlight-todo 157 0.1738833260 0.0011075371 org-element--cache-put 101 0.165917795 0.0016427504 org-agenda-get-day-entries 100 0.063475662 0.0006347566 org-refresh-category-properties 50 0.045959423 0.0009191884 org-agenda-list 1 0.03918709 0.03918709 org-refresh-properties 100 0.034035472 0.0003403547 org-agenda-get-todos 50 0.033929208 0.0006785841 org-entry-blocked-p 139 0.0336150219 0.0002418346 org-outline-level 3906 0.0276959979 7.090...e-06 org-refresh-stats-properties 50 0.0250132949 0.0005002658 org-block-todo-from-children-or-siblings-or-parent 139 0.0247768829 0.0001782509 org-agenda-get-deadlines 50 0.0235243889 0.0004704877 org-get-tags-at 308 0.0202068740 6.560...e-05 org-refresh-effort-properties 50 0.018845043 0.0003769008 org-get-priority 157 0.014716273 9.373...e-05 org-up-heading-safe 236 0.0143668880 6.087...e-05 org-get-todo-state 853 0.0134622469 1.578...e-05 org-agenda-mode 1 0.012866926 0.012866926 org-agenda-align-tags 1 0.011609398 0.011609398 org-agenda-skip-eval 680 0.0115281949 1.695...e-05 org-agenda-skip-entry-when-regexp-matches-in-subtree 125 0.0108022420 8.641...e-05 org-entry-get 145 0.0084927020 5.857...e-05 --8<---------------cut here---------------end--------------->8--- Minimal recipe to replicate: a) Config file --8<---------------cut here---------------start------------->8--- --=-=-= Content-Type: application/emacs-lisp Content-Disposition: inline; filename=minimal.el Content-Transfer-Encoding: quoted-printable (add-to-list 'load-path "~/org-mode/lisp") (add-to-list 'load-path "~/org-mode/contrib/lisp") (setq org-enforce-todo-dependencies t) (setq org-agenda-dim-blocked-tasks t) (setq org-agenda-files '("~/test.org")) --=-=-= Content-Type: text/plain --8<---------------cut here---------------end--------------->8--- - /usr/bin/emacsclient -Q -l ~/config/minimal.el b) Create ~/test.org and enter the following tree 10 times: --8<---------------cut here---------------start------------->8--- * TODO A blocked task ** TODO A task --8<---------------cut here---------------end--------------->8--- c) Run the following commands - M-x org-agenda t - M-x elp-instrument-package RET org - M-x org-agenda-redo Here are the profiling results with the commit: --=-=-= Content-Type: text/plain Content-Disposition: inline; filename=minimal-example-blocked-tasks-before-commit.txt org-agenda-redo 1 0.075783146 0.075783146 org-let 1 0.074308752 0.074308752 org-todo-list 1 0.074301293 0.074301293 org-agenda-finalize-entries 1 0.060647768 0.060647768 org-entries-lessp 40 0.0590289540 0.0014757238 org-agenda-get-day-entries 1 0.00579922 0.00579922 org-agenda-get-todos 1 0.005716737 0.005716737 org-agenda-finalize 1 0.003920996 0.003920996 org-agenda-dim-blocked-tasks 1 0.002686523 0.002686523 org-entry-blocked-p 20 0.0023204930 0.0001160246 org-agenda-fit-window-to-buffer 1 0.002024101 0.002024101 org-fit-window-to-buffer 1 0.001988932 0.001988932 org-get-tags-at 40 0.0018471419 4.617...e-05 org-block-todo-from-children-or-siblings-or-parent 20 0.001525567 7.627835e-05 org-agenda-format-item 20 0.001350015 6.750075e-05 org-agenda-prepare 1 0.001326156 0.001326156 org-up-heading-safe 80 0.0013012599 1.626575e-05 org-agenda-highlight-todo 20 0.001223346 6.11673e-05 org-entry-get 30 0.0009493300 3.164...e-05 org-outline-level 170 0.0008719429 5.129...e-06 org-back-to-heading 230 0.000703085 3.056...e-06 org-property--local-values 30 0.000674644 2.248...e-05 org-get-property-block 30 0.0006162890 2.054...e-05 org-trim 40 0.000530127 1.325...e-05 org-em 700 0.0005297579 7.567...e-07 org-get-priority 20 0.00051482 2.574...e-05 org-agenda-prepare-buffers 1 0.000484229 0.000484229 org-get-todo-state 40 0.0003871889 9.679...e-06 org-add-props 60 0.000343512 5.7252e-06 org-agenda-entry-get-agenda-timestamp 20 0.0003147379 1.57369e-05 org-agenda-skip 20 0.000289489 1.447...e-05 org-agenda-mode 1 0.000254148 0.000254148 org-agenda-new-marker 20 0.0002131759 1.065...e-05 org-refresh-category-properties 1 0.000135219 0.000135219 org-before-first-heading-p 30 0.000129829 4.327...e-06 org-agenda-files 3 0.0001217309 4.057...e-05 org-cmp-values 40 0.000107732 2.6933e-06 org-entry-is-done-p 10 0.0001061900 1.061...e-05 org-cmp-category 40 9.609...e-05 2.402...e-06 org-get-todo-face 20 9.441...e-05 4.720...e-06 org-entry-is-todo-p 10 9.056e-05 9.056e-06 org-set-regexps-and-options 1 8.8796e-05 8.8796e-05 org-get-heading 10 8.3972e-05 8.3972e-06 org-get-time-of-day 20 8.2655e-05 4.13275e-06 org-unhighlight 2 7.8921e-05 3.94605e-05 org-get-category 20 7.8017e-05 3.90085e-06 org-agenda-fix-displayed-tags 20 7.628...e-05 3.814...e-06 org-detach-overlay 2 6.3885e-05 3.19425e-05 org-agenda-align-tags 1 6.2838e-05 6.2838e-05 org-in-src-block-p 20 5.9543e-05 2.97715e-06 org-refresh-stats-properties 1 5.8101e-05 5.8101e-05 org-compile-prefix-format 1 5.8062e-05 5.8062e-05 org-looking-at-p 30 4.612...e-05 1.537...e-06 org-check-agenda-file 2 4.4402e-05 2.2201e-05 org-get-agenda-file-buffer 2 4.26e-05 2.13e-05 org-activate-plain-links 1 4.1271e-05 4.1271e-05 org-add-hook 4 3.980...e-05 9.951...e-06 org-remove-uninherited-tags 40 3.795...e-05 9.489...e-07 org-find-base-buffer-visiting 2 3.5687e-05 1.78435e-05 org-get-at-bol 22 3.454e-05 1.57e-06 org-refresh-properties 2 3.194...e-05 1.597...e-05 org-make-options-regexp 1 3.1266e-05 3.1266e-05 org-agenda-skip-eval 40 3.017...e-05 7.543...e-07 org--setup-collect-keywords 1 3.0002e-05 3.0002e-05 org-agenda-get-category-icon 20 2.7342e-05 1.3671e-06 org-today 2 2.465...e-05 1.232...e-05 org-not-nil 40 2.111...e-05 5.2795e-07 org-refresh-effort-properties 1 2.0797e-05 2.0797e-05 org-face-from-face-or-color 20 1.998...e-05 9.994...e-07 org-activate-bracket-links 1 1.9904e-05 1.9904e-05 org-reduced-level 20 1.9249e-05 9.6245e-07 org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item 20 1.735...e-05 8.676...e-07 org-agenda-mark-header-line 2 1.7215e-05 8.6075e-06 org-agenda-fontify-priorities 1 1.6987e-05 1.6987e-05 org-agenda-reset-markers 1 1.6665e-05 1.6665e-05 org-current-line 2 1.616e-05 8.08e-06 org-float-time 20 1.3168e-05 6.584e-07 org--setup-process-tags 1 1.2282e-05 1.2282e-05 org-agenda-span-name 5 1.111...e-05 2.2236e-06 org-re-property 1 1.1077e-05 1.1077e-05 org-agenda-prepare-window 1 1.0824e-05 1.0824e-05 org-uniquify 5 1.0212e-05 2.0424e-06 org-set-local 6 9.230...e-06 1.538...e-06 org-agenda-set-mode-name 1 9.008e-06 9.008e-06 org-agenda-update-agenda-type 2 8.613e-06 4.3065e-06 org-agenda-propertize-selected-todo-keywords 1 4.216e-06 4.216e-06 org-goto-line 1 3.753e-06 3.753e-06 org-set-sorting-strategy 1 2.596e-06 2.596e-06 org-uniquify-alist 1 2.033e-06 2.033e-06 org-font-lock-add-tag-faces 1 1.351e-06 1.351e-06 org-file-menu-entry 1 1.284e-06 1.284e-06 org-agenda-use-sticky-p 1 1.011e-06 1.011e-06 org-agenda-mark-clocking-task 1 8.93e-07 8.93e-07 --=-=-= Content-Type: text/plain Here are the profiling results after the commit: --=-=-= Content-Type: text/plain Content-Disposition: inline; filename=minimal-example-blocked-tasks-after-commit.txt org-agenda-redo 1 0.288310367 0.288310367 org-let 1 0.285087688 0.285087688 org-todo-list 1 0.285079274 0.285079274 org-agenda-finalize 1 0.272012485 0.272012485 org-agenda-dim-blocked-tasks 1 0.270325613 0.270325613 org-entry-blocked-p 580 0.1940442360 0.0003345590 org-block-todo-from-children-or-siblings-or-parent 580 0.1009711290 0.0001740881 org-entry-get 1410 0.0965856959 6.850...e-05 org-up-heading-safe 560 0.0680727980 0.0001215585 org-property--local-values 830 0.0167895950 2.022...e-05 org-get-property-block 830 0.0152417820 1.836...e-05 org-entry-properties 580 0.0099000929 1.706...e-05 org-back-to-heading 3850 0.0096790799 2.514...e-06 org-outline-level 2010 0.0092372650 4.595...e-06 org-agenda-get-day-entries 1 0.005782133 0.005782133 org-agenda-get-todos 1 0.005699159 0.005699159 org-get-todo-state 680 0.0055059249 8.096...e-06 org-get-at-bol 581 0.0043025709 7.405...e-06 org-agenda-finalize-entries 1 0.003616882 0.003616882 org-before-first-heading-p 830 0.0034598270 4.168...e-06 org-entry-is-done-p 330 0.0033791759 1.023...e-05 org-entry-is-todo-p 330 0.0031137890 9.435...e-06 org-get-heading 330 0.0026260989 7.957...e-06 org-get-tags-at 40 0.001983332 4.95833e-05 org-entries-lessp 40 0.001960238 4.900595e-05 org-agenda-fit-window-to-buffer 1 0.001945965 0.001945965 org-fit-window-to-buffer 1 0.001917771 0.001917771 org-agenda-format-item 20 0.0013505519 6.75276e-05 org-agenda-highlight-todo 20 0.0012644160 6.322...e-05 org-looking-at-p 830 0.0012345849 1.487...e-06 org-agenda-prepare 1 0.001124014 0.001124014 org-match-string-no-properties 580 0.0007045290 1.214...e-06 org-em 700 0.0005474830 7.821...e-07 org-not-nil 1080 0.0005435310 5.032...e-07 org-trim 40 0.0005423520 1.355...e-05 org-agenda-prepare-buffers 1 0.000515622 0.000515622 org-get-priority 20 0.000501921 2.509...e-05 org-add-props 60 0.0003515730 5.859...e-06 org-agenda-entry-get-agenda-timestamp 20 0.000322989 1.614945e-05 org-agenda-skip 20 0.000281676 1.40838e-05 org-agenda-mode 1 0.000220725 0.000220725 org-agenda-new-marker 20 0.0002005160 1.002...e-05 org-refresh-category-properties 1 0.000139015 0.000139015 org-agenda-files 3 0.0001187149 3.957...e-05 org-get-todo-face 20 9.5821e-05 4.791...e-06 org-cmp-category 40 9.496...e-05 2.374...e-06 org-set-regexps-and-options 1 9.116e-05 9.116e-05 org-cmp-values 40 8.382...e-05 2.095...e-06 org-get-time-of-day 20 8.205...e-05 4.10295e-06 org-get-category 20 8.1716e-05 4.0858e-06 org-agenda-fix-displayed-tags 20 7.4785e-05 3.73925e-06 org-agenda-align-tags 1 6.3915e-05 6.3915e-05 org-in-src-block-p 20 5.9565e-05 2.978...e-06 org-refresh-stats-properties 1 5.8709e-05 5.8709e-05 org-compile-prefix-format 1 5.553e-05 5.553e-05 org-check-agenda-file 2 4.4228e-05 2.2114e-05 org-get-agenda-file-buffer 2 4.420...e-05 2.210...e-05 org-activate-plain-links 1 3.7979e-05 3.7979e-05 org-remove-uninherited-tags 40 3.796...e-05 9.491...e-07 org-find-base-buffer-visiting 2 3.593...e-05 1.796...e-05 org-make-options-regexp 1 3.4553e-05 3.4553e-05 org-refresh-properties 2 3.2276e-05 1.6138e-05 org-agenda-skip-eval 40 3.026...e-05 7.566...e-07 org--setup-collect-keywords 1 2.7909e-05 2.7909e-05 org-agenda-get-category-icon 20 2.5506e-05 1.275...e-06 org-today 2 2.495e-05 1.2475e-05 org-refresh-effort-properties 1 2.1299e-05 2.1299e-05 org-reduced-level 20 1.9957e-05 9.9785e-07 org-unhighlight 2 1.811...e-05 9.057...e-06 org-face-from-face-or-color 20 1.811...e-05 9.056...e-07 org-agenda-reset-markers 1 1.7852e-05 1.7852e-05 org-agenda-mark-header-line 2 1.7597e-05 8.7985e-06 org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item 20 1.7074e-05 8.537e-07 org-agenda-fontify-priorities 1 1.6277e-05 1.6277e-05 org-add-hook 4 1.554...e-05 3.886...e-06 org-current-line 2 1.48e-05 7.4e-06 org-agenda-set-mode-name 1 1.4106e-05 1.4106e-05 org-float-time 20 1.3699e-05 6.8495e-07 org-activate-bracket-links 1 1.3416e-05 1.3416e-05 org--setup-process-tags 1 1.2782e-05 1.2782e-05 org-agenda-span-name 5 1.0024e-05 2.0048e-06 org-uniquify 5 9.919...e-06 1.983...e-06 org-agenda-prepare-window 1 9.533e-06 9.533e-06 org-re-property 1 9.248e-06 9.248e-06 org-set-local 6 8.811e-06 1.468...e-06 org-agenda-update-agenda-type 2 7.759e-06 3.8795e-06 org-agenda-propertize-selected-todo-keywords 1 5.426e-06 5.426e-06 org-detach-overlay 2 5.065e-06 2.5325e-06 org-goto-line 1 4.574e-06 4.574e-06 org-set-sorting-strategy 1 2.123e-06 2.123e-06 org-file-menu-entry 1 1.72e-06 1.72e-06 org-uniquify-alist 1 1.621e-06 1.621e-06 org-font-lock-add-tag-faces 1 1.095e-06 1.095e-06 org-agenda-mark-clocking-task 1 7.43e-07 7.43e-07 org-agenda-use-sticky-p 1 6.86e-07 6.86e-07 --=-=-= Content-Type: text/plain Thanks, Matt --=-=-=--