debuggers: import openocd-0.7.0
Initial check-in of openocd-0.7.0 as it can be downloaded from http://sourceforge.net/projects/openocd/files/openocd/0.7.0/ Any modifications will follow. Change-Id: I6949beaefd589e046395ea0cb80f4e1ab1654d55
This commit is contained in:
137
debuggers/openocd/jimtcl/tests/perf.test
Normal file
137
debuggers/openocd/jimtcl/tests/perf.test
Normal file
@ -0,0 +1,137 @@
|
||||
source [file dirname [info script]]/testing.tcl
|
||||
|
||||
needs constraint manual
|
||||
|
||||
set iterations 10000
|
||||
|
||||
set version [info patchlevel]
|
||||
|
||||
proc bench {name cmd} {
|
||||
if {[catch {
|
||||
set t [time $cmd 2]
|
||||
set ms [format %.0f [expr {[lindex $t 0] / 1000}]]
|
||||
}]} {
|
||||
set ms ?
|
||||
}
|
||||
puts "$::version: $name ${ms}ms"
|
||||
}
|
||||
|
||||
proc set_dict_sugar {} {
|
||||
for {set i 0} {$i < $::iterations} {incr i} {
|
||||
set a(b) $i
|
||||
}
|
||||
}
|
||||
|
||||
# Note that this case does not benefit from the dict sugar
|
||||
# speedup since a($b) needs to be interpolated and reparsed every time
|
||||
proc set_var_dict_sugar {} {
|
||||
set b b
|
||||
for {set i 0} {$i < $::iterations} {incr i} {
|
||||
set a($b) $i
|
||||
}
|
||||
}
|
||||
|
||||
proc set_var_dict {} {
|
||||
set b b
|
||||
for {set i 0} {$i < $::iterations} {incr i} {
|
||||
dict set a $b $i
|
||||
}
|
||||
}
|
||||
|
||||
proc read_file {file} {
|
||||
set f [open $file]
|
||||
while {[gets $f buf] >= 0} {
|
||||
}
|
||||
close $f
|
||||
}
|
||||
|
||||
proc read_file_split {file} {
|
||||
set f [open $file]
|
||||
while {[gets $f buf] >= 0} {
|
||||
split $buf \t
|
||||
}
|
||||
close $f
|
||||
}
|
||||
|
||||
proc read_file_split_assign_foreach {file} {
|
||||
set f [open $file]
|
||||
while {[gets $f buf] >= 0} {
|
||||
foreach {info(chan) info(datetime) info(duration) info(title) subtitle_genre info(desc) info(rating) dummy} [split $buf \t] {break}
|
||||
}
|
||||
close $f
|
||||
}
|
||||
|
||||
proc read_file_split_assign_foreach_dict {file} {
|
||||
set f [open $file]
|
||||
while {[gets $f buf] >= 0} {
|
||||
foreach {chan datetime duration title subtitle_genre desc rating dummy} [split $buf \t] {break}
|
||||
dict set info chan $chan
|
||||
dict set info duration $duration
|
||||
dict set info title $title
|
||||
dict set info subtitle_genre $subtitle_genre
|
||||
dict set info desc $desc
|
||||
dict set info rating $rating
|
||||
}
|
||||
close $f
|
||||
}
|
||||
|
||||
proc read_file_split_assign_foreach_dictsugar {file} {
|
||||
set f [open $file]
|
||||
while {[gets $f buf] >= 0} {
|
||||
foreach {chan datetime duration title subtitle_genre desc rating dummy} [split $buf \t] {break}
|
||||
set info(chan) $chan
|
||||
set info(duration) $duration
|
||||
set info(title) $title
|
||||
set info(subtitle_genre) $subtitle_genre
|
||||
set info(desc) $desc
|
||||
set info(rating) $rating
|
||||
}
|
||||
close $f
|
||||
}
|
||||
|
||||
proc read_file_split_assign_foreach_simple {file} {
|
||||
set f [open $file]
|
||||
while {[gets $f buf] >= 0} {
|
||||
foreach {chan datetime duration title subtitle_genre desc rating dummy} [split $buf \t] {break}
|
||||
}
|
||||
close $f
|
||||
}
|
||||
|
||||
proc read_file_split_assign_lindex {file} {
|
||||
set f [open $file]
|
||||
while {[gets $f buf] >= 0} {
|
||||
set split [split $buf \t]
|
||||
set info(chan) [lindex $split 0]
|
||||
set info(datetime) [lindex $split 1]
|
||||
set info(duration) [lindex $split 2]
|
||||
set info(title) [lindex $split 3]
|
||||
set info(subtitle_genre) [lindex $split 4]
|
||||
set info(desc) [lindex $split 5]
|
||||
set info(rating) [lindex $split 6]
|
||||
}
|
||||
close $f
|
||||
}
|
||||
|
||||
# Create a really big file
|
||||
set f [open test.in w]
|
||||
for {set i 0} {$i < $::iterations} {incr i} {
|
||||
puts $f "a\tb\tc\te\tf\tg\th\ti\tj\tk"
|
||||
}
|
||||
close $f
|
||||
|
||||
bench "set dictsugar" {set_dict_sugar}
|
||||
bench "set var dictsugar" {set_var_dict_sugar}
|
||||
bench "set var dict" {set_var_dict}
|
||||
# Read once before testing perf
|
||||
read_file test.in
|
||||
bench "read file" {read_file test.in}
|
||||
bench "read file split" {read_file_split test.in}
|
||||
bench "foreach: simple" {read_file_split_assign_foreach_simple test.in}
|
||||
bench "foreach: direct dictsugar" {read_file_split_assign_foreach test.in}
|
||||
bench "foreach: dict cmd" {read_file_split_assign_foreach_dict test.in}
|
||||
bench "foreach: assign to dictsugar" {read_file_split_assign_foreach_dictsugar test.in}
|
||||
bench "foreach: assign to dictsugar via lindex" {read_file_split_assign_lindex test.in}
|
||||
|
||||
file delete test.in
|
||||
|
||||
# testreport
|
||||
Reference in New Issue
Block a user