| Allegro CL version 10.1 New since the initial 10.1 release. |
Arguments: &key name stream profile verbose
This function returns no value.
Called for side-effect, this function produces a raw outline view of
the selected profile and prints it to the stream (defaulting to
*standard-output*
). The profile
defaults to the current profile, and can be specified as either a
profile object or the name of a named-profile.
The name keyword argument, if provided,
specifies the function for which information is requested. If the name
keyword argument is not specified or is
specified nil
, information on all functions
will be printed. The value of the name keyword
argument can be a symbol
or a compiled function object if you want information on a Lisp
function. The value can also be a string if you want information on a
C function or a Lisp runtime system function. The value can also be
an integer which corresponds to a sequence number as described next.
Before the first call to this function, nodes in the profile graph
have identity and names, but are not sequenced. Whenever this function
is called and produces an outline, the nodes are sequenced, beginning
at 0 for the selected node (or a dummy node named "start" if no node
is selected) and continuing downward to all selected child nodes
recursively in a directed tree graph with no cycles. A node is
selected based on whether its usage is above the
prof:*significance-threshold*
or not - if the
node falls below that threshold, it is not selected nor is it counted.
The outline is printed one node per line, in an indented format that makes it easy to see the node hierarchy. The indentation mostly consists of spaces, to keep the clutter down, but is punctuated with vertical bars, slashes, plus signs, and backslashes to form a visual bracketing mechanism that allows human readability of the hierarchy. There is a complete example here in runtime-analyzer.htm. We repeat just the outline output so we can discuss what is displayed.
cl-user(6): (prof:show-outline-profile) 100.00 "start" 0 100.00 "cont_setstack" 1 100.00 "startup_lisp" 2 100.00 "start_reborn_lisp" 3 100.00 "first_lisp_thread" 4 100.00 excl::lisp-thread-start 5 100.00 excl::run-initial-thread 6 100.00 excl::setup-required-thread-bindings 7 100.00 excl::thread-reset-catcher 8 100.00 excl::thread-bind-and-call 9 100.00 #<Runtime Function Object (:runsys "lisp_apply")> 10 100.00 excl::start-lisp-execution 11 100.00 tpl:start-interactive-top-level 12 100.00 #<Runtime Function Object (:runsys "lisp_apply")> 13 100.00 tpl:top-level-read-eval-print-loop 14 100.00 tpl::top-level-read-eval-print-loop1 15 100.00 excl::read-eval-print-loop 16 100.00 tpl::read-eval-print-one-command 17 100.00 eval 18 100.00 (:anonymous-lambda 17) 19 100.00 prof::prof-a-funcall 20 100.00 (:internal (:anonymous-lambda 17) 0) 21 100.00 foo 22 /37.10 bam 23 | 17.76 excl::*_2op 24 +27.69 #<Runtime Function Object (:runsys "lisp_apply")> 25 |/9.78 bar 26 || 6.55 excl::*_2op 27 |\1.35 "funcall_check" 28 \20.62 bas 29 11.89 excl::*_2op 30
On each line three fields are printed:
Not all nodes are necessarily printed. If the hierarchy goes too
deep, and the columns extend too far to the right, some nodes (lines)
will be elided, and a message will be printed to that effect. The
maximum number of columns indented is controlled by the variable
prof:*outline-max-indentation*
- if a line
must be indented farther than that value it is elided. Note that the
indentation limit does not control the maximum line length directly;
names are never cut off and thus may run arbitrarily long in the
outline output.
See runtime-analyzer.htm for general information on the runtime analyzer.
Copyright (c) 1998-2022, Franz Inc. Lafayette, CA., USA. All rights reserved.
This page is new in the 10.1 release.
Created 2019.8.20.
| Allegro CL version 10.1 New since the initial 10.1 release. |