| Index: third_party/sqlite/src/tool/cg_anno.tcl
|
| diff --git a/third_party/sqlite/src/tool/cg_anno.tcl b/third_party/sqlite/src/tool/cg_anno.tcl
|
| index f806c5a5af07011394721e7f0cb376ce9935b9b4..43d2b74fcd1224a3bfb058c47a33f940a529f770 100755
|
| --- a/third_party/sqlite/src/tool/cg_anno.tcl
|
| +++ b/third_party/sqlite/src/tool/cg_anno.tcl
|
| @@ -2,23 +2,76 @@
|
| #
|
| # A wrapper around cg_annotate that sets appropriate command-line options
|
| # and rearranges the output so that annotated files occur in a consistent
|
| -# sorted order. Used by the run-speed-test.tcl script.
|
| +# sorted order. Used by the speed-check.tcl script.
|
| #
|
|
|
| set in [open "|cg_annotate --show=Ir --auto=yes --context=40 $argv" r]
|
| set dest !
|
| set out(!) {}
|
| +set linenum 0
|
| +set cntlines 0 ;# true to remember cycle counts on each line
|
| +set seenSqlite3 0 ;# true if we have seen the sqlite3.c file
|
| while {![eof $in]} {
|
| set line [string map {\t { }} [gets $in]]
|
| if {[regexp {^-- Auto-annotated source: (.*)} $line all name]} {
|
| set dest $name
|
| - } elseif {[regexp {^-- line \d+ ------} $line]} {
|
| + if {[string match */sqlite3.c $dest]} {
|
| + set cntlines 1
|
| + set seenSqlite3 1
|
| + } else {
|
| + set cntlines 0
|
| + }
|
| + } elseif {[regexp {^-- line (\d+) ------} $line all ln]} {
|
| set line [lreplace $line 2 2 {#}]
|
| + set linenum [expr {$ln-1}]
|
| } elseif {[regexp {^The following files chosen for } $line]} {
|
| set dest !
|
| }
|
| append out($dest) $line\n
|
| + if {$cntlines} {
|
| + incr linenum
|
| + if {[regexp {^ *([0-9,]+) } $line all x]} {
|
| + set x [string map {, {}} $x]
|
| + set cycles($linenum) $x
|
| + }
|
| + }
|
| }
|
| foreach x [lsort [array names out]] {
|
| puts $out($x)
|
| }
|
| +
|
| +# If the sqlite3.c file has been seen, then output a summary of the
|
| +# cycle counts for each file that went into making up sqlite3.c
|
| +#
|
| +if {$seenSqlite3} {
|
| + close $in
|
| + set in [open sqlite3.c]
|
| + set linenum 0
|
| + set fn sqlite3.c
|
| + set pattern1 {^/\*+ Begin file ([^ ]+) \*}
|
| + set pattern2 {^/\*+ Continuing where we left off in ([^ ]+) \*}
|
| + while {![eof $in]} {
|
| + set line [gets $in]
|
| + incr linenum
|
| + if {[regexp $pattern1 $line all newfn]} {
|
| + set fn $newfn
|
| + } elseif {[regexp $pattern2 $line all newfn]} {
|
| + set fn $newfn
|
| + } elseif {[info exists cycles($linenum)]} {
|
| + incr fcycles($fn) $cycles($linenum)
|
| + }
|
| + }
|
| + close $in
|
| + puts {**********************************************************************}
|
| + set lx {}
|
| + set sum 0
|
| + foreach {fn cnt} [array get fcycles] {
|
| + lappend lx [list $cnt $fn]
|
| + incr sum $cnt
|
| + }
|
| + puts [format {%20s %14d %8.3f%%} TOTAL $sum 100]
|
| + foreach entry [lsort -index 0 -integer -decreasing $lx] {
|
| + foreach {cnt fn} $entry break
|
| + puts [format {%20s %14d %8.3f%%} $fn $cnt [expr {$cnt*100.0/$sum}]]
|
| + }
|
| +}
|
|
|