1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
| BEGIN {
n = 0;
}
{
if ($1 == "calls") {
n++;
}
else if (match ($0, "([a-zA-Z_0-9_]+)[()]+:.*$", b)) {
fun = b[1]
t[fun][n] = $4
self[fun] += $3
name[fun] = fun
}
}
function cmp_func(i1, v1, i2, v2) {
if (self[v1] < self[v2])
return 1;
return -1;
}
END {
asort (name, sname, "cmp_func")
for (i in sname)
if (self[sname[i]] > 0.)
nf++;
print "set key below"
print "set ylabel 'runtime percent'"
print "set yrange [0:100]"
print "set grid front"
every = n/100
if (every < 1)
every = 1;
printf ("plot '-' u 0:%d every %d title columnheader(%d) w filledcurves x1," \
" for[i=%d:2:-1] '-' u 0:(sum [col=i:%d] " \
"column(col)):(sum [col=i-1:%d] column(col))" \
" every %d title columnheader(i-1) w filledcurves\n", \
nf, every, nf, nf, nf, nf, every);
for (k = 0; k < nf; k++) {
for (i = nf; i >= 1; i--)
printf ("%s ", sname[i]);
printf ("\n")
for (j = 1; j < n; j++) {
for (i = nf; i >= 1; i--)
printf ("%g ", 1.*t[sname[i]][j])
printf ("\n")
}
print "e"
}
}
|