* Bug #13377 fixed - showprofile() should display lines numbers
[scilab.git] / scilab / modules / functions / macros / showprofile.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) INRIA
3 // Copyright (C) 2013 - Samuel GOUGEON
4 // Copyright (C) 2014 - Scilab Enterprises
5 //
6 // This file must be used under the terms of the CeCILL.
7 // This source file is licensed as described in the file COPYING, which
8 // you should have received as part of this distribution.  The terms
9 // are also available at
10 // http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
11
12 function showprofile(fun)
13     if argn(2) < 1 then
14         error(sprintf(_("%s: Wrong number of input argument(s): %d expected.\n"), "showprofile", 1));
15     end
16
17     // get profiling results
18     lst = macr2lst(fun);
19     prof = profile(lst);
20
21     // convert to string profiling results
22     nb_calls = string(prof(:,1));
23     cpu_time = string(round(100*prof(:,2))/100);
24     effort = string(prof(:,3));
25
26     // get function code
27     code = fun2string(lst, "fun");
28
29     // line numbers, right justified
30     line_numbers = string(1:size(code, "r"))';
31     line_numbers = justify(line_numbers, "r");
32
33     // left justify
34     nb_calls = justify(nb_calls, "l");
35     cpu_time = justify(cpu_time, "l");
36     effort = justify(effort, "l");
37
38     printf("|%s|%s|%s| %s: %s\n", nb_calls, cpu_time, effort, line_numbers, code);
39 endfunction