|
# -*- coding: utf-8 -*- |
|
|
|
DESTDIR='/tmp/dest' |
|
|
|
dirname = ARGV.shift |
|
x_label_every = (ARGV.shift || 30).to_i |
|
|
|
def logfile_to_hash(filepath) |
|
STDERR.puts filepath |
|
Hash[*open(filepath, &:read).each_line.drop_while {|i| ! (/\Abenchmark results:/ =~ i) }[3..-3]\ |
|
.map {|i| bmname, *res, _ = i.chomp.split(/\t/); [bmname, res] }.flatten(1)] |
|
end |
|
|
|
target_193 = logfile_to_hash(File.join(dirname, 'bm-target-193.log')) |
|
bm_names = target_193.keys.sort |
|
|
|
# all |
|
# {'bm_app_answer' => {rev => [gem193, nogem193, gemrev, nogemrev, gemrev/gem193, nogemrev/nogem193]}, ...} |
|
all = Dir.glob(File.join(dirname, 'bm-[0-9]*.log')).each.with_object(Hash.new{{}}) do |logfile, obj| |
|
rev = logfile.slice(/\d+/).to_i |
|
begin |
|
h = logfile_to_hash(logfile) |
|
bm_names.each do |bmname| |
|
o = obj[bmname] |
|
gem193, nogem193, gemrev, nogemrev = (target_193[bmname] + h[bmname]).map(&:to_f) |
|
o[rev] = [gem193, nogem193, gemrev, nogemrev, gemrev/gem193, nogemrev/nogem193] |
|
obj[bmname] = o |
|
end |
|
rescue |
|
end |
|
end |
|
|
|
all.each do |bmname, res| |
|
File.open(File.join(DESTDIR, bmname + ".plot"), "w") do |f| |
|
f.puts '"Revision" "_" "_" "_" "_" "--enable-gems" "--disable-gems"' |
|
res.sort_by {|(rev,_)| rev}.map do |*v| |
|
v.join(' ') |
|
end.each_slice(x_label_every) {|(h, *rest)| |
|
f.puts h |
|
f.puts rest.join("\n").gsub(/^[0-9]+/,'""') unless rest.empty? |
|
} |
|
end |
|
end |