Mercurial > hg > octave-lyh
annotate scripts/general/profshow.m @ 12889:dae596be0571
profshow.m: Change Matlab-style single quotes to Octave-style double quotes
author | Jordi Gutiérrez Hermoso <jordigh@gmail.com> |
---|---|
date | Tue, 26 Jul 2011 19:07:20 -0500 |
parents | ca5c1115b679 |
children | 9db4e9b352d6 |
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 |
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
|
66 headerFormat = sprintf ("%%%ds %%4s %%12s %%12s\n", nameLen); |
dae596be0571
profshow.m: Change Matlab-style single quotes to Octave-style double quotes
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12887
diff
changeset
|
67 rowFormat = sprintf ("%%%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 |
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
|
69 printf (headerFormat, "Function", "Attr", "Time (s)", "Calls"); |
dae596be0571
profshow.m: Change Matlab-style single quotes to Octave-style double quotes
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12887
diff
changeset
|
70 printf ("%s\n", repmat ("-", 1, nameLen + 2 * 13 + 5)); |
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 |
ca5c1115b679
Show recursive-flag of functions in profshow.
Daniel Kraft <d@domob.eu>
parents:
12872
diff
changeset
|
77 printf (rowFormat, row.FunctionName, attr, row.TotalTime, row.NumCalls); |
12871
23377c46516b
Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff
changeset
|
78 endfor |
23377c46516b
Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff
changeset
|
79 |
23377c46516b
Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff
changeset
|
80 endfunction |
23377c46516b
Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff
changeset
|
81 |
23377c46516b
Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff
changeset
|
82 %!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
|
83 %! profile ("on"); |
12871
23377c46516b
Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff
changeset
|
84 %! A = rand (100); |
23377c46516b
Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff
changeset
|
85 %! 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
|
86 %! 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
|
87 %! T = profile ("info"); |
12871
23377c46516b
Implement the profshow function to print profiler results.
Daniel Kraft <d@domob.eu>
parents:
diff
changeset
|
88 %! profshow (T, 10); |
12887
ca5c1115b679
Show recursive-flag of functions in profshow.
Daniel Kraft <d@domob.eu>
parents:
12872
diff
changeset
|
89 |
ca5c1115b679
Show recursive-flag of functions in profshow.
Daniel Kraft <d@domob.eu>
parents:
12872
diff
changeset
|
90 %!demo |
ca5c1115b679
Show recursive-flag of functions in profshow.
Daniel Kraft <d@domob.eu>
parents:
12872
diff
changeset
|
91 %! function f = myfib (n) |
ca5c1115b679
Show recursive-flag of functions in profshow.
Daniel Kraft <d@domob.eu>
parents:
12872
diff
changeset
|
92 %! if (n <= 2) |
ca5c1115b679
Show recursive-flag of functions in profshow.
Daniel Kraft <d@domob.eu>
parents:
12872
diff
changeset
|
93 %! f = 1; |
ca5c1115b679
Show recursive-flag of functions in profshow.
Daniel Kraft <d@domob.eu>
parents:
12872
diff
changeset
|
94 %! else |
ca5c1115b679
Show recursive-flag of functions in profshow.
Daniel Kraft <d@domob.eu>
parents:
12872
diff
changeset
|
95 %! f = myfib (n - 1) + myfib (n - 2); |
ca5c1115b679
Show recursive-flag of functions in profshow.
Daniel Kraft <d@domob.eu>
parents:
12872
diff
changeset
|
96 %! endif |
ca5c1115b679
Show recursive-flag of functions in profshow.
Daniel Kraft <d@domob.eu>
parents:
12872
diff
changeset
|
97 %! 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
|
98 %! profile ("on"); |
12887
ca5c1115b679
Show recursive-flag of functions in profshow.
Daniel Kraft <d@domob.eu>
parents:
12872
diff
changeset
|
99 %! 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
|
100 %! 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
|
101 %! profshow (profile ("info"), 5); |