aboutsummaryrefslogtreecommitdiffstats
path: root/doc/lispref/debugging.texi
diff options
context:
space:
mode:
authorGlenn Morris2018-02-17 07:50:28 -0800
committerGlenn Morris2018-02-17 07:50:28 -0800
commit4fa90ff8f5fda54fc42049c990c52d3e5236fbe6 (patch)
tree6c0a7893b3aab0166b35938338fa289c3a01df74 /doc/lispref/debugging.texi
parentcb3863370cbe574810f796726faa39ba0de0a429 (diff)
parente5a29330aae4491fd384bacaff6f453c6434d322 (diff)
downloademacs-4fa90ff8f5fda54fc42049c990c52d3e5236fbe6.tar.gz
emacs-4fa90ff8f5fda54fc42049c990c52d3e5236fbe6.zip
Merge from origin/emacs-26
e5a2933 (origin/emacs-26) lisp/vc/: documentation fixes f21f8e6 Document 'desktop-files-not-to-save' d8917eb Improve documentation of Profiling features b228839 Improve indexing of "performance" in ELisp manual ab67b3e Minor change in Emacs manual's VC chapter c352434 Avoid memory corruption with specpdl overflow + edebug (Bug#3... 593bbda Document comment-fill-column in the manual (Bug#11636) bd4cc8d * doc/emacs/dired.texi (Marks vs Flags): Copyedits. 69107f3 ; Fix doc typos related to indefinite articles aaad1e6 Merge branch 'emacs-26' of git.savannah.gnu.org:/srv/git/emac... 5906418 More fixes for the Emacs manual 9ab3df1 ; Fix doc typos related to indefinite articles 66a4e65 ; Fix doc typos related to indefinite articles 35e5c57 ; Fix doc typos related to indefinite articles
Diffstat (limited to 'doc/lispref/debugging.texi')
-rw-r--r--doc/lispref/debugging.texi60
1 files changed, 37 insertions, 23 deletions
diff --git a/doc/lispref/debugging.texi b/doc/lispref/debugging.texi
index 09692073bf9..2daa8a5578f 100644
--- a/doc/lispref/debugging.texi
+++ b/doc/lispref/debugging.texi
@@ -918,51 +918,65 @@ be cleaner to combine them.
918@section Profiling 918@section Profiling
919@cindex profiling 919@cindex profiling
920@cindex profile 920@cindex profile
921@cindex performance analysis
921@cindex measuring resource usage 922@cindex measuring resource usage
922@cindex memory usage 923@cindex memory usage
923 924
924If your program is working correctly, but you want to make it run more 925If your program is working correctly, but not fast enough, and you
925quickly or efficiently, the first thing to do is @dfn{profile} your 926want to make it run more quickly or efficiently, the first thing to do
926code so that you know how it is using resources. If you find that one 927is @dfn{profile} your code so that you know where it spends most of
927particular function is responsible for a significant portion of the 928the execution time. If you find that one particular function is
928runtime, you can start looking for ways to optimize that piece. 929responsible for a significant portion of the execution time, you can
930start looking for ways to optimize that piece.
929 931
930Emacs has built-in support for this. To begin profiling, type 932Emacs has built-in support for this. To begin profiling, type
931@kbd{M-x profiler-start}. You can choose to profile by processor 933@kbd{M-x profiler-start}. You can choose to profile by processor
932usage, memory usage, or both. After doing some work, type 934usage, memory usage, or both. Then run the code you'd like to speed
933@kbd{M-x profiler-report} to display a summary buffer for each 935up. After that, type @kbd{M-x profiler-report} to display a summary
934resource that you chose to profile. The names of the report buffers 936buffer for each resource (cpu and memory) that you chose to profile.
935include the times at which the reports were generated, so you can 937The names of the report buffers include the times at which the reports
936generate another report later on without erasing previous results. 938were generated, so you can generate another report later on without
937When you have finished profiling, type @kbd{M-x profiler-stop} (there 939erasing previous results. When you have finished profiling, type
938is a small overhead associated with profiling). 940@kbd{M-x profiler-stop} (there is a small overhead associated with
941profiling, so we don't recommend leaving it active except when you are
942actually running the code you want to examine).
939 943
940The profiler report buffer shows, on each line, a function that was 944The profiler report buffer shows, on each line, a function that was
941called, followed by how much resource (processor or memory) it used in 945called, followed by how much resources (cpu or memory) it used in
942absolute and percentage times since profiling started. If a given 946absolute and percentage terms since profiling started. If a given
943line has a @samp{+} symbol at the left-hand side, you can expand that 947line has a @samp{+} symbol at the left-hand side, you can expand that
944line by typing @kbd{@key{RET}}, in order to see the function(s) called 948line by typing @kbd{@key{RET}}, in order to see the function(s) called
945by the higher-level function. Use a prefix argument (@kbd{C-u 949by the higher-level function. Use a prefix argument (@kbd{C-u
946@key{RET}}) to see the whole call tree below a function. Pressing 950@key{RET}}) to see the whole call tree below a function. Pressing
947@kbd{@key{RET}} again will collapse back to the original state. 951@kbd{@key{RET}} again will collapse back to the original state.
948 952
949Press @kbd{j} or @kbd{mouse-2} to jump to the definition of a function. 953Press @kbd{j} or @kbd{mouse-2} to jump to the definition of a function
950Press @kbd{d} to view a function's documentation. 954at point. Press @kbd{d} to view a function's documentation. You can
951You can save a profile to a file using @kbd{C-x C-w}. 955save a profile to a file using @kbd{C-x C-w}. You can compare two
952You can compare two profiles using @kbd{=}. 956profiles using @kbd{=}.
953 957
954@c FIXME reversed calltree? 958@c FIXME reversed calltree?
955 959
956@cindex @file{elp.el} 960@cindex @file{elp.el}
957@cindex timing programs 961@cindex timing programs
958The @file{elp} library offers an alternative approach. See the file 962The @file{elp} library offers an alternative approach, which is useful
959@file{elp.el} for instructions. 963when you know in advance which Lisp function(s) you want to profile.
964Using that library, you begin by setting @code{elp-function-list} to
965the list of function symbols---those are the functions you want to
966profile. Then type @w{@kbd{M-x elp-instrument-list @key{RET} nil
967@key{RET}}} to arrange for profiling those functions. After running
968the code you want to profile, invoke @w{@kbd{M-x elp-results}} to
969display the current results. See the file @file{elp.el} for more
970detailed instructions. This approach is limited to profiling
971functions written in Lisp, it cannot profile Emacs primitives.
960 972
961@cindex @file{benchmark.el} 973@cindex @file{benchmark.el}
962@cindex benchmarking 974@cindex benchmarking
963You can check the speed of individual Emacs Lisp forms using the 975You can measure the time it takes to evaluate individual Emacs Lisp
964@file{benchmark} library. See the functions @code{benchmark-run} and 976forms using the @file{benchmark} library. See the macros
965@code{benchmark-run-compiled} in @file{benchmark.el}. 977@code{benchmark-run} and @code{benchmark-run-compiled} in
978@file{benchmark.el}. You can also use the @code{benchmark} command
979for timing forms interactively.
966 980
967@c Not worth putting in the printed manual. 981@c Not worth putting in the printed manual.
968@ifnottex 982@ifnottex