annotate scripts/general/profshow.m @ 12977:9db4e9b352d6

Add index into FunctionTable to profshow output table. profshow.m: Also print the index into FunctionTable for each line.
author Daniel Kraft <d@domob.eu>
date Fri, 19 Aug 2011 16:39:09 +0200
parents dae596be0571
children 66662c033301
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12871
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
1 ## Copyright (C) 2011 Daniel Kraft
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
2 ##
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
3 ## This file is part of Octave.
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
4 ##
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
5 ## Octave is free software; you can redistribute it and/or modify it
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
6 ## under the terms of the GNU General Public License as published by
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
7 ## the Free Software Foundation; either version 3 of the License, or (at
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
8 ## your option) any later version.
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
9 ##
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
10 ## Octave is distributed in the hope that it will be useful, but
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
13 ## General Public License for more details.
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
14 ##
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
15 ## You should have received a copy of the GNU General Public License
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
16 ## along with Octave; see the file COPYING. If not, see
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
17 ## <http://www.gnu.org/licenses/>.
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
18
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
19 ## -*- texinfo -*-
12872
031e1a2c26f3 Vectorize and use Octave coding conventions for profile script files
Rik <octave@nomad.inbox5.com>
parents: 12871
diff changeset
20 ## @deftypefn {Function File} {} profshow (@var{data})
12871
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
21 ## @deftypefnx {Function File} {} profshow (@var{data}, @var{n})
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
22 ## Show flat profiler results.
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
23 ##
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
24 ## This command prints out profiler data as a flat profile. @var{data} is the
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
25 ## structure returned by @code{profile ('info')}. If @var{n} is given, it
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
26 ## specifies the number of functions to show in the profile; functions are
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
27 ## sorted in descending order by total time spent in them. If there are more
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
28 ## than @var{n} included in the profile, those will not be shown. @var{n}
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
29 ## defaults to 20.
12887
ca5c1115b679 Show recursive-flag of functions in profshow.
Daniel Kraft <d@domob.eu>
parents: 12872
diff changeset
30 ##
ca5c1115b679 Show recursive-flag of functions in profshow.
Daniel Kraft <d@domob.eu>
parents: 12872
diff changeset
31 ## The attribute column shows @samp{R} for recursive functions and nothing
ca5c1115b679 Show recursive-flag of functions in profshow.
Daniel Kraft <d@domob.eu>
parents: 12872
diff changeset
32 ## otherwise.
12871
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
33 ## @end deftypefn
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
34
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
35 ## Built-in profiler.
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
36 ## Author: Daniel Kraft <d@domob.eu>
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
37
12872
031e1a2c26f3 Vectorize and use Octave coding conventions for profile script files
Rik <octave@nomad.inbox5.com>
parents: 12871
diff changeset
38 function profshow (data, n = 20)
12871
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
39
12872
031e1a2c26f3 Vectorize and use Octave coding conventions for profile script files
Rik <octave@nomad.inbox5.com>
parents: 12871
diff changeset
40 if (nargin < 1 || nargin > 2)
031e1a2c26f3 Vectorize and use Octave coding conventions for profile script files
Rik <octave@nomad.inbox5.com>
parents: 12871
diff changeset
41 print_usage ();
031e1a2c26f3 Vectorize and use Octave coding conventions for profile script files
Rik <octave@nomad.inbox5.com>
parents: 12871
diff changeset
42 endif
031e1a2c26f3 Vectorize and use Octave coding conventions for profile script files
Rik <octave@nomad.inbox5.com>
parents: 12871
diff changeset
43
031e1a2c26f3 Vectorize and use Octave coding conventions for profile script files
Rik <octave@nomad.inbox5.com>
parents: 12871
diff changeset
44 n = fix (n);
031e1a2c26f3 Vectorize and use Octave coding conventions for profile script files
Rik <octave@nomad.inbox5.com>
parents: 12871
diff changeset
45 if (! isscalar (n) || ! isreal (n) || ! (n > 0))
031e1a2c26f3 Vectorize and use Octave coding conventions for profile script files
Rik <octave@nomad.inbox5.com>
parents: 12871
diff changeset
46 error ("profile: N must be a positive integer");
12871
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
47 endif
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
48
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
49 m = length (data.FunctionTable);
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
50 n = min (n, m);
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
51
12872
031e1a2c26f3 Vectorize and use Octave coding conventions for profile script files
Rik <octave@nomad.inbox5.com>
parents: 12871
diff changeset
52 ## We want to sort by times in descending order. For this, extract the
031e1a2c26f3 Vectorize and use Octave coding conventions for profile script files
Rik <octave@nomad.inbox5.com>
parents: 12871
diff changeset
53 ## times to an array, then sort this, and use the resulting index permutation
031e1a2c26f3 Vectorize and use Octave coding conventions for profile script files
Rik <octave@nomad.inbox5.com>
parents: 12871
diff changeset
54 ## to print out our table.
031e1a2c26f3 Vectorize and use Octave coding conventions for profile script files
Rik <octave@nomad.inbox5.com>
parents: 12871
diff changeset
55 times = -[ data.FunctionTable.TotalTime ];
031e1a2c26f3 Vectorize and use Octave coding conventions for profile script files
Rik <octave@nomad.inbox5.com>
parents: 12871
diff changeset
56
12871
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
57 [~, p] = sort (times);
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
58
12872
031e1a2c26f3 Vectorize and use Octave coding conventions for profile script files
Rik <octave@nomad.inbox5.com>
parents: 12871
diff changeset
59 ## For printing the table, find out the maximum length of a function name
031e1a2c26f3 Vectorize and use Octave coding conventions for profile script files
Rik <octave@nomad.inbox5.com>
parents: 12871
diff changeset
60 ## so that we can proportion the table accordingly. Based on this,
031e1a2c26f3 Vectorize and use Octave coding conventions for profile script files
Rik <octave@nomad.inbox5.com>
parents: 12871
diff changeset
61 ## we can build the format used for printing table rows.
12889
dae596be0571 profshow.m: Change Matlab-style single quotes to Octave-style double quotes
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 12887
diff changeset
62 nameLen = length ("Function");
12871
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
63 for i = 1 : n
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
64 nameLen = max (nameLen, length (data.FunctionTable(p(i)).FunctionName));
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
65 endfor
12977
9db4e9b352d6 Add index into FunctionTable to profshow output table.
Daniel Kraft <d@domob.eu>
parents: 12889
diff changeset
66 headerFormat = sprintf ("%%4s %%%ds %%4s %%12s %%12s\n", nameLen);
9db4e9b352d6 Add index into FunctionTable to profshow output table.
Daniel Kraft <d@domob.eu>
parents: 12889
diff changeset
67 rowFormat = sprintf ("%%4d %%%ds %%4s %%12.3f %%12d\n", nameLen);
12871
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
68
12977
9db4e9b352d6 Add index into FunctionTable to profshow output table.
Daniel Kraft <d@domob.eu>
parents: 12889
diff changeset
69 printf (headerFormat, "#", "Function", "Attr", "Time (s)", "Calls");
9db4e9b352d6 Add index into FunctionTable to profshow output table.
Daniel Kraft <d@domob.eu>
parents: 12889
diff changeset
70 printf ("%s\n", repmat ("-", 1, nameLen + 2 * 5 + 2 * 13));
12871
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
71 for i = 1 : n
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
72 row = data.FunctionTable(p(i));
12889
dae596be0571 profshow.m: Change Matlab-style single quotes to Octave-style double quotes
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 12887
diff changeset
73 attr = "";
12887
ca5c1115b679 Show recursive-flag of functions in profshow.
Daniel Kraft <d@domob.eu>
parents: 12872
diff changeset
74 if (row.IsRecursive)
12889
dae596be0571 profshow.m: Change Matlab-style single quotes to Octave-style double quotes
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 12887
diff changeset
75 attr = "R";
12887
ca5c1115b679 Show recursive-flag of functions in profshow.
Daniel Kraft <d@domob.eu>
parents: 12872
diff changeset
76 endif
12977
9db4e9b352d6 Add index into FunctionTable to profshow output table.
Daniel Kraft <d@domob.eu>
parents: 12889
diff changeset
77 printf (rowFormat, p(i), row.FunctionName, attr, ...
9db4e9b352d6 Add index into FunctionTable to profshow output table.
Daniel Kraft <d@domob.eu>
parents: 12889
diff changeset
78 row.TotalTime, row.NumCalls);
12871
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
79 endfor
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
80
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
81 endfunction
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
82
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
83 %!demo
12889
dae596be0571 profshow.m: Change Matlab-style single quotes to Octave-style double quotes
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 12887
diff changeset
84 %! profile ("on");
12871
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
85 %! A = rand (100);
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
86 %! B = expm (A);
12889
dae596be0571 profshow.m: Change Matlab-style single quotes to Octave-style double quotes
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 12887
diff changeset
87 %! profile ("off");
dae596be0571 profshow.m: Change Matlab-style single quotes to Octave-style double quotes
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 12887
diff changeset
88 %! T = profile ("info");
12871
23377c46516b Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff changeset
89 %! profshow (T, 10);
12887
ca5c1115b679 Show recursive-flag of functions in profshow.
Daniel Kraft <d@domob.eu>
parents: 12872
diff changeset
90
ca5c1115b679 Show recursive-flag of functions in profshow.
Daniel Kraft <d@domob.eu>
parents: 12872
diff changeset
91 %!demo
ca5c1115b679 Show recursive-flag of functions in profshow.
Daniel Kraft <d@domob.eu>
parents: 12872
diff changeset
92 %! function f = myfib (n)
ca5c1115b679 Show recursive-flag of functions in profshow.
Daniel Kraft <d@domob.eu>
parents: 12872
diff changeset
93 %! if (n <= 2)
ca5c1115b679 Show recursive-flag of functions in profshow.
Daniel Kraft <d@domob.eu>
parents: 12872
diff changeset
94 %! f = 1;
ca5c1115b679 Show recursive-flag of functions in profshow.
Daniel Kraft <d@domob.eu>
parents: 12872
diff changeset
95 %! else
ca5c1115b679 Show recursive-flag of functions in profshow.
Daniel Kraft <d@domob.eu>
parents: 12872
diff changeset
96 %! f = myfib (n - 1) + myfib (n - 2);
ca5c1115b679 Show recursive-flag of functions in profshow.
Daniel Kraft <d@domob.eu>
parents: 12872
diff changeset
97 %! endif
ca5c1115b679 Show recursive-flag of functions in profshow.
Daniel Kraft <d@domob.eu>
parents: 12872
diff changeset
98 %! endfunction
12889
dae596be0571 profshow.m: Change Matlab-style single quotes to Octave-style double quotes
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 12887
diff changeset
99 %! profile ("on");
12887
ca5c1115b679 Show recursive-flag of functions in profshow.
Daniel Kraft <d@domob.eu>
parents: 12872
diff changeset
100 %! myfib (20);
12889
dae596be0571 profshow.m: Change Matlab-style single quotes to Octave-style double quotes
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 12887
diff changeset
101 %! profile ("off");
dae596be0571 profshow.m: Change Matlab-style single quotes to Octave-style double quotes
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 12887
diff changeset
102 %! profshow (profile ("info"), 5);