unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* builds are getting slower?
@ 2015-12-10  2:15 Glenn Morris
  2015-12-10  2:41 ` Paul Eggert
  2015-12-10 16:16 ` Eli Zaretskii
  0 siblings, 2 replies; 75+ messages in thread
From: Glenn Morris @ 2015-12-10  2:15 UTC (permalink / raw)
  To: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 472 bytes --]


Subjectively it felt to me lately like it was taking longer to build
Emacs than it used to. When I looked at my daily build logs, that seems
to be confirmed - see attached figure (time for a full bootstrap).
In particular, things seem to have gotten about 30% slower around 10th
November. Maybe (?) this is borne out by
http://hydra.nixos.org/job/gnu/emacs-trunk/tarball#tabs-charts
or maybe it isn't.

Anyway, I just mention it in case anyone feels like investigating.


[-- Attachment #2: bootstrap_time.png --]
[-- Type: image/png, Size: 11155 bytes --]

^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2015-12-10  2:15 builds are getting slower? Glenn Morris
@ 2015-12-10  2:41 ` Paul Eggert
  2015-12-10  3:51   ` Glenn Morris
  2015-12-10 16:16 ` Eli Zaretskii
  1 sibling, 1 reply; 75+ messages in thread
From: Paul Eggert @ 2015-12-10  2:41 UTC (permalink / raw)
  To: Glenn Morris, emacs-devel

Eyeballing it, it looks like there was one slowdown in Emacs master around Oct 
19 and another around Nov 17.  You have the raw data; can you give the commit 
IDs both before and after these observed slowdowns?



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2015-12-10  2:41 ` Paul Eggert
@ 2015-12-10  3:51   ` Glenn Morris
  2015-12-10  6:53     ` Paul Eggert
  0 siblings, 1 reply; 75+ messages in thread
From: Glenn Morris @ 2015-12-10  3:51 UTC (permalink / raw)
  To: Paul Eggert; +Cc: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 453 bytes --]

Paul Eggert wrote:

> Eyeballing it, it looks like there was one slowdown in Emacs master
> around Oct 19 and another around Nov 17.  You have the raw data; can
> you give the commit IDs both before and after these observed
> slowdowns?

I don't have that level of granularity. These builds were (normally)
started at 7.30am Pacific time, so correspond to whatever was in the
repo at that time. I didn't track the commit id. The raw data are
attached.


