ergoemacs / ergoemacs-mode

ergoemacs-mode
ergoemacs.github.io/
GNU General Public License v3.0
293 stars 35 forks source link

Slow ace-jump mode #333

Closed mattfidler closed 9 years ago

mattfidler commented 9 years ago

https://mail.google.com/mail/u/0/?pli=1#inbox/14bbc0b406c3d5eb

mattfidler commented 9 years ago

For now a work-around could be:

(defadvice ergoemacs-install-shortcuts-map (around ace-jump-fix (&optional map dont-complete install-read no-brand))
  "Fix ace-jump mode"
  (if (and map (keymapp map) (eq (lookup-key map [t] t) 'ace-jump-done))
      map
    ad-do-it))
holyjak commented 9 years ago

This workaround does not cause any visible improvement for me. I do not understand how it works so it is difficult to guess why :(

According to describe-function there is no fn named ace-jump-fix. Don't I actually create the advice around ergoemacs-install-shortcuts-map to short-circuit it it is working on ace?

mattfidler commented 9 years ago

defadvice changes how functions work. In theory it short-circuts ergoemacs-install-shortcuts-map.

However, that doesn't seem to be the sticking point for you. To find ot what the sticking point is for you, do the following:

Try Alt+a elp-instrument-package

Then type ergoemacs-

Start the ace jump

After jumping to a character type

Alt+a elp-results

It will give you something like the following

ergoemacs-post-command-hook                                         15          0.747         0.0498
ergoemacs-install-shortcuts-map                                     1           0.747         0.747
ergoemacs-install-shortcuts-up                                      30          0.747         0.0249
ergoemacs-map-get                                                   6624        0.7460000000  0.0001126207
ergoemacs-map-p                                                     3792        0.6860000000  0.0001809071
ergoemacs-install-shortcuts-map-name                                1           0.685         0.685
ergoemacs-define-key                                                1409        0.4830000000  0.0003427963
ergoemacs-define-key--is-global-map                                 1409        0.4510000000  0.0003200851
ergoemacs-without-emulation--internal                               18          0.4200000000  0.0233333333
ergoemacs-key-binding                                               15          0.3890000000  0.0259333333
ergoemacs-original-keymap                                           954         0.3570000000  0.0003742138
ergoemacs-submap-p                                                  1409        0.2190000000  0.0001554293
ergoemacs-read-event                                                2           0.2180000000  0.1090000000
ergoemacs-map-composed                                              3792        0.1570000000  4.14...e-005
ergoemacs-map-composed-list                                         3792        0.079         2.08...e-005
ergoemacs-theme--install-shortcut-item                              107         0.062         0.0005794392
ergoemacs-theme--install-shortcuts-list                             1           0.062         0.062
ergoemacs-map-plist                                                 3804        0.062         1.62...e-005
ergoemacs-shortcut-remap-list                                       84          0.061         0.0007261904
ergoemacs-translate                                                 2           0.016         0.008
ergoemacs-copy-list                                                 73          0.016         0.0002191780
ergoemacs-map-composed-p                                            3792        0.016         4.21...e-006
ergoemacs-pretty-key-description                                    26          0.016         0.0006153846
ergoemacs-pretty-key                                                26          0.016         0.0006153846
ergoemacs-map-keymap-value                                          6636        0.015         2.26...e-006
ergoemacs-smart-function-p                                          168         0.015         8.92...e-005
ergoemacs-shift-translate-install                                   8           0.0           0.0
ergoemacs-read-key--echo-command                                    1           0.0           0.0
ergoemacs-event-modifiers                                           26          0.0           0.0
ergoemacs-save-buffer-to-recently-closed                            196         0.0           0.0
ergoemacs--pretty-key-concat                                        4           0.0           0.0
ergoemacs-shortcut-function-binding                                 84          0.0           0.0
ergoemacs-read-key-add-translation                                  20          0.0           0.0
ergoemacs-read-key                                                  1           0             0.0
ergoemacs-event-basic-type                                          26          0.0           0.0
ergoemacs-original-keymap--intern                                   756         0.0           0.0
ergoemacs-real-define-key                                           1409        0.0           0.0
ergoemacs-pretty-key-description--ctl                               13          0.0           0.0
ergoemacs-restore-post-command-hook                                 15          0.0           0.0
ergoemacs-setcdr                                                    901         0.0           0.0
ergoemacs-shortcut-remap                                            1           0             0.0
ergoemacs-map-put                                                   12          0.0           0.0
ergoemacs-theme-component--ignore-globally-defined-key              12          0.0           0.0
ergoemacs-pretty-key-description--modifier                          35          0.0           0.0
ergoemacs-read-key-default                                          1           0             0.0
ergoemacs-to-sequence                                               1           0.0           0.0
ergoemacs-translation-install                                       8           0.0           0.0
ergoemacs-real-this-single-command-keys                             16          0.0           0.0
ergoemacs-this-command-keys-vector                                  111         0.0           0.0
ergoemacs-pretty-key-description--key                               26          0.0           0.0
ergoemacs-this-command-keys                                         1           0.0           0.0
ergoemacs-shuffle-keys                                              30          0.0           0.0
ergoemacs-global-changed-p                                          2           0.0           0.0
ergoemacs-map-parent                                                818         0.0           0.0
ergoemacs-key-description                                           268         0.0           0.0
ergoemacs-real-key-binding                                          45          0.0           0.0
ergoemacs-display-char-p                                            47          0.0           0.0
ergoemacs-read-key-call                                             1           0             0.0
ergoemacs-local-map                                                 4           0.0           0.0
ergoemacs-setup-local-prefixes                                      3           0.0           0.0
ergoemacs-read-event-change                                         2           0.0           0.0
ergoemacs-curr-layout-symbol                                        45          0.0           0.0
ergoemacs-global-set-key-after                                      12          0.0           0.0
ergoemacs-real-key-description                                      268         0.0           0.0
ergoemacs-real-this-command-keys                                    1           0.0           0.0
ergoemacs-extract-prefixes                                          1           0.0           0.0
ergoemacs-emulations                                                94          0.0           0.0
ergoemacs-real-this-command-keys-vector                             111         0.0           0.0
ergoemacs-event-modifier-hash                                       45          0.0           0.0
ergoemacs-unicode-char                                              47          0.0           0.0
ergoemacs-key-fn-lookup                                             2           0.0           0.0
ergoemacs-this-single-command-keys                                  16          0.0           0.0
ergoemacs-delete-cached-movement                                    979         0.0           0.0
ergoemacs-read-key-lookup                                           2           0.0           0.0
ergoemacs-pre-command-hook                                          15          0.0           0.0
ergoemacs-translate-shifted                                         30          0.0           0.0
mattfidler commented 9 years ago

For me, the issue is ergoemacs-install-shortcuts-map

If I install the advice, I get:

ergoemacs-read-key                                                  2           7.917         3.9585
ergoemacs-read-key-default                                          1           7.902         7.902
ergoemacs-shortcut-remap                                            4           7.747         1.93675
ergoemacs-read-key-lookup                                           3           7.715         2.5716666666
ergoemacs-read-key-call                                             4           7.683         1.92075
ergoemacs-map-get                                                   32854       3.7240000000  0.0001133499
ergoemacs-define-key                                                7902        3.3030000000  0.0004179954
ergoemacs-define-key--is-global-map                                 7902        3.0070000000  0.0003805365
ergoemacs-map-p                                                     17035       2.4030000000  0.0001410625
ergoemacs-submap-p                                                  7902        1.4929999999  0.0001889395
ergoemacs-map-plist                                                 17047       0.7670000000  4.49...e-005
ergoemacs-map-composed                                              17035       0.7630000000  4.47...e-005
ergoemacs-post-command-hook                                         11          0.67          0.0609090909
ergoemacs-install-shortcuts-map-name                                1           0.67          0.67
ergoemacs-install-shortcuts-map                                     1           0.67          0.67
ergoemacs-install-shortcuts-up                                      22          0.67          0.0304545454
ergoemacs-map-composed-list                                         17035       0.6390000000  3.75...e-005
ergoemacs-without-emulation--internal                               23          0.2050000000  0.0089130434
ergoemacs-original-keymap                                           1215        0.1730000000  0.0001423868
ergoemacs-key-binding                                               15          0.1410000000  0.0094
ergoemacs-read-event                                                3           0.14          0.0466666666
ergoemacs-map-keymap-value                                          32866       0.124         3.77...e-006
ergoemacs-map-composed-p                                            17035       0.109         6.39...e-006
ergoemacs-shortcut-remap-list                                       4           0.064         0.016
ergoemacs-beginning-or-end-of-buffer                                1           0.032         0.032
ergoemacs-real-define-key                                           7902        0.031         3.92...e-006
ergoemacs-pretty-key-description--modifier                          47          0.031         0.0006595744
ergoemacs-translate                                                 3           0.031         0.0103333333
ergoemacs-pretty-key-description                                    41          0.031         0.0007560975
ergoemacs-pretty-key                                                41          0.031         0.0007560975
ergoemacs-original-keymap--intern                                   962         0.03          3.11...e-005
ergoemacs-move-cursor-next-pane                                     1           0.016         0.016
ergoemacs-display-char-p                                            54          0.016         0.0002962962
ergoemacs-unicode-char                                              54          0.016         0.0002962962
ergoemacs-shortcut                                                  1           0.015         0.015
ergoemacs-shortcut---internal                                       1           0.015         0.015
ergoemacs-shift-translate-install                                   12          0.0           0.0
ergoemacs-read-key--echo-command                                    2           0.0           0.0
ergoemacs-event-modifiers                                           41          0.0           0.0
ergoemacs--pretty-key-concat                                        6           0.0           0.0
ergoemacs-shortcut-function-binding                                 4           0.0           0.0
ergoemacs-read-key-add-translation                                  30          0.0           0.0
ergoemacs-event-basic-type                                          41          0.0           0.0
ergoemacs-pretty-key-description--ctl                               13          0.0           0.0
ergoemacs-restore-post-command-hook                                 11          0.0           0.0
ergoemacs-smart-function-p                                          23          0.0           0.0
ergoemacs-setcdr                                                    1157        0.0           0.0
ergoemacs-map-put                                                   12          0.0           0.0
ergoemacs-theme-component--ignore-globally-defined-key              12          0.0           0.0
ergoemacs-to-sequence                                               2           0.0           0.0
ergoemacs-translation-install                                       12          0.0           0.0
ergoemacs-real-this-single-command-keys                             13          0.0           0.0
ergoemacs-this-command-keys-vector                                  162         0.0           0.0
ergoemacs-pretty-key-description--key                               41          0.0           0.0
ergoemacs-this-command-keys                                         1           0.0           0.0
ergoemacs-shuffle-keys                                              22          0.0           0.0
ergoemacs-global-changed-p                                          3           0.0           0.0
ergoemacs-map-parent                                                1025        0.0           0.0
ergoemacs-key-description                                           122         0.0           0.0
ergoemacs-copy-list                                                 93          0.0           0.0
ergoemacs-real-key-binding                                          55          0.0           0.0
ergoemacs-local-map                                                 6           0.0           0.0
ergoemacs-setup-local-prefixes                                      3           0.0           0.0
ergoemacs-read-event-change                                         3           0.0           0.0
ergoemacs-curr-layout-symbol                                        82          0.0           0.0
ergoemacs-global-set-key-after                                      12          0.0           0.0
ergoemacs-real-key-description                                      122         0.0           0.0
ergoemacs-real-this-command-keys                                    1           0.0           0.0
ergoemacs-extract-prefixes                                          1           0.0           0.0
ergoemacs-emulations                                                88          0.0           0.0
ergoemacs-real-this-command-keys-vector                             162         0.0           0.0
ergoemacs-event-modifier-hash                                       82          0.0           0.0
ergoemacs-key-fn-lookup                                             3           0.0           0.0
ergoemacs-this-single-command-keys                                  13          0.0           0.0
ergoemacs-delete-cached-movement                                    27          0.0           0.0
ergoemacs-pre-command-hook                                          11          0.0           0.0
ergoemacs-translate-shifted                                         48          0.0           0.0
mattfidler commented 9 years ago

I don't know what to optimize based on the above, other than changing how ergoemacs does key translations (which I am currently working on).

The stable release is likely to be faster. You could go with melpa-stable or elpa which both feature the stable release.

holyjak commented 9 years ago

My results are (with the advice installed, provided I applied it correctly):

ergoemacs-install-shortcuts-up                                      10          1.1537069999  0.1153706999
ergoemacs-post-command-hook                                         5           1.1535819999  0.2307164
ergoemacs-install-shortcuts-map                                     1           1.15285       1.15285
ergoemacs-install-shortcuts-map-name                                1           1.152609      1.152609
ergoemacs-without-emulation--internal                               20          0.233374      0.0116687
ergoemacs-key-binding                                               16          0.2217420000  0.0138588750
ergoemacs-original-keymap                                           1826        0.2197080000  0.0001203220
ergoemacs-translate                                                 1           0.013752      0.013752
ergoemacs-pretty-key                                                15          0.0123000000  0.0008200000
ergoemacs-shortcut-remap-list                                       1           0.012093      0.012093
ergoemacs-unicode-char                                              270         0.0077489999  2.869...e-05
ergoemacs-emulations                                                310         0.0065669999  2.118...e-05
ergoemacs-display-char-p                                            270         0.0060019999  2.222...e-05
ergoemacs-translation-install                                       4           0.003883      0.00097075
ergoemacs-global-set-key-after                                      12          0.0036739999  0.0003061666
ergoemacs-theme-component--ignore-globally-defined-key              12          0.003131      0.0002609166
ergoemacs-pre-command-hook                                          5           0.001605      0.000321
ergoemacs-real-key-binding                                          33          0.0013789999  4.178...e-05
ergoemacs-rm-key                                                    120         0.001304      1.086...e-05
ergoemacs-setcdr                                                    1877        0.0009700000  5.167...e-07
ergoemacs-read-event                                                1           0.000962      0.000962
ergoemacs-shift-translate-install                                   4           0.0007        0.000175
ergoemacs-translate-shifted                                         16          0.000288      1.8e-05
ergoemacs-key-description                                           35          0.0002639999  7.542...e-06
ergoemacs-key-fn-lookup                                             1           0.000216      0.000216
ergoemacs-extract-prefixes                                          1           0.000197      0.000197
ergoemacs-shuffle-keys                                              22          0.0001540000  7.000...e-06
ergoemacs-copy-list                                                 81          0.0001499999  1.851...e-06
ergoemacs-global-changed-p                                          12          0.000134      1.116...e-05
ergoemacs-real-substitute-command-keys                              1           9.7e-05       9.7e-05
ergoemacs-real-key-description                                      35          8.699...e-05  2.485...e-06
ergoemacs-this-single-command-keys                                  7           6.8e-05       9.714...e-06
ergoemacs-read-key-add-translation                                  10          6.6e-05       6.6e-06
ergoemacs-smart-function-p                                          10          2.000...e-05  2.000...e-06
ergoemacs-local-map                                                 2           1.6e-05       8e-06
ergoemacs-delete-cached-movement                                    24          1.400...e-05  5.833...e-07
ergoemacs-real-this-single-command-keys                             7           1.2e-05       1.714...e-06
ergoemacs-this-command-keys                                         1           1e-05         1e-05
ergoemacs-restore-post-command-hook                                 5           8e-06         1.6e-06
ergoemacs--pretty-key-concat                                        2           7.000...e-06  3.500...e-06
ergoemacs-read-event-change                                         1           5e-06         5e-06
ergoemacs-setup-local-prefixes                                      3           4e-06         1.333...e-06
ergoemacs-shortcut-function-binding                                 1           4e-06         4e-06
ergoemacs-read-key--echo-command                                    1           3e-06         3e-06
ergoemacs-to-sequence                                               1           3e-06         3e-06
ergoemacs-save-buffer-to-recently-closed                            3           3e-06         1e-06
ergoemacs-real-this-command-keys                                    1           1e-06         1e-06
ergoemacs-read-key-call                                             1           0             0.0
ergoemacs-shortcut                                                  1           0             0.0
ergoemacs-shortcut---internal                                       1           0             0.0
ergoemacs-read-key                                                  1           0             0.0
ergoemacs-shortcut-remap                                            1           0             0.0
ergoemacs-read-key-lookup                                           1           0             0.0

The EE version I have is 20150211.829

holyjak commented 9 years ago

This is my result after commenting out the defdvice and restarting Emacs:

ergoemacs-install-shortcuts-up                                      48          1.2459979999  0.0259582916
ergoemacs-post-command-hook                                         24          1.0906380000  0.0454432500
ergoemacs-install-shortcuts-map                                     1           1.0881        1.0881
ergoemacs-install-shortcuts-map-name                                1           1.079778      1.079778
ergoemacs-without-emulation--internal                               20          0.1901659999  0.0095082999
ergoemacs-key-binding                                               16          0.181747      0.0113591875
ergoemacs-emulations                                                386         0.1611479999  0.0004174818
ergoemacs-pre-command-hook                                          24          0.160761      0.0066983749
ergoemacs-original-keymap                                           1364        0.0262970000  1.927...e-05
ergoemacs-shortcut-remap-list                                       84          0.0147600000  0.0001757142
ergoemacs-translate                                                 1           0.010225      0.010225
ergoemacs-pretty-key                                                15          0.009065      0.0006043333
ergoemacs-theme--install-shortcuts-list                             1           0.008135      0.008135
ergoemacs-theme--install-shortcut-item                              107         0.0077520000  7.244...e-05
ergoemacs-unicode-char                                              270         0.0056009999  2.074...e-05
ergoemacs-display-char-p                                            270         0.0042780000  1.584...e-05
ergoemacs-translation-install                                       4           0.0040479999  0.0010119999
ergoemacs-real-key-binding                                          52          0.0016950000  3.259...e-05
ergoemacs-key-description                                           197         0.001182      6e-06
ergoemacs-read-event                                                1           0.000693      0.000693
ergoemacs-shift-translate-install                                   4           0.00061       0.0001525
ergoemacs-setcdr                                                    1295        0.0005850000  4.517...e-07
ergoemacs-real-key-description                                      197         0.0003719999  1.888...e-06
ergoemacs-shuffle-keys                                              48          0.0003230000  6.729...e-06
ergoemacs-this-single-command-keys                                  26          0.000211      8.115...e-06
ergoemacs-translate-shifted                                         16          0.000204      1.275e-05
ergoemacs-key-fn-lookup                                             1           0.000177      0.000177
ergoemacs-smart-function-p                                          196         0.0001649999  8.418...e-07
ergoemacs-extract-prefixes                                          1           0.000116      0.000116
ergoemacs-copy-list                                                 81          0.0001129999  1.395...e-06
ergoemacs-shortcut-function-binding                                 84          0.0001099999  1.309...e-06
ergoemacs-delete-cached-movement                                    96          9.999...e-05  1.041...e-06
ergoemacs-real-substitute-command-keys                              1           6.4e-05       6.4e-05
ergoemacs-read-key-add-translation                                  10          4.200...e-05  4.200...e-06
ergoemacs-restore-post-command-hook                                 24          4e-05         1.666...e-06
ergoemacs-real-this-single-command-keys                             26          2.600...e-05  1.000...e-06
ergoemacs-local-map                                                 2           1.4e-05       7e-06
ergoemacs-this-command-keys                                         1           1e-05         1e-05
ergoemacs--pretty-key-concat                                        2           4.999...e-06  2.499...e-06
ergoemacs-save-buffer-to-recently-closed                            3           4e-06         1.333...e-06
ergoemacs-read-event-change                                         1           4e-06         4e-06
ergoemacs-to-sequence                                               1           3e-06         3e-06
ergoemacs-setup-local-prefixes                                      3           3e-06         1e-06
ergoemacs-read-key--echo-command                                    1           2e-06         2e-06
ergoemacs-real-this-command-keys                                    1           2e-06         2e-06
ergoemacs-read-key-call                                             1           0             0.0
ergoemacs-shortcut                                                  1           0             0.0
ergoemacs-shortcut---internal                                       1           0             0.0
ergoemacs-read-key                                                  1           0             0.0
ergoemacs-shortcut-remap                                            1           0             0.0
ergoemacs-read-key-lookup                                           1           0             0.0
mattfidler commented 9 years ago

I think this is fixed with the latest master.