3 # A wrapper around cg_annotate that sets appropriate command-line options
4 # and rearranges the output so that annotated files occur in a consistent
5 # sorted order. Used by the speed-check.tcl script.
8 set in
[open "|cg_annotate --show=Ir --auto=yes --context=40 $argv" r
]
12 set cntlines
0 ;# true to remember cycle counts on each line
13 set seenSqlite3
0 ;# true if we have seen the sqlite3.c file
15 set line
[string map
{\t { }} [gets $in]]
16 if {[regexp {^
-- Auto-annotated
source: (.
*)} $line all name
]} {
18 if {[string match
*/sqlite3.c
$dest]} {
24 } elseif
{[regexp {^
-- line
(\d
+) ------} $line all ln
]} {
25 set line
[lreplace $line 2 2 {#}]
26 set linenum
[expr {$ln-1}]
27 } elseif
{[regexp {^The following files chosen
for } $line]} {
30 append out
($dest) $line\n
33 if {[regexp {^
*([0-9,]+) } $line all x
]} {
34 set x
[string map
{, {}} $x]
35 set cycles
($linenum) $x
39 foreach x
[lsort [array names out
]] {
43 # If the sqlite3.c file has been seen, then output a summary of the
44 # cycle counts for each file that went into making up sqlite3.c
48 set in
[open sqlite3.c
]
51 set pattern1
{^
/\*+ Begin
file ([^
]+) \*}
52 set pattern2
{^
/\*+ Continuing where we left off in
([^
]+) \*}
56 if {[regexp $pattern1 $line all newfn
]} {
58 } elseif
{[regexp $pattern2 $line all newfn
]} {
60 } elseif
{[info exists cycles
($linenum)]} {
61 incr fcycles
($fn) $cycles($linenum)
65 puts {**********************************************************************}
68 foreach {fn cnt
} [array get fcycles
] {
69 lappend lx
[list $cnt $fn]
72 puts [format {%20s
%14d
%8.3f
%%} TOTAL
$sum 100]
73 foreach entry [lsort -index 0 -integer -decreasing $lx] {
74 foreach {cnt fn
} $entry break
75 puts [format {%20s
%14d
%8.3f
%%} $fn $cnt [expr {$cnt*100.0/$sum}]]