[-- Attachment #2: buildsecs.txt --]
[-- Type: text/plain, Size: 4189 bytes --]

20150101 830.799
20150103 843.938
20150104 817.782
20150106 881.91
20150108 876.898
20150109 864.786
20150110 870.198
20150111 932.539
20150112 935.13
20150113 938.132
20150114 942.447
20150117 952.583
20150120 952.581
20150121 966.927
20150122 974.282
20150123 975.117
20150127 1006.1
20150130 1026.03
20150131 1031.14
20150201 1026.69
20150202 1029.29
20150203 1029.92
20150204 1029.65
20150206 1038.55
20150207 1111.3
20150208 1031
20150209 1024.58
20150210 1032.88
20150211 1039.69
20150212 1036.35
20150213 1040.59
20150214 1050.08
20150215 1050.29
20150216 1049.97
20150217 1094.29
20150218 1057.52
20150219 1049.77
20150220 1050.2
20150221 1045.97
20150222 1045.69
20150223 1048.9
20150225 1057.69
20150227 1056.93
20150228 1066.25
20150301 1053.63
20150302 1052.7
20150304 1079.16
20150305 1065.26
20150306 1062.64
20150307 1083.73
20150311 1059.98
20150312 1061.7
20150313 1062.82
20150314 1060.92
20150319 1075.09
20150320 1073.91
20150321 1074.9
20150322 1078.4
20150323 1077.47
20150325 1080.25
20150326 1081.28
20150327 1081.46
20150328 1031.63
20150329 1031
20150330 1026.48
20150331 1036.17
20150401 1034.82
20150402 1035.76
20150403 1035.5
20150404 1031.84
20150405 1033.95
20150406 1034.55
20150407 1033.37
20150408 1034.11
20150409 1033.95
20150410 1037.97
20150411 1037.5
20150412 1039.62
20150413 1040.7
20150414 1088.47
20150417 1116.09
20150418 1086.6
20150425 1094.13
20150426 1096.18
20150502 1090.73
20150503 1095.99
20150509 1089.2
20150510 1098.74
20150514 1049.84
20150517 1053.94
20150524 1058.22
20150528 1096.38
20150529 1077.04
20150530 1135.07
20150531 1123.61
20150601 1073.57
20150603 1103.79
20150606 984.518
20150607 1033.87
20150613 955.557
20150617 960.781
20150619 973.94
20150620 962.837
20150621 959.901
20150626 960.811
20150701 959.047
20150702 952.712
20150703 953.747
20150704 970.472
20150705 957.688
20150706 958.987
20150708 980.255
20150709 982.61
20150710 982.913
20150711 996.511
20150712 1007.04
20150713 1004.33
20150714 993.642
20150715 993.568
20150717 975.349
20150718 983.545
20150719 984.618
20150720 994.289
20150722 952.925
20150723 976.664
20150724 979.348
20150725 968.588
20150726 975.447
20150727 974.083
20150728 988.994
20150729 991.112
20150730 997.056
20150731 991.928
20150801 996.333
20150802 1007.47
20150803 990.978
20150804 992.024
20150805 965.451
20150806 970.614
20150807 993.034
20150808 1026.95
20150809 971.832
20150810 970.767
20150811 969.963
20150813 971.245
20150814 976.036
20150815 981.821
20150816 982.394
20150817 985.848
20150818 974.948
20150819 978.103
20150820 983.572
20150821 989.445
20150822 995.02
20150824 995.744
20150825 984.628
20150826 965.071
20150828 974.074
20150829 970.529
20150830 963.299
20150831 966.725
20150902 980.007
20150903 974.879
20150904 972.26
20150905 976.507
20150906 978.598
20150907 979.484
20150908 996.367
20150910 989.794
20150911 993.415
20150912 961.313
20150913 961.133
20150914 961.876
20150915 964.06
20150916 958.888
20150917 971.086
20150918 972.313
20150919 966.132
20150920 967.138
20150921 968.586
20150922 966.193
20150923 959.525
20150924 958.269
20150925 965.446
20150926 964.584
20150927 965.49
20150928 958.607
20150929 964.871
20150930 968.464
20151001 971.856
20151002 975.958
20151003 983.583
20151004 970.008
20151005 978.057
20151006 977.279
20151008 979.724
20151009 988.965
20151010 964.139
20151012 970.663
20151013 963.012
20151015 1030.35
20151016 1030.81
20151017 1027.37
20151018 1024.63
20151019 1027.26
20151020 1033.55
20151021 1095.59
20151023 1034.97
20151024 1040.52
20151025 1037.96
20151026 1044.14
20151027 1042.13
20151028 1041.36
20151029 1045.51
20151030 1045.21
20151031 1034.06
20151101 1027.41
20151102 1032.37
20151103 1032.79
20151104 1035.93
20151105 1040.39
20151106 1044.94
20151107 1069.06
20151108 1047.21
20151109 1040.85
20151110 1288.94
20151111 1292.89
20151113 1297.49
20151114 1303.17
20151115 1302.23
20151116 1315.56
20151117 1309.62
20151118 1309.82
20151119 1310.88
20151120 1311.57
20151121 1312.69
20151122 1312.26
20151123 1316.19
20151124 1317.39
20151125 1317.65
20151126 1306.24
20151128 1302.35
20151129 1302.26
20151130 1298.47
20151202 1310.04
20151207 1322.69
20151208 1315.94
20151209 1315.32

^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2015-12-10  3:51   ` Glenn Morris
@ 2015-12-10  6:53     ` Paul Eggert
  2015-12-10  8:14       ` Artur Malabarba
  0 siblings, 1 reply; 75+ messages in thread
From: Paul Eggert @ 2015-12-10  6:53 UTC (permalink / raw)
  To: Glenn Morris; +Cc: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 911 bytes --]

Glenn Morris wrote:
> I don't have that level of granularity. These builds were (normally)
> started at 7.30am Pacific time, so correspond to whatever was in the
> repo at that time. I didn't track the commit id.

 From that raw data, there's a smaller performance hit between 20151013 and 
20151015.  The log for that time period (cutoff at 0730 Pacific time) is 
attached as log1.txt.  The commit I'd have the most suspicion of is 
2cc412cdc2635ecb99129271abe94bdd744742c2.  You might try reversing that and 
seeing whether it boosts performance for you.  (What flags are you passing to 
'configure' and to 'make'?  What is your platform?)

There's a larger performance hit between 20151109 and 20151110.  The log for 
that time period (0730 Pacific cutoff) is attached as log2.txt.  Nothing jumps 
out, I'm afraid.

Maybe next time you could record the commit ID as well; that might help track 
things down.

[-- Attachment #2: log1.txt --]
[-- Type: text/plain, Size: 8795 bytes --]

commit 59def59158f9c5081664253e30362d0061a2a64f
Author:     Dmitry Gutov <dgutov@yandex.ru>
AuthorDate: Thu Oct 15 02:18:16 2015
Commit:     Dmitry Gutov <dgutov@yandex.ru>
CommitDate: Thu Oct 15 02:18:16 2015

    Refer to `(elisp)Basic Completion' in completing-read docstring

    * src/minibuf.c (Fcompleting_read): Refer to `(elisp)Basic
    Completion' in the docstring (bug#21644).

commit 453af81f16a7eca0bc246c9278d19ba995641dfa
Author:     Mark Oteiza <mvoteiza@udel.edu>
AuthorDate: Wed Oct 14 16:00:31 2015
Commit:     Mark Oteiza <mvoteiza@udel.edu>
CommitDate: Wed Oct 14 16:00:31 2015

    * lisp/mpc.el (mpc-format): Always push form to pred

commit 943f7f902ed3d7a5ce00bbb5a9cc60e01607b661
Author:     Paul Eggert <eggert@cs.ucla.edu>
AuthorDate: Wed Oct 14 14:46:22 2015
Commit:     Paul Eggert <eggert@cs.ucla.edu>
CommitDate: Wed Oct 14 14:46:50 2015

    Spelling fixes

    * configure.ac (bitmapdir): Fix misspelling of bmd_acc.
    * test/automated/coding-tests.el (ert-test-coding-bogus-coding-systems):
    Fix misspelling of nonexistent file name.

commit 100a96c92ba9cdf49f695edcf74975321eafae2e
Author:     Mark Oteiza <mvoteiza@udel.edu>
AuthorDate: Wed Oct 14 14:32:47 2015
Commit:     Mark Oteiza <mvoteiza@udel.edu>
CommitDate: Wed Oct 14 14:32:47 2015

    * lisp/mpc.el (mpc-mode-menu, mpc-toggle-play): Fix docstrings

commit e646242e13cd41742a3ff2acb7a0c3eec4e874e9
Author:     Michael Albinus <michael.albinus@gmx.de>
AuthorDate: Wed Oct 14 11:16:14 2015
Commit:     Michael Albinus <michael.albinus@gmx.de>
CommitDate: Wed Oct 14 11:16:14 2015

    Some editing fixes in Tramp

    * lisp/net/tramp-gvfs.el:
    * doc/misc/tramp.texi: "customer option" -> "custom option".

    * lisp/net/tramp.el (tramp-completion-function-alist): Fix docstring.

commit 8318dec8e167a3c688534e3f9faff862b7e374ac
Author:     Michael Albinus <michael.albinus@gmx.de>
AuthorDate: Wed Oct 14 11:10:14 2015
Commit:     Michael Albinus <michael.albinus@gmx.de>
CommitDate: Wed Oct 14 11:10:14 2015

    ; Submit changes promised last commit already

commit 0cced99164baab5b56ee57e6b1dccea21164c85e
Author:     Jürgen Hötzel <juergen@archlinux.org>
AuthorDate: Wed Oct 14 11:09:03 2015
Commit:     Michael Albinus <michael.albinus@gmx.de>
CommitDate: Wed Oct 14 11:09:03 2015

    Use proper localization in tramp-gvfs.el

    * lisp/net/tramp-gvfs.el (tramp-gvfs-handle-file-attributes):
    Suppress localized settings in order to proper parse gfvs output.

commit 96764333c438566b20fd381960fef77fa12eb586
Author:     Warren Lynn <wrn.lynn@gmail.com>
AuthorDate: Wed Oct 14 11:03:50 2015
Commit:     Michael Albinus <michael.albinus@gmx.de>
CommitDate: Wed Oct 14 11:03:50 2015

    Fix Bug#21562

    * lisp/net/tramp-sh.el (tramp-do-copy-or-rename-file-out-of-band):
    Quote argument in proper order.  (Bug#21562)

    Copyright-paperwork-exempt: yes

commit 17d4f60b55dd7998a4afffa9413c9e1731791f1a
Author:     Nicolas Petton <nicolas@petton.fr>
AuthorDate: Wed Oct 14 08:55:53 2015
Commit:     Nicolas Petton <nicolas@petton.fr>
CommitDate: Wed Oct 14 08:57:32 2015

    Fix typos in docstrings

    * lisp/emacs-lisp/map.el:
    * lisp/emacs-lisp/seq.el: Fix typos in the docstrings of the pcase
      macros.

commit aebf282aec46e3e8246a3dce535ecccf173c391b
Author:     Mark Oteiza <mvoteiza@udel.edu>
AuthorDate: Wed Oct 14 05:52:44 2015
Commit:     Mark Oteiza <mvoteiza@udel.edu>
CommitDate: Wed Oct 14 05:52:44 2015

    * lisp/mpc.el (mpc-volume-refresh): Check if buffer is live.

commit c6cbf6c06cceaf1f8d855e070df3c3d5a0bdf8e6
Author:     Glenn Morris <rgm@gnu.org>
AuthorDate: Wed Oct 14 03:22:34 2015
Commit:     Glenn Morris <rgm@gnu.org>
CommitDate: Wed Oct 14 03:22:34 2015

    ; Auto-commit of loaddefs files.

commit 0e38e94b1c4125951b198b213a67e010cafcd724
Author:     Oleh Krehel <ohwoeowho@gmail.com>
AuthorDate: Wed Oct 14 02:19:21 2015
Commit:     Oleh Krehel <ohwoeowho@gmail.com>
CommitDate: Wed Oct 14 02:24:08 2015

    Make dired-jump work with tar-subfile-mode

    * lisp/dired-x.el (dired-jump): When in `tar-subfile-mode', instead of
      emitting an error, switch to `tar-superior-buffer'.

commit f147c0f3a5f32343b381e8412907235ade27a81d
Author:     Juanma Barranquero <lekktu@gmail.com>
AuthorDate: Wed Oct 14 00:44:40 2015
Commit:     Juanma Barranquero <lekktu@gmail.com>
CommitDate: Wed Oct 14 00:46:57 2015

    * .gitignore: Add build-aux/ar-lib.

commit b5e2d7495017e0d87de331f41838810b72730942
Author:     Nicolas Petton <nicolas@petton.fr>
AuthorDate: Wed Oct 14 00:37:59 2015
Commit:     Nicolas Petton <nicolas@petton.fr>
CommitDate: Wed Oct 14 00:40:10 2015

    Better docstrings in seq.el and map.el

    * lisp/emacs-lisp/map.el:
    * lisp/emacs-lisp/seq.el: Improve the docstring for the pcase patterns.

commit e668176e7d89e885902287da18c69297bf04fed3
Author:     Paul Eggert <eggert@cs.ucla.edu>
AuthorDate: Tue Oct 13 23:34:16 2015
Commit:     Paul Eggert <eggert@cs.ucla.edu>
CommitDate: Tue Oct 13 23:34:47 2015

    Merge from gnulib

    This incorporates:
    2015-10-13 binary-io, u64, unistd: port to strict C
    2015-09-26 c-ctype: do not worry about EBCDIC + char signed
    2015-09-25 c-ctype: port better to z/OS EBCDIC
    2015-09-25 gnulib-common.m4: fix gl_PROG_AR_RANLIB/AM_PROG_AR clash
    * doc/misc/texinfo.tex, lib/binary-io.c, lib/c-ctype.h, lib/u64.c:
    * lib/unistd.c, m4/gnulib-common.m4, m4/gnulib-comp.m4:
    Copy from gnulib.

commit 2cc412cdc2635ecb99129271abe94bdd744742c2
Author:     Paul Eggert <eggert@cs.ucla.edu>
AuthorDate: Tue Oct 13 23:09:43 2015
Commit:     Paul Eggert <eggert@cs.ucla.edu>
CommitDate: Tue Oct 13 23:10:14 2015

    Take XPNTR private

    * src/alloc.c (PURE_POINTER_P): Remove.
    All uses replaced with PURE_P.
    (XPNTR_OR_SYMBOL_OFFSET): New function.
    (XPNTR): Move here from lisp.h.
    Reimplement in terms of XPNTR_OR_SYMBOL_OFFSET.
    (mark_maybe_object, valid_lisp_object_p, survives_gc_p):
    Remove unnecessary cast.
    (purecopy): Use XPNTR_OR_SYMBOL_OFFSET instead of XPNTR,
    to avoid an unnecessary runtime test for symbols.
    * src/lisp.h (lisp_h_XPNTR, XPNTR): Remove, moving XPNTR to alloc.c.
    Only alloc.c needs XPNTR now.

commit 3fa424ca48f4f48a40a514153726758b6ed47892
Author:     Mark Oteiza <mvoteiza@udel.edu>
AuthorDate: Tue Oct 13 19:49:58 2015
Commit:     Mark Oteiza <mvoteiza@udel.edu>
CommitDate: Tue Oct 13 19:49:58 2015

    Add MPC play/pause command

    * lisp/mpc.el (mpc-toggle-play): New command.
    (mpc-mode-map): Bind it to "s".
    (mpc-mode-menu): Add corresponding menu item.

commit a7e6637162827a09c13e72a49412b3ab915cf473
Author:     Mark Oteiza <mvoteiza@udel.edu>
AuthorDate: Tue Oct 13 19:08:48 2015
Commit:     Mark Oteiza <mvoteiza@udel.edu>
CommitDate: Tue Oct 13 19:27:57 2015

    Add bindings and menu items for prev and next tracks

    * lisp/mpc.el (mpc-mode-map): Bind ">" to mpc-next,
    "<" to mpc-prev.
    (mpc-mode-menu): Add corresponding menu items

commit 9fa9c26e42ddb3f67133bc18112147926bae8a50
Author:     Ken Raeburn <raeburn@raeburn.org>
AuthorDate: Tue Oct 13 19:06:01 2015
Commit:     Ken Raeburn <raeburn@raeburn.org>
CommitDate: Tue Oct 13 19:12:55 2015

    Reduce face-related consing during frame creation.

    * faces.el (face--attributes-unspecified): Compute the "unspecified"
    attribute list once.
    (face-spec-reset-face): Use it instead of building the list.

commit 85c12310ff9a6721fb1ecbfdf6d89e59a34fb882
Author:     Ken Raeburn <raeburn@permabit.com>
AuthorDate: Tue Oct 13 16:33:15 2015
Commit:     Ken Raeburn <raeburn@raeburn.org>
CommitDate: Tue Oct 13 19:12:48 2015

    Do process ConfigureNotify events indicating size changes.

    * src/xterm.c (handle_one_xevent): If consecutive ConfigureNotify
    events don't have the same size, process each one.

commit e90de8276fb8c8365be8b8d0f696b3c93c4b7c4f
Author:     Mark Oteiza <mvoteiza@udel.edu>
AuthorDate: Tue Oct 13 15:14:49 2015
Commit:     Mark Oteiza <mvoteiza@udel.edu>
CommitDate: Tue Oct 13 15:14:49 2015

    Derive mpc-mode from special-mode

    lisp/mpc.el (mpc-mode-map): Make from sparse keymap. Unbind g.
    (mpc-mode): Derive from special mode.
    (mpc-songs-mode-map): Don't set parent keymap.

commit 18b0eb7f1cc16fe33f89c74d2497a6fcb4b863fd
Author:     Mark Oteiza <mvoteiza@udel.edu>
AuthorDate: Tue Oct 13 11:19:18 2015
Commit:     Mark Oteiza <mvoteiza@udel.edu>
CommitDate: Tue Oct 13 11:25:35 2015

    Fix error messages for when covers are not found.

    The last change to mpc-format let the binding to file call
    mpc-file-local-copy with nil argument. Instead, employ if-let here so
    nil bindings don't result in needless computation and errors.
    * lisp/mpc.el: Require 'subr-x at compile time.
    * lisp/mpc.el (mpc-format): Use if-let.

[-- Attachment #3: log2.txt --]
[-- Type: text/plain, Size: 8260 bytes --]

commit d149ca81c33ab95900306c3c71f6eff62a3ec1a1
Author:     Artur Malabarba <bruce.connor.am@gmail.com>
AuthorDate: Tue Nov 10 05:47:42 2015
Commit:     Artur Malabarba <bruce.connor.am@gmail.com>
CommitDate: Tue Nov 10 06:45:50 2015

    * doc/lispref/variables.texi (Directory Local Variables):

    Document dir-locals wildcards

    * lisp/files.el (dir-locals-file): Point to Info node.

    * doc/emacs/custom.texi (Directory Variables):
    Document dir-locals wildcards.

    * etc/NEWS: Document new functionality.

commit 9145e79dc2042fb477959ddda59c3e2ff5fa3914
Author:     Artur Malabarba <bruce.connor.am@gmail.com>
AuthorDate: Tue Nov 10 05:26:00 2015
Commit:     Artur Malabarba <bruce.connor.am@gmail.com>
CommitDate: Tue Nov 10 05:26:00 2015

    * lisp/files.el: Don't allow customization of dir-locals sorting

    In retrospect, this is not a good idea for the same reason that
    `dir-locals-file' is a defconst, because it is important that this
    behaviour be "uniform across different environments and users".
    Sure, the user can still change the sorting with a hack, but we
    shouldn't encourage them to change it.

    (dir-locals--all-files): Return list in the order returned by
    `file-expand-wildcards'.
    (file-expand-wildcards): Document the sorting predicate used.
    (dir-locals-sort-predicate): Delete variable.

commit 77cebbc1e77edf23bc2c23a218b56d9d6ad68e74
Author:     Artur Malabarba <bruce.connor.am@gmail.com>
AuthorDate: Tue Nov 10 05:14:49 2015
Commit:     Artur Malabarba <bruce.connor.am@gmail.com>
CommitDate: Tue Nov 10 05:14:49 2015

    * lisp/files.el (dir-locals-read-from-file): Better handle errors

commit 4d82aa3abdad1871b99f0a9e56fe54ec497bd290
Author:     Artur Malabarba <bruce.connor.am@gmail.com>
AuthorDate: Tue Nov 10 05:04:02 2015
Commit:     Artur Malabarba <bruce.connor.am@gmail.com>
CommitDate: Tue Nov 10 05:04:31 2015

    * lisp/isearch.el (search-default-regexp-mode): change default value

commit 1e98f041acae7cee012b1b157d4aa3f80b226123
Author:     Artur Malabarba <bruce.connor.am@gmail.com>
AuthorDate: Mon Nov 9 20:13:25 2015
Commit:     Artur Malabarba <bruce.connor.am@gmail.com>
CommitDate: Tue Nov 10 05:04:31 2015

    * lisp/files.el (dir-locals-find-file): Don't stop at unreadable files

    `locate-dominating-file' will now keep looking if the files it finds in
    a given directory are unreadable (or not files).

commit 2e8488858c7b8df40610c1cd3038348fdc9bf3ed
Author:     Artur Malabarba <bruce.connor.am@gmail.com>
AuthorDate: Sat Nov 7 05:54:56 2015
Commit:     Artur Malabarba <bruce.connor.am@gmail.com>
CommitDate: Tue Nov 10 05:04:31 2015

    * lisp/files.el (dir-locals-file): Allow wildcards

    (dir-locals-find-file, dir-locals-collect-variables)
    (dir-locals-read-from-file): Update accordingly.
    (hack-dir-local-variables): Rename a local variable.

    * lisp/files-x.el (modify-dir-local-variable): Update accordingly

    * lisp/help-fns.el (describe-variable): Update accordingly

    * .gitignore: Add .dir-locals?.el

commit cbaa04014e0c9efdfc6393bccde0e6579b5d7051
Author:     Artur Malabarba <bruce.connor.am@gmail.com>
AuthorDate: Sat Nov 7 04:45:18 2015
Commit:     Artur Malabarba <bruce.connor.am@gmail.com>
CommitDate: Tue Nov 10 05:04:30 2015

    * lisp/emacs-lisp/map.el (map-merge-with): New function

    * test/automated/map-tests.el (test-map-merge-with): New test

commit cbc51211f9e4f8f3d4b8a1feaa6cbfd2fd4ac1ca
Author:     Dmitry Gutov <dgutov@yandex.ru>
AuthorDate: Mon Nov 9 18:39:32 2015
Commit:     Dmitry Gutov <dgutov@yandex.ru>
CommitDate: Tue Nov 10 03:31:20 2015

    ; project-library-roots-function: Update the FIXME

commit 0f50e5163cf747fcf18124039a82b5156a48316b
Author:     Karl Fogel <kfogel@red-bean.com>
AuthorDate: Mon Nov 9 20:14:49 2015
Commit:     Karl Fogel <kfogel@red-bean.com>
CommitDate: Mon Nov 9 20:14:54 2015

    Fix some recently-perturbed bookmark autoloads

    * lisp/bookmark.el (bookmark-set-internal): Remove unnecessary autoload.
      (bookmark-set): Restore autoload.
      (bookmark-set-no-overwrite): Add autoload.

    Thanks to Juanma Barranquero for noticing the autoload problems
    introduced by my recent commit adding/changing the above functions
    (Sun Nov 8 14:16:43 2015 -0500, git commit 3812e17978).

commit f5eac7baefacd8944a1851596a944fd29dec98fa
Author:     Noah Friedman <friedman@splode.com>
AuthorDate: Mon Nov 9 17:34:40 2015
Commit:     Noah Friedman <friedman@splode.com>
CommitDate: Mon Nov 9 17:34:40 2015

    (ydump-buffer): Handle case where gap is at the start of buffer.
    I don't recall if older versions of gdb were less strict but you
    cannot dump a 0-length range in gdb 7.9.1.

commit 82d59f1b3ba6d7ad9d9cd0af15e237f97bb5906b
Author:     Dmitry Gutov <dgutov@yandex.ru>
AuthorDate: Mon Nov 9 16:56:55 2015
Commit:     Dmitry Gutov <dgutov@yandex.ru>
CommitDate: Mon Nov 9 16:56:55 2015

    * lisp/progmodes/project.el: Update Commentary.

commit 0be6fb8e17f708fe03430d0b1e701810ae51b5e3
Merge: 3c3aad7 1c72afb
Author:     Dmitry Gutov <dgutov@yandex.ru>
AuthorDate: Mon Nov 9 16:47:46 2015
Commit:     Dmitry Gutov <dgutov@yandex.ru>
CommitDate: Mon Nov 9 16:47:46 2015

    Merge branch 'project-next'

commit 1c72afb7aa48c2ea06103113ef70ccea0c1c961d
Author:     Dmitry Gutov <dgutov@yandex.ru>
AuthorDate: Mon Nov 9 16:41:06 2015
Commit:     Dmitry Gutov <dgutov@yandex.ru>
CommitDate: Mon Nov 9 16:41:06 2015

    Fold `project-ask-user' into `project-current'

    * lisp/progmodes/project.el (project-find-functions): Remove
    `project-ask-user'.
    (project-ask-user): Remove function and the corresponding
    `project-roots' implementation.
    (project-current): Add a new argument, MAYBE-PROMPT.  Prompt the
    user in case there's no project in the current directory.  Update
    all callers.

commit 3c3aad733522365a8fe729d7c92e64e98bc4ce92
Author:     Karl Fogel <kfogel@red-bean.com>
AuthorDate: Mon Nov 9 13:57:23 2015
Commit:     Karl Fogel <kfogel@red-bean.com>
CommitDate: Mon Nov 9 13:57:29 2015

    When VC detects a conflict, specify which file

    * lisp/vc/vc.el (vc-message-unresolved-conflicts): New function.
    * lisp/vc/vc-svn.el (vc-svn-find-file-hook):
    * lisp/vc/vc-hg.el (vc-hg-find-file-hook):
    * lisp/vc/vc-bzr.el (vc-bzr-find-file-hook):
    * lisp/vc/vc-git.el (vc-git-find-file-hook): Use above new function
      to display a standard message that specifies the conflicted file.

    Before this change, the message VC used for indicating a conflicted
    file was just "There are unresolved conflicts in this file" without
    naming the file (and this language was duplicated in several places).
    After this change, it's "There are unresolved conflicts in file FOO"
    (and this language is now centralized in one function in vc.el).

    Justification: It's important for the message to name the conflicted
    file because the moment when VC realizes a file is conflicted does not
    always come interactively.  For example, some people automatically
    find a set of Org Mode files on startup, and may keep those .org files
    under version control.  If any of the files are conflicted, the user
    just sees some messages fly by, and might later check the "*Messages*"
    buffer to find out what files were conflicted.  I'm not saying this
    happened to me or anything; it's a purely hypothetical example.

commit 86c19714b097aa477d339ed99ffb5136c755a046
Author:     Eli Zaretskii <eliz@gnu.org>
AuthorDate: Mon Nov 9 10:31:45 2015
Commit:     Eli Zaretskii <eliz@gnu.org>
CommitDate: Mon Nov 9 10:31:45 2015

    Fix assertion violation in define-key

    * src/keymap.c (store_in_keymap): Don't use XFASTINT on non-character
    objects.  Reported by Drew Adams <drew.adams@oracle.com>
    and Juanma Barranquero <lekktu@gmail.com>.

commit c6c16fb3f8fe5909baafd53c6b26153dec021064
Author:     Dima Kogan <dima@secretsauce.net>
AuthorDate: Mon Nov 9 08:36:05 2015
Commit:     Eli Zaretskii <eliz@gnu.org>
CommitDate: Mon Nov 9 08:36:05 2015

    Fix a memory leak in GC of font cache

    * src/alloc.c (compact_font_cache_entry): Don't GC unmarked font
    entities if some of the fonts it references are marked.  This
    plugs a memory leak.  (Bug#21556)

^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2015-12-10  6:53     ` Paul Eggert
@ 2015-12-10  8:14       ` Artur Malabarba
  2015-12-10  8:57         ` David Kastrup
  0 siblings, 1 reply; 75+ messages in thread
From: Artur Malabarba @ 2015-12-10  8:14 UTC (permalink / raw)
  To: Paul Eggert; +Cc: Glenn Morris, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 985 bytes --]

On 10 Dec 2015 6:53 am, "Paul Eggert" <eggert@cs.ucla.edu> wrote:
> There's a larger performance hit between 20151109 and 20151110.  The log
for that time period (0730 Pacific cutoff) is attached as log2.txt.
Nothing jumps out, I'm afraid.
>

In one of my commis there I think I added (require 'map) to files.el, but I
don't think the impact of that would be so noticeable.

There's another commit there which could affect performance (it talks about
not using XFASTINT, in a function that is used a bajillion times throughout
core). It's this one by Eli.

commit 86c19714b097aa477d339ed99ffb5136c755a046
Author:     Eli Zaretskii <eliz@gnu.org>
AuthorDate: Mon Nov 9 10:31:45 2015
Commit:     Eli Zaretskii <eliz@gnu.org>
CommitDate: Mon Nov 9 10:31:45 2015

    Fix assertion violation in define-key

    * src/keymap.c (store_in_keymap): Don't use XFASTINT on non-character
    objects.  Reported by Drew Adams <drew.adams@oracle.com>
    and Juanma Barranquero <lekktu@gmail.com>.

[-- Attachment #2: Type: text/html, Size: 1429 bytes --]

^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2015-12-10  8:14       ` Artur Malabarba
@ 2015-12-10  8:57         ` David Kastrup
  0 siblings, 0 replies; 75+ messages in thread
From: David Kastrup @ 2015-12-10  8:57 UTC (permalink / raw)
  To: Artur Malabarba; +Cc: Glenn Morris, Paul Eggert, emacs-devel

Artur Malabarba <bruce.connor.am@gmail.com> writes:

> On 10 Dec 2015 6:53 am, "Paul Eggert" <eggert@cs.ucla.edu> wrote:
>> There's a larger performance hit between 20151109 and 20151110.  The log
> for that time period (0730 Pacific cutoff) is attached as log2.txt.
> Nothing jumps out, I'm afraid.
>>
>
> In one of my commis there I think I added (require 'map) to files.el, but I
> don't think the impact of that would be so noticeable.

If that _replaces_ some builtins by more generic stuff, that could
explain some of it.

> There's another commit there which could affect performance (it talks about
> not using XFASTINT, in a function that is used a bajillion times throughout
> core). It's this one by Eli.
>
> commit 86c19714b097aa477d339ed99ffb5136c755a046
> Author:     Eli Zaretskii <eliz@gnu.org>
> AuthorDate: Mon Nov 9 10:31:45 2015
> Commit:     Eli Zaretskii <eliz@gnu.org>
> CommitDate: Mon Nov 9 10:31:45 2015
>
>     Fix assertion violation in define-key
>
>     * src/keymap.c (store_in_keymap): Don't use XFASTINT on non-character
>     objects.  Reported by Drew Adams <drew.adams@oracle.com>
>     and Juanma Barranquero <lekktu@gmail.com>.

I doubt it is this one.  It may be used "bajillion times" throughout the
core, but as a rule not in a loop.  So XFASTINT may be replaced by XINT
(or whatever) a few ten thousands of times.  That should not be enough
to cause a significant difference.

-- 
David Kastrup



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2015-12-10  2:15 builds are getting slower? Glenn Morris
  2015-12-10  2:41 ` Paul Eggert
@ 2015-12-10 16:16 ` Eli Zaretskii
  2015-12-10 17:27   ` Glenn Morris
  1 sibling, 1 reply; 75+ messages in thread
From: Eli Zaretskii @ 2015-12-10 16:16 UTC (permalink / raw)
  To: Glenn Morris; +Cc: emacs-devel

> From: Glenn Morris <rgm@gnu.org>
> Date: Wed, 09 Dec 2015 21:15:38 -0500
> 
> Subjectively it felt to me lately like it was taking longer to build
> Emacs than it used to. When I looked at my daily build logs, that seems
> to be confirmed - see attached figure (time for a full bootstrap).
> In particular, things seem to have gotten about 30% slower around 10th
> November. Maybe (?) this is borne out by
> http://hydra.nixos.org/job/gnu/emacs-trunk/tarball#tabs-charts
> or maybe it isn't.

Strange: the plot at Hydra doesn't seem to show any perceptible
tendency towards longer times.  If I draw an imaginary line to show
the long-term average, it stays at about the same value.  Or maybe I
misunderstand the graphs there.

I have a few questions:

  . Are these are builds from master or from emacs-25?
  . Is this reproducible? i.e., if you checkout what was HEAD on
    Nov 5, do you get bootstrap time around the values recorded
    for that date?
  . Did anything change in Hydra system configuration since the
    beginning of the year?  I mean stuff like OS upgrades, changes in
    hardware (including disk drives), new versions of GCC and Binutils
    installed.
  . (Paul already asked this.) What are the configure-time and
    make-time options? are they identical in all these builds?

I tried byte compiling large files, and I don't see more than 10%
slowdown between some build near October end and a build a few days
ago.  I measured the same 10% in optimized and non-optimized builds
(of course, absolute times are different).  So this cannot explain a
30% increase in bootstrap time, at least not on my system.  Can you
try the same experiment on Hydra?



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2015-12-10 16:16 ` Eli Zaretskii
@ 2015-12-10 17:27   ` Glenn Morris
  2015-12-13  6:10     ` Paul Eggert
  0 siblings, 1 reply; 75+ messages in thread
From: Glenn Morris @ 2015-12-10 17:27 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel

Eli Zaretskii wrote:

> Strange: the plot at Hydra doesn't seem to show any perceptible
> tendency towards longer times.  If I draw an imaginary line to show
> the long-term average, it stays at about the same value.

I think so too.

>   . Are these are builds from master or from emacs-25?

master (emacs-25 didn't exist for most of the year).

>   . Is this reproducible? i.e., if you checkout what was HEAD on
>     Nov 5, do you get bootstrap time around the values recorded
>     for that date?

I haven't checked.
That would be a first step before spending any time on this.

>   . Did anything change in Hydra system configuration since the
>     beginning of the year?  I mean stuff like OS upgrades, changes in
>     hardware (including disk drives), new versions of GCC and Binutils
>     installed.

Don't know about the hardware, but the software changes all the time.
It's all recorded in the "build dependencies" tab.

>   . (Paul already asked this.) What are the configure-time and
>     make-time options? are they identical in all these builds?

These are non-parallel debug (CFLAGS=-O0 -g3) builds on x86_64 RHEL 7.1,
using the Lucid toolkit and almost all of the optional libraries
(ImageMagick etc) that Emacs supports. The build script was unchanged.

These builds were not done under scientific conditions. Sometimes the
system might have been doing something else. It has been getting the
normal round of OS updates during the year (although these are not
large for an "enterprise" distribution). 

> Can you try the same experiment on Hydra?

No; I have no more access to Hydra than you do.
It isn't set up for that kind of investigation.
I suggest forgetting about Hydra for the purposes of this discussion.

I'm not really interested in doing the detective work on this myself.
I just presented the data I had in case it piqued anyone else's interest.



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2015-12-10 17:27   ` Glenn Morris
@ 2015-12-13  6:10     ` Paul Eggert
  2015-12-13 21:53       ` Glenn Morris
  0 siblings, 1 reply; 75+ messages in thread
From: Paul Eggert @ 2015-12-13  6:10 UTC (permalink / raw)
  To: Glenn Morris; +Cc: emacs-devel

Glenn Morris wrote:
> I'm not really interested in doing the detective work on this myself.
> I just presented the data I had in case it piqued anyone else's interest.

In emacs-25 commit 09663d9b91803882508bd805581b95f8990eb441 I installed 
something that fixes the first performance glitch you observed (the smaller 
glitch). Whenever we get around to merging emacs-25 into master, that should fix 
things there too.

I couldn't reproduce the larger performance glitch, though. Is it possible that 
your build platform switched from Texinfo 4 to Texinfo 5 or 6? That could 
explain things, as the new 'makeinfo' is way slower.



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2015-12-13  6:10     ` Paul Eggert
@ 2015-12-13 21:53       ` Glenn Morris
  2015-12-13 23:53         ` Glenn Morris
  0 siblings, 1 reply; 75+ messages in thread
From: Glenn Morris @ 2015-12-13 21:53 UTC (permalink / raw)
  To: Paul Eggert; +Cc: emacs-devel

Paul Eggert wrote:

> Is it possible that your build platform switched from Texinfo 4 to
> Texinfo 5 or 6? That could explain things, as the new 'makeinfo' is
> way slower.

No. (I'm a /usr/local/bin/makeinfo-4 holdout for this very reason.)
At some point I'll try to check if I can reproduce that November change
building before and after versions on the same day.



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2015-12-13 21:53       ` Glenn Morris
@ 2015-12-13 23:53         ` Glenn Morris
  2015-12-14  3:31           ` Eli Zaretskii
  0 siblings, 1 reply; 75+ messages in thread
From: Glenn Morris @ 2015-12-13 23:53 UTC (permalink / raw)
  To: Paul Eggert; +Cc: emacs-devel


So I just checked. Times as measured today:

rev 536f6fc826b  (Dec 13th): 24m23.556s
rev 95a5c23f741  (Dec 12th): 25m39.348s
rev b9acb9502fd  (Nov 8th) : 21m33.631s

So for me the effect is real and not due to a system change.



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2015-12-13 23:53         ` Glenn Morris
@ 2015-12-14  3:31           ` Eli Zaretskii
  2015-12-14 22:20             ` John Wiegley
  2015-12-15  8:18             ` Glenn Morris
  0 siblings, 2 replies; 75+ messages in thread
From: Eli Zaretskii @ 2015-12-14  3:31 UTC (permalink / raw)
  To: Glenn Morris; +Cc: eggert, emacs-devel

> From: Glenn Morris <rgm@gnu.org>
> Date: Sun, 13 Dec 2015 18:53:56 -0500
> Cc: emacs-devel@gnu.org
> 
> 
> So I just checked. Times as measured today:
> 
> rev 536f6fc826b  (Dec 13th): 24m23.556s
> rev 95a5c23f741  (Dec 12th): 25m39.348s
> rev b9acb9502fd  (Nov 8th) : 21m33.631s
> 
> So for me the effect is real and not due to a system change.

Thanks.  The next step, IMO, is to see which part of the bootstrap is
25% (or 4 min) slower.  Is that the part that byte-compiles Lisp
files, or is that some other part?



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2015-12-14  3:31           ` Eli Zaretskii
@ 2015-12-14 22:20             ` John Wiegley
  2015-12-14 23:40               ` Paul Eggert
  2015-12-15  8:18             ` Glenn Morris
  1 sibling, 1 reply; 75+ messages in thread
From: John Wiegley @ 2015-12-14 22:20 UTC (permalink / raw)
  To: Glenn Morris, emacs-devel

>>>>> Eli Zaretskii <eliz@gnu.org> writes:

>> So I just checked. Times as measured today:
>> 
>> rev 536f6fc826b  (Dec 13th): 24m23.556s

Which part of this is "make", and which "make check"?  Are you doing a
bootstrap build, or a "clean" build?

-- 
John Wiegley                  GPG fingerprint = 4710 CF98 AF9B 327B B80F
http://newartisans.com                          60E1 46C4 BD1A 7AC1 4BA2



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2015-12-14 22:20             ` John Wiegley
@ 2015-12-14 23:40               ` Paul Eggert
  2015-12-15  0:38                 ` John Wiegley
  2015-12-15 13:12                 ` builds are getting slower? Phillip Lord
  0 siblings, 2 replies; 75+ messages in thread
From: Paul Eggert @ 2015-12-14 23:40 UTC (permalink / raw)
  To: emacs-devel

John Wiegley wrote:
> Which part of this is "make", and which "make check"?  Are you doing a
> bootstrap build, or a "clean" build?

When I reproduced the small part of the performance regression on Fedora x86-64 
(the part that's been fixed since then, on emacs-25), I did this:

./autogen.sh
./configure CFLAGS='-g3 -O0'
make -j5
time make bootstrap

So there's no 'make check', just a 'make bootstrap'.

'make check' is so slow that I normally don't run it these days. We should do 
what coreutils does, and run the expensive tests only if RUN_EXPENSIVE_TESTS=yes 
is in the environment.  coreutils has three categories of expensiveness, but 
Emacs could probably get by with two for now.



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2015-12-14 23:40               ` Paul Eggert
@ 2015-12-15  0:38                 ` John Wiegley
  2015-12-15  8:13                   ` Michael Albinus
  2016-01-03 20:02                   ` mark expensive tests (was: builds are getting slower?) Michael Albinus
  2015-12-15 13:12                 ` builds are getting slower? Phillip Lord
  1 sibling, 2 replies; 75+ messages in thread
From: John Wiegley @ 2015-12-15  0:38 UTC (permalink / raw)
  To: Paul Eggert; +Cc: emacs-devel

>>>>> Paul Eggert <eggert@cs.ucla.edu> writes:

> 'make check' is so slow that I normally don't run it these days. We should
> do what coreutils does, and run the expensive tests only if
> RUN_EXPENSIVE_TESTS=yes is in the environment. coreutils has three
> categories of expensiveness, but Emacs could probably get by with two for
> now.

That sounds like a great idea.  I usually define three too: sanity tests,
regular tests, extensive tests.

-- 
John Wiegley                  GPG fingerprint = 4710 CF98 AF9B 327B B80F
http://newartisans.com                          60E1 46C4 BD1A 7AC1 4BA2



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2015-12-15  0:38                 ` John Wiegley
@ 2015-12-15  8:13                   ` Michael Albinus
  2016-01-03 20:02                   ` mark expensive tests (was: builds are getting slower?) Michael Albinus
  1 sibling, 0 replies; 75+ messages in thread
From: Michael Albinus @ 2015-12-15  8:13 UTC (permalink / raw)
  To: Paul Eggert; +Cc: emacs-devel

John Wiegley <jwiegley@gmail.com> writes:

>>>>>> Paul Eggert <eggert@cs.ucla.edu> writes:
>
>> 'make check' is so slow that I normally don't run it these days. We should
>> do what coreutils does, and run the expensive tests only if
>> RUN_EXPENSIVE_TESTS=yes is in the environment. coreutils has three
>> categories of expensiveness, but Emacs could probably get by with two for
>> now.
>
> That sounds like a great idea.  I usually define three too: sanity tests,
> regular tests, extensive tests.

I'll would declare the following tests as extensive: autorevert-tests.el,
dbus-tests.el, filenotify-tests.el, tramp-tests.el.

All of them use events and timers, and they take their time. And all of
them written by me :-(

Another idea: those tests could check environment variable
RUN_EXPENSIVE_TESTS. If existing, they would run all tests, otherwise
they would run just a short version of them.

Best regards, Michael.



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2015-12-14  3:31           ` Eli Zaretskii
  2015-12-14 22:20             ` John Wiegley
@ 2015-12-15  8:18             ` Glenn Morris
  2015-12-15 12:38               ` Artur Malabarba
  2015-12-15 19:25               ` Glenn Morris
  1 sibling, 2 replies; 75+ messages in thread
From: Glenn Morris @ 2015-12-15  8:18 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: eggert, emacs-devel


On investigation, I find 2e84888 caused a 20% increase in build time.



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2015-12-15  8:18             ` Glenn Morris
@ 2015-12-15 12:38               ` Artur Malabarba
  2015-12-15 12:49                 ` David Kastrup
  2015-12-15 16:15                 ` Eli Zaretskii
  2015-12-15 19:25               ` Glenn Morris
  1 sibling, 2 replies; 75+ messages in thread
From: Artur Malabarba @ 2015-12-15 12:38 UTC (permalink / raw)
  To: Glenn Morris; +Cc: Eli Zaretskii, Paul Eggert, emacs-devel

2015-12-15 8:18 GMT+00:00 Glenn Morris <rgm@gnu.org>:
>
> On investigation, I find 2e84888 caused a 20% increase in build time.
>

Looks like that's my commit. I'm attaching the diff of this commit
below so that people can have a look and help pinpoint something.
I only see 2 things that could be to blame:

1. dir-locals-find-file changed quite a bit. I suspect it is called
once for each .el file we compile? In this situation, the local-vars
cache should kick in and avoid the slowness, but maybe there's a bug
where the cache is not being used.
2. There's a new (require 'map) inside one of the functions and a
(require 'seq) inside another. (I put these inside the functions so
that they would only be loaded when necessary, but if it's getting
loaded at boot, perhaps these should just go at the top level). Anyway
(require 'seq) could be a bit heavy because it uses cl-generic and
cl-extra, but I'd be really surprised if this amounted to 20% of the
build time.

--------------------------------------------------------------------------------
@ 2e8488858c7b8df40610c1cd3038348fdc9bf3ed
Author:     Artur Malabarba <bruce.connor.am@gmail.com>
AuthorDate: Sat Nov 7 13:54:56 2015 +0000
Commit:     Artur Malabarba <bruce.connor.am@gmail.com>
CommitDate: Tue Nov 10 13:04:31 2015 +0000

Parent:     cbaa040 * lisp/emacs-lisp/map.el (map-merge-with): New function
Merged:     (HEAD detached at 2e84888) debugging-package
Containing: (HEAD detached at 2e84888) emacs-25 master scratch/rest.el
Follows:    emacs-24.5-rc3-fixed (6527)

* lisp/files.el (dir-locals-file): Allow wildcards

(dir-locals-find-file, dir-locals-collect-variables)
(dir-locals-read-from-file): Update accordingly.
(hack-dir-local-variables): Rename a local variable.

* lisp/files-x.el (modify-dir-local-variable): Update accordingly

* lisp/help-fns.el (describe-variable): Update accordingly

* .gitignore: Add .dir-locals?.el

4 files changed, 154 insertions(+), 91 deletions(-)
.gitignore       |   1 +
lisp/files-x.el  |  29 ++++++----
lisp/files.el    | 172 +++++++++++++++++++++++++++++++++++--------------------
lisp/help-fns.el |  43 ++++++++------

modified   .gitignore
@@ -255,6 +255,7 @@ gnustmp*
 ChangeLog
 [0-9]*.patch
 [0-9]*.txt
+.dir-locals?.el
 /vc-dwim-log-*

 # Built by 'make install'.
modified   lisp/files-x.el
@@ -429,18 +429,25 @@ modify-dir-local-variable
   (catch 'exit
     (unless enable-local-variables
       (throw 'exit (message "Directory-local variables are disabled")))
-    (let ((variables-file (or (and (buffer-file-name)
-   (not (file-remote-p (buffer-file-name)))
-   (dir-locals-find-file (buffer-file-name)))
-      dir-locals-file))
+    (let ((variables-file (and (buffer-file-name)
+                               (not (file-remote-p (buffer-file-name)))
+                               (dir-locals-find-file (buffer-file-name))))
   variables)
-      (if (consp variables-file) ; result from cache
-  ;; If cache element has an mtime, assume it came from a file.
-  ;; Otherwise, assume it was set directly.
-  (setq variables-file (if (nth 2 variables-file)
-   (expand-file-name dir-locals-file
-     (car variables-file))
- (cadr variables-file))))
+      (setq variables-file
+            ;; If there are several .dir-locals, the user probably
+            ;; wants to edit the last one (the highest priority).
+            (cond ((stringp variables-file)
+                   (car (last (dir-locals--all-files variables-file))))
+                  ((consp variables-file) ; result from cache
+                   ;; If cache element has an mtime, assume it came
from a file.
+                   ;; Otherwise, assume it was set directly.
+                   (if (nth 2 variables-file)
+                       (car (last (dir-locals--all-files (car
variables-file))))
+                     (cadr variables-file)))
+                  ;; Try to make a proper file-name.  This doesn't cover all
+                  ;; wildcards, but it covers the default value of
`dir-locals-file'.
+                  (t (replace-regexp-in-string
+                      "\\*" "" (replace-regexp-in-string  "\\?" "-"
dir-locals-file)))))
       ;; I can't be bothered to handle this case right now.
       ;; Dir locals were set directly from a class.  You need to
       ;; directly modify the class in dir-locals-class-alist.
modified   lisp/files.el
@@ -3648,7 +3648,7 @@ dir-locals-collect-variables
       (error
        ;; The file's content might be invalid (e.g. have a merge conflict), but
        ;; that shouldn't prevent the user from opening the file.
-       (message ".dir-locals error: %s" (error-message-string err))
+       (message "%s error: %s" dir-locals-file (error-message-string err))
        nil))))

 (defun dir-locals-set-directory-class (directory class &optional mtime)
@@ -3698,11 +3698,38 @@ dir-locals-set-class-variables
   applied by recursively following these rules."
   (setf (alist-get class dir-locals-class-alist) variables))

-(defconst dir-locals-file ".dir-locals.el"
+(defconst dir-locals-file ".dir-locals*.el"
   "File that contains directory-local variables.
 It has to be constant to enforce uniform values
 across different environments and users.")

+(defcustom dir-locals-sort-predicate #'string<
+  "Predicate used to sort dir-locals files before loading them.
+The function should take two arguments (file names) and return
+non-nil if the first argument should be loaded first (which means
+the values in the second file will override those in the first)."
+  :group 'files
+  :type 'function)
+
+(defun dir-locals--all-files (file-or-dir)
+  "Return a list of all readable dir-locals files matching FILE-OR-DIR.
+If FILE-OR-DIR is a file pattern, expand wildcards in it and
+return a sorted list of the results.  If it is a directory name,
+return a sorted list of all files matching `dir-locals-file' in
+this directory."
+  (require 'seq)
+  (let ((default-directory (if (file-directory-p file-or-dir)
+                               file-or-dir
+                             default-directory)))
+    (sort (seq-filter (lambda (f) (and (file-readable-p f)
+                                  (file-regular-p f)))
+                      (file-expand-wildcards
+                       (cond ((not (file-directory-p file-or-dir)) file-or-dir)
+                             ((eq system-type 'ms-dos)
(dosified-file-name dir-locals-file))
+                             (t dir-locals-file))
+                       'full))
+          dir-locals-sort-predicate)))
+
 (defun dir-locals-find-file (file)
   "Find the directory-local variables for FILE.
 This searches upward in the directory tree from FILE.
@@ -3719,75 +3746,96 @@ dir-locals-find-file
 This function returns either nil (no directory local variables found),
 or the matching entry from `dir-locals-directory-cache' (a list),
 or the full path to the `dir-locals-file' (a string) in the case
-of no valid cache entry."
+of no valid cache entry.  If `dir-locals-file' contains
+wildcards, then the return value is not a proper filename, it is
+an absolute version of `dir-locals-file' which is guaranteed to
+expand to at least one file."
   (setq file (expand-file-name file))
-  (let* ((dir-locals-file-name
-  (if (eq system-type 'ms-dos)
-      (dosified-file-name dir-locals-file)
-    dir-locals-file))
- (locals-file (locate-dominating-file file dir-locals-file-name))
- (dir-elt nil))
+  (let* ((dir-locals-file-name (if (eq system-type 'ms-dos)
+                                   (dosified-file-name dir-locals-file)
+                                 dir-locals-file))
+         (locals-dir (locate-dominating-file
+                      (file-name-directory file)
+                      (lambda (dir)
+                        (let ((default-directory dir))
+                          (file-expand-wildcards dir-locals-file-name
'full)))))
+         locals-file dir-elt)
     ;; `locate-dominating-file' may have abbreviated the name.
-    (and locals-file
- (setq locals-file (expand-file-name dir-locals-file-name locals-file)))
- ;; Let dir-locals-read-from-file inform us via demoted-errors
- ;; about unreadable files, etc.
- ;; Maybe we'd want to keep searching though - that is
- ;; a locate-dominating-file issue.
+    (when locals-dir
+      (setq locals-dir (expand-file-name locals-dir))
+      (setq locals-file (expand-file-name dir-locals-file-name locals-dir)))
+    ;; Let dir-locals-read-from-file inform us via demoted-errors
+    ;; about unreadable files, etc.
+    ;; Maybe we'd want to keep searching though - that is
+    ;; a locate-dominating-file issue.
 ;;; (or (not (file-readable-p locals-file))
 ;;;     (not (file-regular-p locals-file)))
 ;;; (setq locals-file nil))
     ;; Find the best cached value in `dir-locals-directory-cache'.
     (dolist (elt dir-locals-directory-cache)
       (when (and (string-prefix-p (car elt) file
-  (memq system-type
- '(windows-nt cygwin ms-dos)))
- (> (length (car elt)) (length (car dir-elt))))
- (setq dir-elt elt)))
+                                  (memq system-type
+                                        '(windows-nt cygwin ms-dos)))
+                 (> (length (car elt)) (length (car dir-elt))))
+        (setq dir-elt elt)))
     (if (and dir-elt
-     (or (null locals-file)
- (<= (length (file-name-directory locals-file))
-     (length (car dir-elt)))))
- ;; Found a potential cache entry.  Check validity.
- ;; A cache entry with no MTIME is assumed to always be valid
- ;; (ie, set directly, not from a dir-locals file).
- ;; Note, we don't bother to check that there is a matching class
- ;; element in dir-locals-class-alist, since that's done by
- ;; dir-locals-set-directory-class.
- (if (or (null (nth 2 dir-elt))
- (let ((cached-file (expand-file-name dir-locals-file-name
-     (car dir-elt))))
-  (and (file-readable-p cached-file)
-       (equal (nth 2 dir-elt)
-      (nth 5 (file-attributes cached-file))))))
-    ;; This cache entry is OK.
-    dir-elt
-  ;; This cache entry is invalid; clear it.
-  (setq dir-locals-directory-cache
- (delq dir-elt dir-locals-directory-cache))
-  ;; Return the first existing dir-locals file.  Might be the same
-  ;; as dir-elt's, might not (eg latter might have been deleted).
-  locals-file)
+             (or (null locals-dir)
+                 (<= (length locals-dir)
+                     (length (car dir-elt)))))
+        ;; Found a potential cache entry.  Check validity.
+        ;; A cache entry with no MTIME is assumed to always be valid
+        ;; (ie, set directly, not from a dir-locals file).
+        ;; Note, we don't bother to check that there is a matching class
+        ;; element in dir-locals-class-alist, since that's done by
+        ;; dir-locals-set-directory-class.
+        (if (or (null (nth 2 dir-elt))
+                (let ((cached-files (dir-locals--all-files (car dir-elt))))
+                  ;; The entry MTIME should match the most recent
+                  ;; MTIME among matching files.
+                  (and cached-files
+                       (= (time-to-seconds (nth 2 dir-elt))
+                          (apply #'max (mapcar (lambda (f)
(time-to-seconds (nth 5 (file-attributes f))))
+                                               cached-files))))))
+            ;; This cache entry is OK.
+            dir-elt
+          ;; This cache entry is invalid; clear it.
+          (setq dir-locals-directory-cache
+                (delq dir-elt dir-locals-directory-cache))
+          ;; Return the first existing dir-locals file.  Might be the same
+          ;; as dir-elt's, might not (eg latter might have been deleted).
+          locals-file)
       ;; No cache entry.
       locals-file)))

 (defun dir-locals-read-from-file (file)
   "Load a variables FILE and register a new class and instance.
-FILE is the name of the file holding the variables to apply.
+FILE is the absolute name of the file holding the variables to
+apply.  It may contain wildcards.
 The new class name is the same as the directory in which FILE
 is found.  Returns the new class name."
-  (with-temp-buffer
+  (require 'map)
+  (let* ((dir-name (file-name-directory file))
+         (class-name (intern dir-name))
+         (files (dir-locals--all-files file))
+         (read-circle nil)
+         (variables))
     (with-demoted-errors "Error reading dir-locals: %S"
-      (insert-file-contents file)
-      (unless (zerop (buffer-size))
-        (let* ((dir-name (file-name-directory file))
-               (class-name (intern dir-name))
-               (variables (let ((read-circle nil))
-                            (read (current-buffer)))))
-          (dir-locals-set-class-variables class-name variables)
-          (dir-locals-set-directory-class dir-name class-name
-                                          (nth 5 (file-attributes file)))
-          class-name)))))
+      (dolist (file files)
+        (with-temp-buffer
+          (insert-file-contents file)
+          (condition-case-unless-debug nil
+              (setq variables
+                    (map-merge-with 'list (lambda (a b) (map-merge 'list a b))
+                                    variables
+                                    (read (current-buffer))))
+            (end-of-file nil)))))
+    (dir-locals-set-class-variables class-name variables)
+    (dir-locals-set-directory-class
+     dir-name class-name
+     (seconds-to-time (apply #'max (mapcar (lambda (file)
+                                             (time-to-seconds (nth 5
(file-attributes file))))
+                                           files))))
+    class-name))

 (defcustom enable-remote-dir-locals nil
   "Non-nil means dir-local variables will be applied to remote files."
@@ -3810,17 +3858,17 @@ hack-dir-local-variables
  (not (file-remote-p (or (buffer-file-name)
  default-directory)))))
     ;; Find the variables file.
-    (let ((variables-file (dir-locals-find-file
-                           (or (buffer-file-name) default-directory)))
+    (let ((file-pattern-or-cache (dir-locals-find-file
+                                  (or (buffer-file-name) default-directory)))
   (class nil)
   (dir-name nil))
       (cond
-       ((stringp variables-file)
- (setq dir-name (file-name-directory variables-file)
-      class (dir-locals-read-from-file variables-file)))
-       ((consp variables-file)
- (setq dir-name (nth 0 variables-file))
- (setq class (nth 1 variables-file))))
+       ((stringp file-pattern-or-cache)
+ (setq dir-name (file-name-directory file-pattern-or-cache)
+      class (dir-locals-read-from-file file-pattern-or-cache)))
+       ((consp file-pattern-or-cache)
+ (setq dir-name (nth 0 file-pattern-or-cache))
+ (setq class (nth 1 file-pattern-or-cache))))
       (when class
  (let ((variables
        (dir-locals-collect-variables
modified   lisp/help-fns.el
@@ -907,29 +907,36 @@ describe-variable
                                             (buffer-file-name buffer)))
                                       (dir-locals-find-file
                                        (buffer-file-name buffer))))
-                          (dir-file t))
+                          (is-directory nil))
       (princ (substitute-command-keys
       "  This variable's value is directory-local"))
-      (if (null file)
-  (princ ".\n")
- (princ ", set ")
-                        (if (consp file) ; result from cache
-                            ;; If the cache element has an mtime, we
-                            ;; assume it came from a file.
-                            (if (nth 2 file)
-                                (setq file (expand-file-name
-                                            dir-locals-file (car file)))
-                              ;; Otherwise, assume it was set directly.
-                              (setq file (car file)
-                                    dir-file nil)))
- (princ (substitute-command-keys
-                                (if dir-file
-                                    "by the file\n  `"
-                                  "for the directory\n  `")))
+                      (when (consp file) ; result from cache
+                        ;; If the cache element has an mtime, we
+                        ;; assume it came from a file.
+                        (if (nth 2 file)
+                            (setq file (expand-file-name
+                                        dir-locals-file (car file)))
+                          ;; Otherwise, assume it was set directly.
+                          (setq file (car file)
+                                is-directory t)))
+                      (if (null file)
+                          (princ ".\n")
+                        (princ ", set ")
+                        (let ((files (file-expand-wildcards file)))
+                          (princ (substitute-command-keys
+                                  (cond
+                                   (is-directory "for the directory\n  `")
+                                   ;; Many files matched.
+                                   ((cdr files)
+                                    (setq file (file-name-directory
(car files)))
+                                    (format "by a file\n  matching
`%s' in the directory\n  `"
+                                            dir-locals-file))
+                                   (t (setq file (car files))
+                                      "by the file\n  `"))))
  (with-current-buffer standard-output
   (insert-text-button
    file 'type 'help-dir-local-var-def
-   'help-args (list variable file)))
+                             'help-args (list variable file))))
  (princ (substitute-command-keys "'.\n"))))
   (princ (substitute-command-keys
   "  This variable's value is file-local.\n"))))



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2015-12-15 12:38               ` Artur Malabarba
@ 2015-12-15 12:49                 ` David Kastrup
  2015-12-15 16:15                 ` Eli Zaretskii
  1 sibling, 0 replies; 75+ messages in thread
From: David Kastrup @ 2015-12-15 12:49 UTC (permalink / raw)
  To: Artur Malabarba; +Cc: Glenn Morris, Eli Zaretskii, Paul Eggert, emacs-devel

Artur Malabarba <bruce.connor.am@gmail.com> writes:

> 2015-12-15 8:18 GMT+00:00 Glenn Morris <rgm@gnu.org>:
>>
>> On investigation, I find 2e84888 caused a 20% increase in build time.
>>
>
> Looks like that's my commit. I'm attaching the diff of this commit
> below so that people can have a look and help pinpoint something.
> I only see 2 things that could be to blame:

This is a very, very large commit.  It should have been split into
multiple commits addressing separate issues.  However, in the
description one thing stands out:

> * lisp/files.el (dir-locals-file): Allow wildcards

Depending on how the wildcard search is organized, this may make the
decisive difference.

Can people split the timing tests into user and system time?  Because if
the directory search is at fault, it may be the system time that hits
here.

-- 
David Kastrup



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2015-12-14 23:40               ` Paul Eggert
  2015-12-15  0:38                 ` John Wiegley
@ 2015-12-15 13:12                 ` Phillip Lord
  1 sibling, 0 replies; 75+ messages in thread
From: Phillip Lord @ 2015-12-15 13:12 UTC (permalink / raw)
  To: Paul Eggert; +Cc: emacs-devel

Paul Eggert <eggert@cs.ucla.edu> writes:

> John Wiegley wrote:
>> Which part of this is "make", and which "make check"?  Are you doing a
>> bootstrap build, or a "clean" build?
>
> When I reproduced the small part of the performance regression on Fedora
> x86-64 (the part that's been fixed since then, on emacs-25), I did this:
>
> ./autogen.sh
> ./configure CFLAGS='-g3 -O0'
> make -j5
> time make bootstrap
>
> So there's no 'make check', just a 'make bootstrap'.
>
> 'make check' is so slow that I normally don't run it these days. We should do
> what coreutils does, and run the expensive tests only if
> RUN_EXPENSIVE_TESTS=yes is in the environment.  coreutils has three categories
> of expensiveness, but Emacs could probably get by with two for now.


When you get to master, make check-maybe should be pretty quick
(although not from bootstrap) now.

In the ideal world, it would be nice to include this in the pre-commit
hook, although that might be impractical in the short term.

Phil



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
@ 2015-12-15 14:23 Pádraig Brady
  0 siblings, 0 replies; 75+ messages in thread
From: Pádraig Brady @ 2015-12-15 14:23 UTC (permalink / raw)
  To: michael.albinus; +Cc: emacs-devel

I noticed you mentioned inotify tests were slow on emacs.
tail(1) tests in coreutils had the same issue,
and when fixed it identified harder to hit race bugs within tail
as well as greatly speeding up the test runs as shown below:

  $ time make -j8 check TESTS="..."
  real 0m4.886s
  user 0m5.375s
  sys 0m4.565s
  =======================================================
  Testsuite summary for GNU coreutils 8.24.107-e369f
  =======================================================
  # TOTAL: 29
  # PASS:  28
  # SKIP:  1

The main technique used in those tests was a truncated exponential back-off
mechanism, which allows for faster operation in the normal case, but
will add extra delays where required. See the use of retry_delay_():
git.sv.gnu.org/gitweb/?p=coreutils.git;a=blob;f=init.cfg;h=e4309ae5;hb=HEAD#l628

cheers,
Pádraig.



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2015-12-15 12:38               ` Artur Malabarba
  2015-12-15 12:49                 ` David Kastrup
@ 2015-12-15 16:15                 ` Eli Zaretskii
  2015-12-16 11:50                   ` Artur Malabarba
  1 sibling, 1 reply; 75+ messages in thread
From: Eli Zaretskii @ 2015-12-15 16:15 UTC (permalink / raw)
  To: bruce.connor.am; +Cc: rgm, eggert, emacs-devel

> Date: Tue, 15 Dec 2015 12:38:07 +0000
> From: Artur Malabarba <bruce.connor.am@gmail.com>
> Cc: Eli Zaretskii <eliz@gnu.org>, Paul Eggert <eggert@cs.ucla.edu>, emacs-devel <emacs-devel@gnu.org>
> 
> > On investigation, I find 2e84888 caused a 20% increase in build time.
> >
> 
> Looks like that's my commit. I'm attaching the diff of this commit
> below so that people can have a look and help pinpoint something.
> I only see 2 things that could be to blame:
> 
> 1. dir-locals-find-file changed quite a bit. I suspect it is called
> once for each .el file we compile? In this situation, the local-vars
> cache should kick in and avoid the slowness, but maybe there's a bug
> where the cache is not being used.
> 2. There's a new (require 'map) inside one of the functions and a
> (require 'seq) inside another. (I put these inside the functions so
> that they would only be loaded when necessary, but if it's getting
> loaded at boot, perhaps these should just go at the top level). Anyway
> (require 'seq) could be a bit heavy because it uses cl-generic and
> cl-extra, but I'd be really surprised if this amounted to 20% of the
> build time.

Maybe I'm reading the code wrongly, but it looks like even before the
cache could kick in, dir-locals-find-file calls
locate-dominating-file, passing it dir-locals--all-files as its
predicate.  This has 2 effects: (a) it loads "seq", and (b) it calls
file-expand-wildcards, which needs to read the entire directory and
then match each file against a regexp.

Could these be the cause of slowdown?



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2015-12-15  8:18             ` Glenn Morris
  2015-12-15 12:38               ` Artur Malabarba
@ 2015-12-15 19:25               ` Glenn Morris
  2015-12-15 19:40                 ` David Kastrup
  1 sibling, 1 reply; 75+ messages in thread
From: Glenn Morris @ 2015-12-15 19:25 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: eggert, emacs-devel


PS actual (one-off) numbers:

2e84888:
real    25m28.352s
user    24m22.170s
sys     1m7.141s

cbaa040:
real    21m10.912s
user    20m8.635s
sys     1m4.202s



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2015-12-15 19:25               ` Glenn Morris
@ 2015-12-15 19:40                 ` David Kastrup
  0 siblings, 0 replies; 75+ messages in thread
From: David Kastrup @ 2015-12-15 19:40 UTC (permalink / raw)
  To: Glenn Morris; +Cc: Eli Zaretskii, eggert, emacs-devel

Glenn Morris <rgm@gnu.org> writes:

> PS actual (one-off) numbers:
>
> 2e84888:
> real    25m28.352s
> user    24m22.170s
> sys     1m7.141s
>
> cbaa040:
> real    21m10.912s
> user    20m8.635s
> sys     1m4.202s

Ok, so it's not significantly the system calls themselves but the time
Emacs spends working with their results.

-- 
David Kastrup



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2015-12-15 16:15                 ` Eli Zaretskii
@ 2015-12-16 11:50                   ` Artur Malabarba
  2015-12-16 11:58                     ` Eli Zaretskii
  2015-12-17  2:13                     ` Glenn Morris
  0 siblings, 2 replies; 75+ messages in thread
From: Artur Malabarba @ 2015-12-16 11:50 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Glenn Morris, eggert, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 922 bytes --]

On 15 Dec 2015 4:15 pm, "Eli Zaretskii" <eliz@gnu.org> wrote:
>
> Maybe I'm reading the code wrongly, but it looks like even before the
> cache could kick in, dir-locals-find-file calls
> locate-dominating-file, passing it dir-locals--all-files as its
> predicate.  This has 2 effects: (a) it loads "seq", and (b) it calls
> file-expand-wildcards, which needs to read the entire directory and
> then match each file against a regexp.
>
> Could these be the cause of slowdown?

Probably. And no, You're not reading it wrong.
We need to locate the dir locals file(s) in order to compare its timestamp
to the cache. Do we have a faster way of expanding wildcards?

Maybe it would be faster to not allow wildcards at all, and just have a
fixed regexp that we use in directory-files.

If that doesn't help, then we could also forgo of the regexp, and just have
two allowed filenames (like .dir-locals.el and .dir-locals-2.el).

[-- Attachment #2: Type: text/html, Size: 1143 bytes --]

^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2015-12-16 11:50                   ` Artur Malabarba
@ 2015-12-16 11:58                     ` Eli Zaretskii
  2015-12-16 13:09                       ` Artur Malabarba
  2016-01-16  8:55                       ` Artur Malabarba
  2015-12-17  2:13                     ` Glenn Morris
  1 sibling, 2 replies; 75+ messages in thread
From: Eli Zaretskii @ 2015-12-16 11:58 UTC (permalink / raw)
  To: bruce.connor.am; +Cc: rgm, eggert, emacs-devel

> Date: Wed, 16 Dec 2015 11:50:11 +0000
> From: Artur Malabarba <bruce.connor.am@gmail.com>
> Cc: emacs-devel <emacs-devel@gnu.org>, Glenn Morris <rgm@gnu.org>, eggert@cs.ucla.edu
> 
> We need to locate the dir locals file(s) in order to compare its timestamp to
> the cache. Do we have a faster way of expanding wildcards? 

Does it have to be wildcards?  Will file-name-all-completions not do?

And why exactly this code needs to run when we need to byte-compile
Lisp files, btw?

Also, since we know only very well which dir-local files are present
in the Emacs tree, we could make some trick (like binding a special
variable) for this case.  After all, 20% is only clearly visible when
the total build time is long, and that doesn't happen a lot outside of
bootstrapping Emacs.

In any case, I suggest to profile this code, before we decide that
this is indeed the culprit.  It could be something utterly unrelated.



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2015-12-16 11:58                     ` Eli Zaretskii
@ 2015-12-16 13:09                       ` Artur Malabarba
  2015-12-16 13:25                         ` David Kastrup
  2016-01-16  8:55                       ` Artur Malabarba
  1 sibling, 1 reply; 75+ messages in thread
From: Artur Malabarba @ 2015-12-16 13:09 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Glenn Morris, eggert, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 861 bytes --]

On 16 Dec 2015 11:58 am, "Eli Zaretskii" <eliz@gnu.org> wrote:
> > We need to locate the dir locals file(s) in order to compare its
timestamp to
> > the cache. Do we have a faster way of expanding wildcards?
>
> Does it have to be wildcards?  Will file-name-all-completions not do?

Yes, I think we can do that.

> And why exactly this code needs to run when we need to byte-compile
> Lisp files, btw?

I suspect it's because the byte-compiler is affected by local variables, so
it needs to know them. We could certainly add some shortcut or let-bind a
variable for the purpose of slipping this during emacs bootstrap.

> In any case, I suggest to profile this code, before we decide that
> this is indeed the culprit.  It could be something utterly unrelated.

Indeed. I'll be glad to do it myself once things settle down here (which
might be around January).

[-- Attachment #2: Type: text/html, Size: 1087 bytes --]

^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2015-12-16 13:09                       ` Artur Malabarba
@ 2015-12-16 13:25                         ` David Kastrup
  2015-12-16 13:53                           ` Eli Zaretskii
  0 siblings, 1 reply; 75+ messages in thread
From: David Kastrup @ 2015-12-16 13:25 UTC (permalink / raw)
  To: Artur Malabarba; +Cc: Glenn Morris, Eli Zaretskii, eggert, emacs-devel

Artur Malabarba <bruce.connor.am@gmail.com> writes:

> On 16 Dec 2015 11:58 am, "Eli Zaretskii" <eliz@gnu.org> wrote:
>> > We need to locate the dir locals file(s) in order to compare its
> timestamp to
>> > the cache. Do we have a faster way of expanding wildcards?
>>
>> Does it have to be wildcards?  Will file-name-all-completions not do?
>
> Yes, I think we can do that.
>
>> And why exactly this code needs to run when we need to byte-compile
>> Lisp files, btw?
>
> I suspect it's because the byte-compiler is affected by local variables, so
> it needs to know them.

Not really.  It loads the files, and loading the files sets the
directory-local variables.  I don't think it is a good idea to use them
for byte compilation even though I have to admit that a directory-wide
setting of `lexical-binding' would seem less ugly than putting it in
every file manually.  But it sounds like a recipe for trouble.

-- 
David Kastrup



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2015-12-16 13:25                         ` David Kastrup
@ 2015-12-16 13:53                           ` Eli Zaretskii
  2015-12-17  2:11                             ` Glenn Morris
  0 siblings, 1 reply; 75+ messages in thread
From: Eli Zaretskii @ 2015-12-16 13:53 UTC (permalink / raw)
  To: David Kastrup; +Cc: rgm, eggert, bruce.connor.am, emacs-devel

> From: David Kastrup <dak@gnu.org>
> Cc: Eli Zaretskii <eliz@gnu.org>,  Glenn Morris <rgm@gnu.org>,  eggert@cs.ucla.edu,  emacs-devel <emacs-devel@gnu.org>
> Date: Wed, 16 Dec 2015 14:25:56 +0100
> 
> >> And why exactly this code needs to run when we need to byte-compile
> >> Lisp files, btw?
> >
> > I suspect it's because the byte-compiler is affected by local variables, so
> > it needs to know them.
> 
> Not really.  It loads the files, and loading the files sets the
> directory-local variables.  I don't think it is a good idea to use them
> for byte compilation even though I have to admit that a directory-wide
> setting of `lexical-binding' would seem less ugly than putting it in
> every file manually.  But it sounds like a recipe for trouble.

We can disable that.



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2015-12-16 13:53                           ` Eli Zaretskii
@ 2015-12-17  2:11                             ` Glenn Morris
  2015-12-17 16:06                               ` John Wiegley
  0 siblings, 1 reply; 75+ messages in thread
From: Glenn Morris @ 2015-12-17  2:11 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: David Kastrup, emacs-devel, bruce.connor.am, eggert


>> >> And why exactly this code needs to run when we need to byte-compile
>> >> Lisp files, btw?

It's run whenever Emacs visits a file, thus making code efficiency very
important.

>> Not really.  It loads the files, and loading the files sets the
>> directory-local variables.  I don't think it is a good idea to use them
>> for byte compilation even though I have to admit that a directory-wide
>> setting of `lexical-binding' would seem less ugly than putting it in
>> every file manually.  But it sounds like a recipe for trouble.
>
> We can disable that.

IIRC, Stefan was against this kind of thing; ie, making tweaks to the
build process to work around an issue that would otherwise be present
in normal Emacs usage. The feeling was that we should fix issues
properly, for everyone, rather than hiding them. The context in which
it came up before was VC, which, like dir-locals, is another operation
that runs every time Emacs visits a file, so also needs careful
treatment. I think I agree with him more now then I did back then.

(Outside of that general principle, I can actually see dir-locals
possibly being wanted during byte-compilation in future.)

Irrespective of the details, personally I'd like to see this code
rewritten to avoid requiring seq (which it does whenever Emacs visits a
file) and map (which it does whenever a dir-locals is present); ie avoid
non-preloaded libraries.

But you are right that actually profiling things is the place to start.



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2015-12-16 11:50                   ` Artur Malabarba
  2015-12-16 11:58                     ` Eli Zaretskii
@ 2015-12-17  2:13                     ` Glenn Morris
  1 sibling, 0 replies; 75+ messages in thread
From: Glenn Morris @ 2015-12-17  2:13 UTC (permalink / raw)
  To: bruce.connor.am; +Cc: Eli Zaretskii, eggert, emacs-devel

Artur Malabarba wrote:

> If that doesn't help, then we could also forgo of the regexp, and just have
> two allowed filenames (like .dir-locals.el and .dir-locals-2.el).

BTW, if the aim (?) is to allow overriding of dir-locals.el, can't
direct application of dir-locals-set-directory-class etc do that,
without the need to allow multiple dir-locals files to exist?



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2015-12-17  2:11                             ` Glenn Morris
@ 2015-12-17 16:06                               ` John Wiegley
  0 siblings, 0 replies; 75+ messages in thread
From: John Wiegley @ 2015-12-17 16:06 UTC (permalink / raw)
  To: Glenn Morris
  Cc: eggert, Eli Zaretskii, David Kastrup, bruce.connor.am,
	emacs-devel

>>>>> Glenn Morris <rgm@gnu.org> writes:

> IIRC, Stefan was against this kind of thing; ie, making tweaks to the build
> process to work around an issue that would otherwise be present in normal
> Emacs usage. The feeling was that we should fix issues properly, for
> everyone, rather than hiding them. The context in which it came up before
> was VC, which, like dir-locals, is another operation that runs every time
> Emacs visits a file, so also needs careful treatment. I think I agree with
> him more now then I did back then.

I also agree.

-- 
John Wiegley                  GPG fingerprint = 4710 CF98 AF9B 327B B80F
http://newartisans.com                          60E1 46C4 BD1A 7AC1 4BA2



^ permalink raw reply	[flat|nested] 75+ messages in thread

* mark expensive tests (was: builds are getting slower?)
  2015-12-15  0:38                 ` John Wiegley
  2015-12-15  8:13                   ` Michael Albinus
@ 2016-01-03 20:02                   ` Michael Albinus
  2016-01-03 20:09                     ` mark expensive tests John Wiegley
  1 sibling, 1 reply; 75+ messages in thread
From: Michael Albinus @ 2016-01-03 20:02 UTC (permalink / raw)
  To: emacs-devel

John Wiegley <jwiegley@gmail.com> writes:

>>>>>> Paul Eggert <eggert@cs.ucla.edu> writes:
>
>> 'make check' is so slow that I normally don't run it these days. We should
>> do what coreutils does, and run the expensive tests only if
>> RUN_EXPENSIVE_TESTS=yes is in the environment. coreutils has three
>> categories of expensiveness, but Emacs could probably get by with two for
>> now.
>
> That sounds like a great idea.  I usually define three too: sanity tests,
> regular tests, extensive tests.

Do we have an agreement how to handle this? There was no further
reaction for 3 weeks ...

Best regards, Michael.



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: mark expensive tests
  2016-01-03 20:02                   ` mark expensive tests (was: builds are getting slower?) Michael Albinus
@ 2016-01-03 20:09                     ` John Wiegley
  2016-01-03 20:40                       ` Paul Eggert
  2016-01-04 15:47                       ` Eli Zaretskii
  0 siblings, 2 replies; 75+ messages in thread
From: John Wiegley @ 2016-01-03 20:09 UTC (permalink / raw)
  To: Michael Albinus; +Cc: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 1871 bytes --]

>>>>> Michael Albinus <michael.albinus@gmx.de> writes:

>> That sounds like a great idea.  I usually define three too: sanity tests,
>> regular tests, extensive tests.

> Do we have an agreement how to handle this? There was no further reaction
> for 3 weeks ...

Yes, we will have three test intensity levels:

  1. Sanity tests just make sure that the environment works, and the whole of
     them should run in <30 seconds on typical hardware. Some shops call these
     'smoke tests', as they are just there to make sure that Emacs can
     function in the most basic ways.

  2. Regular tests do not incur intensive CPU or memory costs, and so can be
     run on any hardware. These should finish on a scale of minutes, likely
     <10 minutes at the most.

  3. Extensive tests are given free reign, and may not even be able to
     complete on systems with CPU or memory constraints. These should feel
     free to take up to an hour, maybe even beyond.

  4. Selective tests are never run automatically, but exist to stress test
     some particular area of the system. These could take days, it doesn't
     really matter what their requirements are.

Each test should be marked, and the test runner should take these into account
and provide options for picking which grade of test (or lower) to be run. This
way I can tell Nix to build and run #2 tests. 'make check' should run #2,
'make fullcheck' should run #3, and there should be individual check targets
for the tests in #4.

I'd especially like the file-notify tests to move to #3, since these are what
consistently bog down my testing environment.

Michael, are these changes you would be interested in making?

-- 
John Wiegley                  GPG fingerprint = 4710 CF98 AF9B 327B B80F
http://newartisans.com                          60E1 46C4 BD1A 7AC1 4BA2

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 629 bytes --]

^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: mark expensive tests
  2016-01-03 20:09                     ` mark expensive tests John Wiegley
@ 2016-01-03 20:40                       ` Paul Eggert
  2016-01-03 21:08                         ` John Wiegley
  2016-01-04 15:48                         ` Eli Zaretskii
  2016-01-04 15:47                       ` Eli Zaretskii
  1 sibling, 2 replies; 75+ messages in thread
From: Paul Eggert @ 2016-01-03 20:40 UTC (permalink / raw)
  To: emacs-devel

John Wiegley wrote:

>   1. Sanity tests just make sure that the environment works, and the whole of
>      them should run in <30 seconds on typical hardware. Some shops call these
>      'smoke tests'...
>   2. Regular tests ..., likely <10 minutes at the most.
>   3. Extensive tests ...
>   4. Selective tests ...

> ...  'make check' should run #2,

Although that all sounds fine, if 'make check' takes 10 minutes then I likely 
won't run it routinely. I'm just not that patient. I suggest an easy-to-remember 
name for #1, 'make smoke' say, which people like me can try to run more often.



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: mark expensive tests
  2016-01-03 20:40                       ` Paul Eggert
@ 2016-01-03 21:08                         ` John Wiegley
  2016-01-03 21:43                           ` Paul Eggert
  2016-01-04 15:49                           ` Eli Zaretskii
  2016-01-04 15:48                         ` Eli Zaretskii
  1 sibling, 2 replies; 75+ messages in thread
From: John Wiegley @ 2016-01-03 21:08 UTC (permalink / raw)
  To: Paul Eggert; +Cc: emacs-devel

>>>>> Paul Eggert <eggert@cs.ucla.edu> writes:

> Although that all sounds fine, if 'make check' takes 10 minutes then I
> likely won't run it routinely. I'm just not that patient. I suggest an
> easy-to-remember name for #1, 'make smoke' say, which people like me can try
> to run more often.

How about this:

    make check        sanity tests
    make morecheck    sanity tests + regular tests
    make fullcheck    sanity tests + regular tests + extensive tests

-- 
John Wiegley                  GPG fingerprint = 4710 CF98 AF9B 327B B80F
http://newartisans.com                          60E1 46C4 BD1A 7AC1 4BA2



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: mark expensive tests
  2016-01-03 21:08                         ` John Wiegley
@ 2016-01-03 21:43                           ` Paul Eggert
  2016-01-03 21:45                             ` John Wiegley
  2016-01-07 22:14                             ` Phillip Lord
  2016-01-04 15:49                           ` Eli Zaretskii
  1 sibling, 2 replies; 75+ messages in thread
From: Paul Eggert @ 2016-01-03 21:43 UTC (permalink / raw)
  To: emacs-devel

John Wiegley wrote:
> How about this:
>
>      make check        sanity tests
>      make morecheck    sanity tests + regular tests
>      make fullcheck    sanity tests + regular tests + extensive tests

Sure, that's fine.  Or we can do what coreutils does:

make check
make check-expensive
make check-very-expensive




^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: mark expensive tests
  2016-01-03 21:43                           ` Paul Eggert
@ 2016-01-03 21:45                             ` John Wiegley
  2016-01-04  3:18                               ` Richard Stallman
  2016-01-04  8:16                               ` Michael Albinus
  2016-01-07 22:14                             ` Phillip Lord
  1 sibling, 2 replies; 75+ messages in thread
From: John Wiegley @ 2016-01-03 21:45 UTC (permalink / raw)
  To: Paul Eggert; +Cc: emacs-devel

>>>>> Paul Eggert <eggert@cs.ucla.edu> writes:

> Sure, that's fine.  Or we can do what coreutils does:

> make check
> make check-expensive
> make check-very-expensive

Prior art from an existing GNU project is even better. Now, who wants to make
it so?

-- 
John Wiegley                  GPG fingerprint = 4710 CF98 AF9B 327B B80F
http://newartisans.com                          60E1 46C4 BD1A 7AC1 4BA2



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: mark expensive tests
  2016-01-03 21:45                             ` John Wiegley
@ 2016-01-04  3:18                               ` Richard Stallman
  2016-01-04  3:34                                 ` Paul Eggert
  2016-01-04  8:16                               ` Michael Albinus
  1 sibling, 1 reply; 75+ messages in thread
From: Richard Stallman @ 2016-01-04  3:18 UTC (permalink / raw)
  To: John Wiegley; +Cc: eggert, emacs-devel

[[[ To any NSA and FBI agents reading my email: please consider    ]]]
[[[ whether defending the US Constitution against all enemies,     ]]]
[[[ foreign or domestic, requires you to follow Snowden's example. ]]]

  > > make check
  > > make check-expensive
  > > make check-very-expensive

  > Prior art from an existing GNU project is even better. Now, who wants to make
  > it so?

Would it be useful to add this to the GNU Coding Standards?

-- 
Dr Richard Stallman
President, Free Software Foundation (gnu.org, fsf.org)
Internet Hall-of-Famer (internethalloffame.org)
Skype: No way! See stallman.org/skype.html.




^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: mark expensive tests
  2016-01-04  3:18                               ` Richard Stallman
@ 2016-01-04  3:34                                 ` Paul Eggert
  0 siblings, 0 replies; 75+ messages in thread
From: Paul Eggert @ 2016-01-04  3:34 UTC (permalink / raw)
  To: rms, John Wiegley; +Cc: emacs-devel

Richard Stallman wrote:
>    > > make check
>    > > make check-expensive
>    > > make check-very-expensive
>
>    > Prior art from an existing GNU project is even better. Now, who wants to make
>    > it so?
>
> Would it be useful to add this to the GNU Coding Standards?

I expect so, yes.



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: mark expensive tests
  2016-01-03 21:45                             ` John Wiegley
  2016-01-04  3:18                               ` Richard Stallman
@ 2016-01-04  8:16                               ` Michael Albinus
  2016-01-04 15:24                                 ` Paul Eggert
  2016-01-04 15:34                                 ` Dmitry Gutov
  1 sibling, 2 replies; 75+ messages in thread
From: Michael Albinus @ 2016-01-04  8:16 UTC (permalink / raw)
  To: Paul Eggert; +Cc: emacs-devel

John Wiegley <jwiegley@gmail.com> writes:

>> make check
>> make check-expensive
>> make check-very-expensive
>
> Prior art from an existing GNU project is even better. Now, who wants to make
> it so?

I could start with it, in the emacs-25 branch. Those targets do cover #2,
#3 and #4 tests. Which make target shall we use for #1? "make check-smoke"?

Also, we need to decide how to distinguish such test categories. I don't
believe we shall do it on test file basis, except maybe for the smoke
tests. For the other tests, we could request something like this in the
test functions:

#3 tests: (skip-unless (or (getenv "RUN_EXPENSIVE_TESTS")
                           (getenv "RUN_VERY_EXPENSIVE_TESTS")))

#4 tests: (skip-unless (getenv "RUN_VERY_EXPENSIVE_TESTS"))

Alternatively, we could extend ert.el by a mechanism, marking tests
optionally as "smoke", "normal", "expensive", "very-expensive". "normal"
would be the default category. This shall be in accordance to the GNU
Coding Standards, as Richard proposes.

Best regards, Michael.



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: mark expensive tests
  2016-01-04  8:16                               ` Michael Albinus
@ 2016-01-04 15:24                                 ` Paul Eggert
  2016-01-04 15:31                                   ` Michael Albinus
  2016-01-04 15:34                                 ` Dmitry Gutov
  1 sibling, 1 reply; 75+ messages in thread
From: Paul Eggert @ 2016-01-04 15:24 UTC (permalink / raw)
  To: Michael Albinus; +Cc: emacs-devel

Michael Albinus wrote:
> I could start with it, in the emacs-25 branch. Those targets do cover #2,
> #3 and #4 tests. Which make target shall we use for #1? "make check-smoke"?

I was thinking that we use just 3 categories for cost, so #1 would be 'make 
check'. If there are some special tests that don't fall under the expensiveness 
axis, we can invent a new name for them.



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: mark expensive tests
  2016-01-04 15:24                                 ` Paul Eggert
@ 2016-01-04 15:31                                   ` Michael Albinus
  0 siblings, 0 replies; 75+ messages in thread
From: Michael Albinus @ 2016-01-04 15:31 UTC (permalink / raw)
  To: Paul Eggert; +Cc: emacs-devel

Paul Eggert <eggert@cs.ucla.edu> writes:

> Michael Albinus wrote:
>> I could start with it, in the emacs-25 branch. Those targets do cover #2,
>> #3 and #4 tests. Which make target shall we use for #1? "make check-smoke"?
>
> I was thinking that we use just 3 categories for cost, so #1 would be
> 'make check'. If there are some special tests that don't fall under
> the expensiveness axis, we can invent a new name for them.

Quoting John:

  Each test should be marked, and the test runner should take these into account
  and provide options for picking which grade of test (or lower) to be run. This
  way I can tell Nix to build and run #2 tests. 'make check' should run #2,
  'make fullcheck' should run #3, and there should be individual check targets
  for the tests in #4.

#1 are sanity (or smoke) tests, something which shall run <30 seconds,
and maybe recommended to run prior any commit (or push) to emacs repo.

Best regards, Michael.



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: mark expensive tests
  2016-01-04  8:16                               ` Michael Albinus
  2016-01-04 15:24                                 ` Paul Eggert
@ 2016-01-04 15:34                                 ` Dmitry Gutov
  2016-01-04 15:43                                   ` Michael Albinus
  1 sibling, 1 reply; 75+ messages in thread
From: Dmitry Gutov @ 2016-01-04 15:34 UTC (permalink / raw)
  To: Michael Albinus, Paul Eggert; +Cc: emacs-devel

On 01/04/2016 10:16 AM, Michael Albinus wrote:

> #3 tests: (skip-unless (or (getenv "RUN_EXPENSIVE_TESTS")
>                             (getenv "RUN_VERY_EXPENSIVE_TESTS")))
>
> #4 tests: (skip-unless (getenv "RUN_VERY_EXPENSIVE_TESTS"))

ert has the notion of tags already. We should use them.




^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: mark expensive tests
  2016-01-04 15:34                                 ` Dmitry Gutov
@ 2016-01-04 15:43                                   ` Michael Albinus
  0 siblings, 0 replies; 75+ messages in thread
From: Michael Albinus @ 2016-01-04 15:43 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: Paul Eggert, emacs-devel

Dmitry Gutov <dgutov@yandex.ru> writes:

> On 01/04/2016 10:16 AM, Michael Albinus wrote:
>
>> #3 tests: (skip-unless (or (getenv "RUN_EXPENSIVE_TESTS")
>>                             (getenv "RUN_VERY_EXPENSIVE_TESTS")))
>>
>> #4 tests: (skip-unless (getenv "RUN_VERY_EXPENSIVE_TESTS"))
>
> ert has the notion of tags already. We should use them.

Ahh, yes. I was unaware of them (sometimes it's useful to check the doc :-)

So we might use the tags :sanity-tests, :expensive-tests and
:very-expensive-tests. No tag means regular tests.

I'm not sure whether we need the tag :smoke-tests, let's see.

Best regards, Michael.



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: mark expensive tests
  2016-01-03 20:09                     ` mark expensive tests John Wiegley
  2016-01-03 20:40                       ` Paul Eggert
@ 2016-01-04 15:47                       ` Eli Zaretskii
  2016-01-04 16:19                         ` Michael Albinus
  1 sibling, 1 reply; 75+ messages in thread
From: Eli Zaretskii @ 2016-01-04 15:47 UTC (permalink / raw)
  To: John Wiegley; +Cc: michael.albinus, emacs-devel

> From: John Wiegley <jwiegley@gmail.com>
> Date: Sun, 03 Jan 2016 12:09:12 -0800
> Cc: emacs-devel@gnu.org
> 
> Yes, we will have three test intensity levels:
> 
>   1. Sanity tests just make sure that the environment works, and the whole of
>      them should run in <30 seconds on typical hardware. Some shops call these
>      'smoke tests', as they are just there to make sure that Emacs can
>      function in the most basic ways.
> 
>   2. Regular tests do not incur intensive CPU or memory costs, and so can be
>      run on any hardware. These should finish on a scale of minutes, likely
>      <10 minutes at the most.
> 
>   3. Extensive tests are given free reign, and may not even be able to
>      complete on systems with CPU or memory constraints. These should feel
>      free to take up to an hour, maybe even beyond.
> 
>   4. Selective tests are never run automatically, but exist to stress test
>      some particular area of the system. These could take days, it doesn't
>      really matter what their requirements are.

I'm fine with this gradation, but here's some reality check:

  . The current test suite takes 3.5 min for a full run, including
    compilation of all the *.el files, 2.25 min if the *.el files are
    already compiled

  . For comparison, the test suite of the latest version of Texinfo I
    just built takes 4.5 min on the same machine, even though a lot of
    tests are skipped (due to some required infrastructure not being
    installed)

So it sounds like we have no candidates for #3 and #4, and the
division between #1 and #2 is questionable, since 2 min is not such a
long time to wait, IMO.

> I'd especially like the file-notify tests to move to #3, since these are what
> consistently bog down my testing environment.

file-notify-tests takes about 25 sec here, so I'm unsure why it should
be in #3.  Maybe that's because of remote tests (which are skipped on
my system), in which case perhaps the remote tests should be separated
into a separate test file and run on demand only.



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: mark expensive tests
  2016-01-03 20:40                       ` Paul Eggert
  2016-01-03 21:08                         ` John Wiegley
@ 2016-01-04 15:48                         ` Eli Zaretskii
  2016-01-04 16:50                           ` Paul Eggert
  1 sibling, 1 reply; 75+ messages in thread
From: Eli Zaretskii @ 2016-01-04 15:48 UTC (permalink / raw)
  To: Paul Eggert; +Cc: emacs-devel

> From: Paul Eggert <eggert@cs.ucla.edu>
> Date: Sun, 3 Jan 2016 12:40:09 -0800
> 
> Although that all sounds fine, if 'make check' takes 10 minutes then I likely won't run it routinely.

How long do the tests take now on your machine(s)?  Do they really
take a lot of time?




^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: mark expensive tests
  2016-01-03 21:08                         ` John Wiegley
  2016-01-03 21:43                           ` Paul Eggert
@ 2016-01-04 15:49                           ` Eli Zaretskii
  1 sibling, 0 replies; 75+ messages in thread
From: Eli Zaretskii @ 2016-01-04 15:49 UTC (permalink / raw)
  To: John Wiegley; +Cc: eggert, emacs-devel

> From: John Wiegley <jwiegley@gmail.com>
> Date: Sun, 03 Jan 2016 13:08:50 -0800
> Cc: emacs-devel@gnu.org
> 
> How about this:
> 
>     make check        sanity tests
>     make morecheck    sanity tests + regular tests
>     make fullcheck    sanity tests + regular tests + extensive tests

Fine by me, but I think having sanity run up to, say, 4 or 5 min
(based on what we have now) should be okay.  IOW, we should have the
entire current test suite (with perhaps the single exception of remote
file-notify-tests) in the 1st category, IMO.



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: mark expensive tests
  2016-01-04 15:47                       ` Eli Zaretskii
@ 2016-01-04 16:19                         ` Michael Albinus
  2016-01-04 16:51                           ` Eli Zaretskii
  0 siblings, 1 reply; 75+ messages in thread
From: Michael Albinus @ 2016-01-04 16:19 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: John Wiegley, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

>> I'd especially like the file-notify tests to move to #3, since these are what
>> consistently bog down my testing environment.
>
> file-notify-tests takes about 25 sec here, so I'm unsure why it should
> be in #3.  Maybe that's because of remote tests (which are skipped on
> my system), in which case perhaps the remote tests should be separated
> into a separate test file and run on demand only.

The most time consuming test is file-notify-test06-many-events. It takes
more than 4 minutes on my laptop:

Started at:   2016-01-04 17:08:45+0100
Finished.
Finished at:  2016-01-04 17:13:05+0100

I'm impressed that your supercomputer is that fast. Or do you test under
cygwin? Then this test is skipped.

Remote tests in filenotify-tests.el could go into #3, indeed. Like some
of the tests of tramp-test.el.

Best regards, Michael.



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: mark expensive tests
  2016-01-04 15:48                         ` Eli Zaretskii
@ 2016-01-04 16:50                           ` Paul Eggert
  2016-01-04 17:18                             ` Eli Zaretskii
  0 siblings, 1 reply; 75+ messages in thread
From: Paul Eggert @ 2016-01-04 16:50 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel

On 01/04/2016 07:48 AM, Eli Zaretskii wrote:
> How long do the tests take now on your machine(s)?  Do they really
> take a lot of time?

Yes, it takes 13 minutes with 'make', 11 minutes with 'make -j4'. This 
is on my roughly-6-year-old desktop, a 4-core AMD Phenom II X4 910e, 
Fedora 23 x86-64, a local ext4 file system mounted 
rw,relatime,seclabel,data=ordered on a hard disk. It's been this slow 
for ages (I've mentioned it here), and is why I typically don't bother 
running 'make check'.

I prefer a 'make check' (or whatever) that takes less than a minute. 
This is so that I can test the change I just installed in my private 
copy of Emacs, before publishing it. I don't want to test in the 
background because then I lose my train of thought. I prefer testing 
while writing the ChangeLog entry.

PS. I am getting due for a faster machine but not yet. I want an Intel 
Skylake so that I can verify that Emacs works with the new x86-64 
hardware-based subscript checking implemented via GCC 5's 
-fcheck-pointer-bounds option. I also want ECC memory for reliability's 
sake. This combination isn't available yet for desktops, at least not in 
configurations I can afford. All this being said, I expect that Emacs 
'make check' is slow for reasons unrelated to my 6-year-old CPU.



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: mark expensive tests
  2016-01-04 16:19                         ` Michael Albinus
@ 2016-01-04 16:51                           ` Eli Zaretskii
  2016-01-04 17:01                             ` Michael Albinus
  0 siblings, 1 reply; 75+ messages in thread
From: Eli Zaretskii @ 2016-01-04 16:51 UTC (permalink / raw)
  To: Michael Albinus; +Cc: jwiegley, emacs-devel

> From: Michael Albinus <michael.albinus@gmx.de>
> Cc: John Wiegley <jwiegley@gmail.com>,  emacs-devel@gnu.org
> Date: Mon, 04 Jan 2016 17:19:01 +0100
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> >> I'd especially like the file-notify tests to move to #3, since these are what
> >> consistently bog down my testing environment.
> >
> > file-notify-tests takes about 25 sec here, so I'm unsure why it should
> > be in #3.  Maybe that's because of remote tests (which are skipped on
> > my system), in which case perhaps the remote tests should be separated
> > into a separate test file and run on demand only.
> 
> The most time consuming test is file-notify-test06-many-events. It takes
> more than 4 minutes on my laptop:
> 
> Started at:   2016-01-04 17:08:45+0100
> Finished.
> Finished at:  2016-01-04 17:13:05+0100
> 
> I'm impressed that your supercomputer is that fast. Or do you test under
> cygwin? Then this test is skipped.

You are talking about the master branch.  I was talking about
emacs-25, where that test doesn't exist.

So this long test should also go into #3.

My main point was that other than a couple of very specific tests, the
rest of the suite is quite fast, as test suites go.



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: mark expensive tests
  2016-01-04 16:51                           ` Eli Zaretskii
@ 2016-01-04 17:01                             ` Michael Albinus
  2016-01-04 17:23                               ` Eli Zaretskii
  2016-01-04 22:30                               ` Michael Albinus
  0 siblings, 2 replies; 75+ messages in thread
From: Michael Albinus @ 2016-01-04 17:01 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: jwiegley, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

> My main point was that other than a couple of very specific tests, the
> rest of the suite is quite fast, as test suites go.

If we want to recommend to run the smoke tests at least before
committing, then 2 minutes might be long enough to let people refuse
that. That's why John has proposed a 30 seconds upper limit for the smoke
tests.

Anyway, we can introduce smoke tests and very expansive tests later as
needed. As minimum, we shall introduce and document the :expansive-test
ert tag. And I will add it to some Tramp tests and also to
file-notify-test06-many-events on master.

OK?

Best regards, Michael.



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: mark expensive tests
  2016-01-04 16:50                           ` Paul Eggert
@ 2016-01-04 17:18                             ` Eli Zaretskii
  2016-01-04 17:56                               ` Paul Eggert
  0 siblings, 1 reply; 75+ messages in thread
From: Eli Zaretskii @ 2016-01-04 17:18 UTC (permalink / raw)
  To: Paul Eggert; +Cc: emacs-devel

> Cc: emacs-devel@gnu.org
> From: Paul Eggert <eggert@cs.ucla.edu>
> Date: Mon, 4 Jan 2016 08:50:13 -0800
> 
> On 01/04/2016 07:48 AM, Eli Zaretskii wrote:
> > How long do the tests take now on your machine(s)?  Do they really
> > take a lot of time?
> 
> Yes, it takes 13 minutes with 'make', 11 minutes with 'make -j4'.

Is this on master or on emacs-25?  The former is much slower.  (I was
timing emacs-25.)



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: mark expensive tests
  2016-01-04 17:01                             ` Michael Albinus
@ 2016-01-04 17:23                               ` Eli Zaretskii
  2016-01-04 17:55                                 ` Michael Albinus
  2016-01-04 22:30                               ` Michael Albinus
  1 sibling, 1 reply; 75+ messages in thread
From: Eli Zaretskii @ 2016-01-04 17:23 UTC (permalink / raw)
  To: Michael Albinus; +Cc: jwiegley, emacs-devel

> From: Michael Albinus <michael.albinus@gmx.de>
> Cc: jwiegley@gmail.com,  emacs-devel@gnu.org
> Date: Mon, 04 Jan 2016 18:01:50 +0100
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> > My main point was that other than a couple of very specific tests, the
> > rest of the suite is quite fast, as test suites go.
> 
> If we want to recommend to run the smoke tests at least before
> committing, then 2 minutes might be long enough to let people refuse
> that. That's why John has proposed a 30 seconds upper limit for the smoke
> tests.

I'm afraid that arbitrarily selecting 25% of the current test suite
will leave too of the functionality much untested.  Emacs is a
hodge-podge of mostly unrelated functionalities, so I think it won't
be easy to come up with a meaningful sanity test.

But maybe I'm just missing something.  Can you tell how will you
select the 30-sec worth of tests?

Thanks.



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: mark expensive tests
  2016-01-04 17:23                               ` Eli Zaretskii
@ 2016-01-04 17:55                                 ` Michael Albinus
  0 siblings, 0 replies; 75+ messages in thread
From: Michael Albinus @ 2016-01-04 17:55 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: jwiegley, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

>> If we want to recommend to run the smoke tests at least before
>> committing, then 2 minutes might be long enough to let people refuse
>> that. That's why John has proposed a 30 seconds upper limit for the smoke
>> tests.
>
> I'm afraid that arbitrarily selecting 25% of the current test suite
> will leave too of the functionality much untested.  Emacs is a
> hodge-podge of mostly unrelated functionalities, so I think it won't
> be easy to come up with a meaningful sanity test.
>
> But maybe I'm just missing something.  Can you tell how will you
> select the 30-sec worth of tests?

Not yet. As said, I would start to puzzle out the expensive
tests. Reducing make check from 10+ minutes to 2 minutes seems to be a
good start. Whether we need to define smoke tests I don't know.

> Thanks.

Best regards, Michael.



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: mark expensive tests
  2016-01-04 17:18                             ` Eli Zaretskii
@ 2016-01-04 17:56                               ` Paul Eggert
  0 siblings, 0 replies; 75+ messages in thread
From: Paul Eggert @ 2016-01-04 17:56 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel

On 01/04/2016 09:18 AM, Eli Zaretskii wrote:
>> it takes 13 minutes with 'make', 11 minutes with 'make -j4'.
> Is this on master or on emacs-25?  The former is much slower.  (I was
> timing emacs-25.)
>

Ah, sorry, my times were for master. For emacs-25, 'make check' takes 
2.7 minutes, 'make -j4 check' takes 1.5 minutes. These times assume the 
test .el files are already built. For me this is merely annoyingly slow, 
not "let's skip the tests" slow like on master.



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: mark expensive tests
  2016-01-04 17:01                             ` Michael Albinus
  2016-01-04 17:23                               ` Eli Zaretskii
@ 2016-01-04 22:30                               ` Michael Albinus
  1 sibling, 0 replies; 75+ messages in thread
From: Michael Albinus @ 2016-01-04 22:30 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: jwiegley, emacs-devel

Michael Albinus <michael.albinus@gmx.de> writes:

> Anyway, we can introduce smoke tests and very expansive tests later as
> needed. As minimum, we shall introduce and document the :expansive-test
> ert tag. And I will add it to some Tramp tests and also to
> file-notify-test06-many-events on master.

I gave it a try in the emacs-25 branch. The following tests have been
tagged :expensive-test:

auto-revert-test01-auto-revert-several-files
file-notify-*-remote
tramp-test26-process-file
tramp-test27-start-file-process
tramp-test28-shell-command
tramp-test29-vc-registered
tramp-test31-special-characters-with-*
tramp-test32-utf8-with-*
tramp-test33-asynchronous-requests
tramp-test35-unload

"make check" needs now 1:39 min.

--8<---------------cut here---------------start------------->8---
SUMMARY OF TEST RESULTS
-----------------------
Files examined: 92
Ran 1635 tests, 1634 results as expected, 1 skipped
make[2]: Leaving directory '/usr/local/src/emacs-25/test/automated'
make[1]: Leaving directory '/usr/local/src/emacs-25/test/automated'
32.796u 4.836s 1:38.51 38.1%	0+0k 8+21192io 0pf+0w
--8<---------------cut here---------------end--------------->8---

"make check-expensive needs" 2:34 min.

--8<---------------cut here---------------start------------->8---
SUMMARY OF TEST RESULTS
-----------------------
Files examined: 92
Ran 1654 tests, 1653 results as expected, 1 skipped
make[3]: Leaving directory '/usr/local/src/emacs-25/test/automated'
make[2]: Leaving directory '/usr/local/src/emacs-25/test/automated'
make[1]: Leaving directory '/usr/local/src/emacs-25/test/automated'
48.312u 6.252s 2:33.95 35.4%	0+0k 0+34176io 0pf+0w
--8<---------------cut here---------------end--------------->8---

About one minute gain already. In the master branch, the differences
will be more noteworthy.

Best regards, Michael.



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: mark expensive tests
  2016-01-03 21:43                           ` Paul Eggert
  2016-01-03 21:45                             ` John Wiegley
@ 2016-01-07 22:14                             ` Phillip Lord
  2016-01-08  8:58                               ` Eli Zaretskii
  1 sibling, 1 reply; 75+ messages in thread
From: Phillip Lord @ 2016-01-07 22:14 UTC (permalink / raw)
  To: Paul Eggert; +Cc: emacs-devel

Paul Eggert <eggert@cs.ucla.edu> writes:

> John Wiegley wrote:
>> How about this:
>>
>>      make check        sanity tests
>>      make morecheck    sanity tests + regular tests
>>      make fullcheck    sanity tests + regular tests + extensive tests
>
> Sure, that's fine.  Or we can do what coreutils does:
>
> make check
> make check-expensive
> make check-very-expensive

It's rather inconsistent with "clean" which puts the qualifier first.

It's worth mentioning that I've already added

make check-maybe

to master, and it is consistent with that.

check-maybe is often much faster than make check. The heuristic it
uses for identify which tests should run will break, of course, but it's
probably quick enough to run on a pre-commit hook most of the time.

Phil



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: mark expensive tests
  2016-01-07 22:14                             ` Phillip Lord
@ 2016-01-08  8:58                               ` Eli Zaretskii
  2016-01-08 20:42                                 ` Achim Gratz
  2016-01-09  0:21                                 ` John Wiegley
  0 siblings, 2 replies; 75+ messages in thread
From: Eli Zaretskii @ 2016-01-08  8:58 UTC (permalink / raw)
  To: Phillip Lord; +Cc: eggert, emacs-devel

> From: phillip.lord@russet.org.uk (Phillip Lord)
> Date: Thu, 07 Jan 2016 22:14:19 +0000
> Cc: emacs-devel@gnu.org
> 
> >>      make check        sanity tests
> >>      make morecheck    sanity tests + regular tests
> >>      make fullcheck    sanity tests + regular tests + extensive tests
> >
> > Sure, that's fine.  Or we can do what coreutils does:
> >
> > make check
> > make check-expensive
> > make check-very-expensive
> 
> It's rather inconsistent with "clean" which puts the qualifier first.
> 
> It's worth mentioning that I've already added
> 
> make check-maybe
> 
> to master, and it is consistent with that.
> 
> check-maybe is often much faster than make check. The heuristic it
> uses for identify which tests should run will break, of course, but it's
> probably quick enough to run on a pre-commit hook most of the time.

Whatever you guys agree to call those targets, please document them in
README.  They are currently semi-documented in Makefile.in, which is
not a good place for this stuff (the new targets don't seem to be
documented at all, btw).  Likewise with the way to run a test under
debugger, which is hinted upon somewhere in the comments to
Makefile.in (and also doesn't really work without tinkering, AFAIR).

We really need to have a slightly better documentation of the test
suite, IMO.  Rather minor efforts can bring large benefits in this
area.

TIA



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: mark expensive tests
  2016-01-08  8:58                               ` Eli Zaretskii
@ 2016-01-08 20:42                                 ` Achim Gratz
  2016-01-09  0:21                                   ` John Wiegley
  2016-01-09  0:21                                 ` John Wiegley
  1 sibling, 1 reply; 75+ messages in thread
From: Achim Gratz @ 2016-01-08 20:42 UTC (permalink / raw)
  To: emacs-devel

Eli Zaretskii writes:
> Whatever you guys agree to call those targets, please document them in
> README.  They are currently semi-documented in Makefile.in, which is
> not a good place for this stuff (the new targets don't seem to be
> documented at all, btw).

Org has "make help" and "make helpall" and it's all placed directly and
easily readable in the main Makefile (which then provides the actual
make machinery via includes).  Also a variable to select which tests to
run via a regex, which is handy when bisecting.


Regards,
Achim.
-- 
+<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+

SD adaptation for Waldorf rackAttack V1.04R1:
http://Synth.Stromeko.net/Downloads.html#WaldorfSDada




^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: mark expensive tests
  2016-01-08 20:42                                 ` Achim Gratz
@ 2016-01-09  0:21                                   ` John Wiegley
  2016-01-09 12:09                                     ` Achim Gratz
  0 siblings, 1 reply; 75+ messages in thread
From: John Wiegley @ 2016-01-09  0:21 UTC (permalink / raw)
  To: Achim Gratz; +Cc: emacs-devel

>>>>> Achim Gratz <Stromeko@nexgo.de> writes:

> Org has "make help" and "make helpall" and it's all placed directly and
> easily readable in the main Makefile (which then provides the actual make
> machinery via includes).

Except that no one would know to use those as targets (am I building help, or
getting help?). The README is a better place.

-- 
John Wiegley                  GPG fingerprint = 4710 CF98 AF9B 327B B80F
http://newartisans.com                          60E1 46C4 BD1A 7AC1 4BA2



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: mark expensive tests
  2016-01-08  8:58                               ` Eli Zaretskii
  2016-01-08 20:42                                 ` Achim Gratz
@ 2016-01-09  0:21                                 ` John Wiegley
  1 sibling, 0 replies; 75+ messages in thread
From: John Wiegley @ 2016-01-09  0:21 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: eggert, emacs-devel, Phillip Lord

>>>>> Eli Zaretskii <eliz@gnu.org> writes:

> We really need to have a slightly better documentation of the test suite,
> IMO. Rather minor efforts can bring large benefits in this area.

+1

-- 
John Wiegley                  GPG fingerprint = 4710 CF98 AF9B 327B B80F
http://newartisans.com                          60E1 46C4 BD1A 7AC1 4BA2



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: mark expensive tests
  2016-01-09  0:21                                   ` John Wiegley
@ 2016-01-09 12:09                                     ` Achim Gratz
  2016-01-12 16:55                                       ` Simon Michael
  0 siblings, 1 reply; 75+ messages in thread
From: Achim Gratz @ 2016-01-09 12:09 UTC (permalink / raw)
  To: emacs-devel

John Wiegley writes:
>>>>>> Achim Gratz <Stromeko@nexgo.de> writes:
>
>> Org has "make help" and "make helpall" and it's all placed directly and
>> easily readable in the main Makefile (which then provides the actual make
>> machinery via includes).
>
> Except that no one would know to use those as targets (am I building help, or
> getting help?). The README is a better place.

One doesn't preclude the other, of course.  The point was that Makefile
could be way more self-documenting if better documentation of its
targets was the goal.


Regards,
Achim.
-- 
+<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+

SD adaptation for Waldorf microQ V2.22R2:
http://Synth.Stromeko.net/Downloads.html#WaldorfSDada




^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: mark expensive tests
  2016-01-09 12:09                                     ` Achim Gratz
@ 2016-01-12 16:55                                       ` Simon Michael
  0 siblings, 0 replies; 75+ messages in thread
From: Simon Michael @ 2016-01-12 16:55 UTC (permalink / raw)
  To: emacs-devel

On 1/9/16 4:09 AM, Achim Gratz wrote:
> John Wiegley writes:
>>>>>>> Achim Gratz <Stromeko@nexgo.de> writes:
>>> Org has "make help" and "make helpall" and it's all placed directly and
>>> easily readable in the main Makefile (which then provides the actual make
>>> machinery via includes).
>>
>> Except that no one would know to use those as targets (am I building help, or
>> getting help?). The README is a better place.
> 
> One doesn't preclude the other, of course.  The point was that Makefile
> could be way more self-documenting if better documentation of its
> targets was the goal.

FWIW,
http://www.cmcrossroads.com/print/article/self-documenting-makefiles is
a nice system.
https://github.com/simonmichael/hledger/blob/master/help-system.mk is a
tweaked version, used by
https://github.com/simonmichael/hledger/blob/master/Makefile:

$ make
Makefile:39: -------------------- hledger make rules --------------------
Makefile:41: make [help] -- list documented rules in this makefile. make
-n RULE shows more detail.
Makefile:217: (INSTALLING:)
Makefile:219: make install -- download dependencies and install hledger
executables to ~/.local/bin or equivalent (with stack)
Makefile:244: (BUILDING:)
Makefile:248: make build -- download dependencies and build hledger
executables (with stack)
etc.





^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2015-12-16 11:58                     ` Eli Zaretskii
  2015-12-16 13:09                       ` Artur Malabarba
@ 2016-01-16  8:55                       ` Artur Malabarba
  2016-01-19 22:55                         ` Glenn Morris
  1 sibling, 1 reply; 75+ messages in thread
From: Artur Malabarba @ 2016-01-16  8:55 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: rgm, eggert, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

> Does it have to be wildcards?  Will file-name-all-completions not do?

Ok. I've pushed a change using completion instead of wildcards (the
documentation still needs to be updated).

Could someone check whether build speeds have improved?



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2016-01-16  8:55                       ` Artur Malabarba
@ 2016-01-19 22:55                         ` Glenn Morris
  2016-01-20  0:04                           ` Artur Malabarba
  0 siblings, 1 reply; 75+ messages in thread
From: Glenn Morris @ 2016-01-19 22:55 UTC (permalink / raw)
  To: Artur Malabarba; +Cc: Eli Zaretskii, eggert, emacs-devel

Artur Malabarba wrote:

> Ok. I've pushed a change using completion instead of wildcards (the
> documentation still needs to be updated).
>
> Could someone check whether build speeds have improved?

Somewhat faster, but still much slower than it was when there could be
only one dir-locals. Rough, one-off timings: wildcards was ~ 22% slower,
completion seems to be ~ 18% slower.



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2016-01-19 22:55                         ` Glenn Morris
@ 2016-01-20  0:04                           ` Artur Malabarba
  2016-01-26  1:46                             ` Artur Malabarba
  0 siblings, 1 reply; 75+ messages in thread
From: Artur Malabarba @ 2016-01-20  0:04 UTC (permalink / raw)
  To: Glenn Morris; +Cc: Eli Zaretskii, eggert, emacs-devel

Glenn Morris <rgm@gnu.org> writes:

> Somewhat faster, but still much slower than it was when there could be
> only one dir-locals. Rough, one-off timings: wildcards was ~ 22% slower,
> completion seems to be ~ 18% slower.

Thanks Glenn.

Then I guess I'll change it to use a fixed filename, probably
`.dir-locals-2.el' or `.dir-locals-user.el'.

This shouldn't slow the build noticeably, unless the old dir-locals
behaviour (using a fixed filename) already took up a large fraction of
time without us knowing.



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2016-01-20  0:04                           ` Artur Malabarba
@ 2016-01-26  1:46                             ` Artur Malabarba
  2016-01-26 18:52                               ` Glenn Morris
  0 siblings, 1 reply; 75+ messages in thread
From: Artur Malabarba @ 2016-01-26  1:46 UTC (permalink / raw)
  To: Glenn Morris; +Cc: Eli Zaretskii, Paul Eggert, emacs-devel

> Then I guess I'll change it to use a fixed filename, probably
> .dir-locals-2.el' or.dir-locals-user.el'.

Done.



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2016-01-26  1:46                             ` Artur Malabarba
@ 2016-01-26 18:52                               ` Glenn Morris
  2016-01-26 19:24                                 ` Stefan Monnier
  2016-01-26 20:15                                 ` Artur Malabarba
  0 siblings, 2 replies; 75+ messages in thread
From: Glenn Morris @ 2016-01-26 18:52 UTC (permalink / raw)
  To: bruce.connor.am; +Cc: Eli Zaretskii, Paul Eggert, emacs-devel

Artur Malabarba wrote:

>> Then I guess I'll change it to use a fixed filename, probably
>> .dir-locals-2.el' or.dir-locals-user.el'.
>
> Done.

I'm afraid this has made no difference to the times I measure.
I checked that if I apply a diff to revert back to a single dir-locals
file, the times do indeed fall back to what they were originally.

If no-one else other than me notices this, perhaps you should forget
about it. (Again, these are the times for non-parallel debug bootstrap
builds.)

As a final comment, if the aim is just to override an existing
dir-locals files without modifying it, this can be done by direct
application of dir-locals-set-class-variables and
dir-locals-set-directory-class. The issue there is that the UI isn't as
convenient, and it completely replaces any dir-locals file rather than
appending+overriding it. But those things could presumably be improved.



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2016-01-26 18:52                               ` Glenn Morris
@ 2016-01-26 19:24                                 ` Stefan Monnier
  2016-01-26 19:40                                   ` John Wiegley
  2016-01-26 20:15                                 ` Artur Malabarba
  1 sibling, 1 reply; 75+ messages in thread
From: Stefan Monnier @ 2016-01-26 19:24 UTC (permalink / raw)
  To: emacs-devel

> As a final comment, if the aim is just to override an existing
> dir-locals files without modifying it, this can be done by direct
> application of dir-locals-set-class-variables and
> dir-locals-set-directory-class. The issue there is that the UI isn't as
> convenient, and it completely replaces any dir-locals file rather than
> appending+overriding it. But those things could presumably be improved.

FWIW, I also dislike the .dir-locals2.el thingy and would rather we
improve the support for doing it in ~/.emacs (like
dir-locals-set-directory-class).


        Stefan




^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2016-01-26 19:24                                 ` Stefan Monnier
@ 2016-01-26 19:40                                   ` John Wiegley
  0 siblings, 0 replies; 75+ messages in thread
From: John Wiegley @ 2016-01-26 19:40 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel

>>>>> Stefan Monnier <monnier@iro.umontreal.ca> writes:

> FWIW, I also dislike the .dir-locals2.el thingy and would rather we improve
> the support for doing it in ~/.emacs (like dir-locals-set-directory-class).

The advantage to .dir-locals<N>.el is that it's dead simple, and the semantics
are pretty obvious. We didn't realize it would have such unintended
consequences, though. I'd like to keep the simplicity, if we can.

-- 
John Wiegley                  GPG fingerprint = 4710 CF98 AF9B 327B B80F
http://newartisans.com                          60E1 46C4 BD1A 7AC1 4BA2



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2016-01-26 18:52                               ` Glenn Morris
  2016-01-26 19:24                                 ` Stefan Monnier
@ 2016-01-26 20:15                                 ` Artur Malabarba
  2016-01-26 22:23                                   ` Paul Eggert
  1 sibling, 1 reply; 75+ messages in thread
From: Artur Malabarba @ 2016-01-26 20:15 UTC (permalink / raw)
  To: Glenn Morris; +Cc: Eli Zaretskii, Paul Eggert, emacs-devel

On 26 January 2016 at 18:52, Glenn Morris <rgm@gnu.org> wrote:
> Artur Malabarba wrote:
>
>>> Then I guess I'll change it to use a fixed filename, probably
>>> .dir-locals-2.el' or.dir-locals-user.el'.
>>
>> Done.
>
> I'm afraid this has made no difference to the times I measure.
> I checked that if I apply a diff to revert back to a single dir-locals
> file, the times do indeed fall back to what they were originally.

I'm very surprised at this. The emacs sources don't even have a
.dir-locals-2.el. So we're not visiting an extra file or reading extra
lisp, we're just checking for the existence of this file (exactly once
for each time we would check the existence of .dir-locals.el anyway).
Maybe the slowness is not really where I expected (filesystem
interaction), but is perhaps somewhere else.

> If no-one else other than me notices this, perhaps you should forget
> about it. (Again, these are the times for non-parallel debug bootstrap
> builds.)

I don't notice it because I build infrequently and never pay attention
while building, so I really don't count.

> As a final comment, if the aim is just to override an existing
> dir-locals files without modifying it, this can be done by direct
> application of dir-locals-set-class-variables and
> dir-locals-set-directory-class. The issue there is that the UI isn't as
> convenient, and it completely replaces any dir-locals file rather than
> appending+overriding it. But those things could presumably be improved.

I can revert this feature if people prefer. But I quite like the
convenience (and ease-of-use) of writing a second .dir-locals, and the
merge (appending+overriding) helps as well.
We can also just revert it from the release branch for the moment, and
postpone it until emacs 26 while we settle on a preferred
interface/implementation.



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2016-01-26 20:15                                 ` Artur Malabarba
@ 2016-01-26 22:23                                   ` Paul Eggert
  2016-01-29  1:29                                     ` John Wiegley
  0 siblings, 1 reply; 75+ messages in thread
From: Paul Eggert @ 2016-01-26 22:23 UTC (permalink / raw)
  To: bruce.connor.am, Glenn Morris; +Cc: Eli Zaretskii, emacs-devel

On 01/26/2016 12:15 PM, Artur Malabarba wrote:
> We can also just revert it from the release branch for the moment, and
> postpone it until emacs 26 while we settle on a preferred
> interface/implementation.

I like this suggestion.



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
  2016-01-26 22:23                                   ` Paul Eggert
@ 2016-01-29  1:29                                     ` John Wiegley
       [not found]                                       ` <CAAdUY-KaYN5L8wAyFpUYL=dVG2twMYQk4+iBH_cpW2fyMaHOow@mail.gmail.com>
  0 siblings, 1 reply; 75+ messages in thread
From: John Wiegley @ 2016-01-29  1:29 UTC (permalink / raw)
  To: Paul Eggert; +Cc: Glenn Morris, Eli Zaretskii, bruce.connor.am, emacs-devel

>>>>> Paul Eggert <eggert@cs.ucla.edu> writes:

> On 01/26/2016 12:15 PM, Artur Malabarba wrote:
>> We can also just revert it from the release branch for the moment, and
>> postpone it until emacs 26 while we settle on a preferred
>> interface/implementation.

> I like this suggestion.

Me too.

-- 
John Wiegley                  GPG fingerprint = 4710 CF98 AF9B 327B B80F
http://newartisans.com                          60E1 46C4 BD1A 7AC1 4BA2



^ permalink raw reply	[flat|nested] 75+ messages in thread

* Re: builds are getting slower?
       [not found]                                       ` <CAAdUY-KaYN5L8wAyFpUYL=dVG2twMYQk4+iBH_cpW2fyMaHOow@mail.gmail.com>
@ 2016-01-29 11:46                                         ` Artur Malabarba
  0 siblings, 0 replies; 75+ messages in thread
From: Artur Malabarba @ 2016-01-29 11:46 UTC (permalink / raw)
  To: Paul Eggert, John Wiegley, emacs-devel, Glenn Morris,
	Eli Zaretskii

[-- Attachment #1: Type: text/plain, Size: 617 bytes --]

I make the change on Friday the 5th. Please don't release before then. ;-)

On 28 Jan 2016 11:29 pm, "John Wiegley" <jwiegley@gmail.com> wrote:
>
> >>>>> Paul Eggert <eggert@cs.ucla.edu> writes:
>
> > On 01/26/2016 12:15 PM, Artur Malabarba wrote:
> >> We can also just revert it from the release branch for the moment, and
> >> postpone it until emacs 26 while we settle on a preferred
> >> interface/implementation.
>
> > I like this suggestion.
>
> Me too.
>
> --
> John Wiegley                  GPG fingerprint = 4710 CF98 AF9B 327B B80F
> http://newartisans.com                          60E1 46C4 BD1A 7AC1 4BA2

[-- Attachment #2: Type: text/html, Size: 982 bytes --]

^ permalink raw reply	[flat|nested] 75+ messages in thread

end of thread, other threads:[~2016-01-29 11:46 UTC | newest]

Thread overview: 75+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-12-10  2:15 builds are getting slower? Glenn Morris
2015-12-10  2:41 ` Paul Eggert
2015-12-10  3:51   ` Glenn Morris
2015-12-10  6:53     ` Paul Eggert
2015-12-10  8:14       ` Artur Malabarba
2015-12-10  8:57         ` David Kastrup
2015-12-10 16:16 ` Eli Zaretskii
2015-12-10 17:27   ` Glenn Morris
2015-12-13  6:10     ` Paul Eggert
2015-12-13 21:53       ` Glenn Morris
2015-12-13 23:53         ` Glenn Morris
2015-12-14  3:31           ` Eli Zaretskii
2015-12-14 22:20             ` John Wiegley
2015-12-14 23:40               ` Paul Eggert
2015-12-15  0:38                 ` John Wiegley
2015-12-15  8:13                   ` Michael Albinus
2016-01-03 20:02                   ` mark expensive tests (was: builds are getting slower?) Michael Albinus
2016-01-03 20:09                     ` mark expensive tests John Wiegley
2016-01-03 20:40                       ` Paul Eggert
2016-01-03 21:08                         ` John Wiegley
2016-01-03 21:43                           ` Paul Eggert
2016-01-03 21:45                             ` John Wiegley
2016-01-04  3:18                               ` Richard Stallman
2016-01-04  3:34                                 ` Paul Eggert
2016-01-04  8:16                               ` Michael Albinus
2016-01-04 15:24                                 ` Paul Eggert
2016-01-04 15:31                                   ` Michael Albinus
2016-01-04 15:34                                 ` Dmitry Gutov
2016-01-04 15:43                                   ` Michael Albinus
2016-01-07 22:14                             ` Phillip Lord
2016-01-08  8:58                               ` Eli Zaretskii
2016-01-08 20:42                                 ` Achim Gratz
2016-01-09  0:21                                   ` John Wiegley
2016-01-09 12:09                                     ` Achim Gratz
2016-01-12 16:55                                       ` Simon Michael
2016-01-09  0:21                                 ` John Wiegley
2016-01-04 15:49                           ` Eli Zaretskii
2016-01-04 15:48                         ` Eli Zaretskii
2016-01-04 16:50                           ` Paul Eggert
2016-01-04 17:18                             ` Eli Zaretskii
2016-01-04 17:56                               ` Paul Eggert
2016-01-04 15:47                       ` Eli Zaretskii
2016-01-04 16:19                         ` Michael Albinus
2016-01-04 16:51                           ` Eli Zaretskii
2016-01-04 17:01                             ` Michael Albinus
2016-01-04 17:23                               ` Eli Zaretskii
2016-01-04 17:55                                 ` Michael Albinus
2016-01-04 22:30                               ` Michael Albinus
2015-12-15 13:12                 ` builds are getting slower? Phillip Lord
2015-12-15  8:18             ` Glenn Morris
2015-12-15 12:38               ` Artur Malabarba
2015-12-15 12:49                 ` David Kastrup
2015-12-15 16:15                 ` Eli Zaretskii
2015-12-16 11:50                   ` Artur Malabarba
2015-12-16 11:58                     ` Eli Zaretskii
2015-12-16 13:09                       ` Artur Malabarba
2015-12-16 13:25                         ` David Kastrup
2015-12-16 13:53                           ` Eli Zaretskii
2015-12-17  2:11                             ` Glenn Morris
2015-12-17 16:06                               ` John Wiegley
2016-01-16  8:55                       ` Artur Malabarba
2016-01-19 22:55                         ` Glenn Morris
2016-01-20  0:04                           ` Artur Malabarba
2016-01-26  1:46                             ` Artur Malabarba
2016-01-26 18:52                               ` Glenn Morris
2016-01-26 19:24                                 ` Stefan Monnier
2016-01-26 19:40                                   ` John Wiegley
2016-01-26 20:15                                 ` Artur Malabarba
2016-01-26 22:23                                   ` Paul Eggert
2016-01-29  1:29                                     ` John Wiegley
     [not found]                                       ` <CAAdUY-KaYN5L8wAyFpUYL=dVG2twMYQk4+iBH_cpW2fyMaHOow@mail.gmail.com>
2016-01-29 11:46                                         ` Artur Malabarba
2015-12-17  2:13                     ` Glenn Morris
2015-12-15 19:25               ` Glenn Morris
2015-12-15 19:40                 ` David Kastrup
  -- strict thread matches above, loose matches on Subject: below --
2015-12-15 14:23 Pádraig Brady

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.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).