railsbench 0.9.2 → 0.9.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +1808 -451
- data/GCPATCH +73 -0
- data/INSTALL +5 -0
- data/Manifest.txt +23 -13
- data/PROBLEMS +0 -0
- data/README +23 -7
- data/Rakefile +1 -2
- data/bin/railsbench +7 -1
- data/config/benchmarking.rb +0 -0
- data/config/benchmarks.rb +3 -2
- data/config/benchmarks.yml +0 -0
- data/images/empty.png +0 -0
- data/images/minus.png +0 -0
- data/images/plus.png +0 -0
- data/install.rb +1 -1
- data/latest_changes.txt +18 -0
- data/lib/benchmark.rb +0 -0
- data/lib/railsbench/benchmark.rb +576 -0
- data/lib/railsbench/benchmark_specs.rb +63 -63
- data/lib/railsbench/gc_info.rb +38 -3
- data/lib/railsbench/perf_info.rb +1 -1
- data/lib/railsbench/perf_utils.rb +202 -179
- data/lib/railsbench/railsbenchmark.rb +213 -55
- data/lib/railsbench/version.rb +9 -9
- data/lib/railsbench/write_headers_only.rb +15 -15
- data/postinstall.rb +0 -0
- data/ruby185gc.patch +56 -29
- data/ruby186gc.patch +564 -0
- data/ruby19gc.patch +2425 -0
- data/script/convert_raw_data_files +49 -49
- data/script/generate_benchmarks +14 -4
- data/script/perf_bench +12 -8
- data/script/perf_comp +1 -1
- data/script/perf_comp_gc +9 -1
- data/script/perf_diff +2 -2
- data/script/perf_diff_gc +2 -2
- data/script/perf_html +1 -1
- data/script/perf_plot +192 -75
- data/script/perf_plot_gc +213 -74
- data/script/perf_prof +29 -10
- data/script/perf_run +2 -2
- data/script/perf_run_gc +2 -2
- data/script/perf_table +2 -2
- data/script/perf_tex +1 -1
- data/script/perf_times +6 -6
- data/script/perf_times_gc +14 -2
- data/script/run_urls +16 -10
- data/setup.rb +0 -0
- data/test/railsbench_test.rb +0 -0
- data/test/test_helper.rb +2 -0
- metadata +77 -55
@@ -1,49 +1,49 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
$:.unshift(File.expand_path(File.dirname(__FILE__) + '/../lib'))
|
4
|
-
|
5
|
-
require 'fileutils'
|
6
|
-
require 'railsbench/benchmark_specs'
|
7
|
-
|
8
|
-
ARGV.each do |file_name|
|
9
|
-
backup_file_name = file_name + '~'
|
10
|
-
FileUtils.mv(file_name, backup_file_name)
|
11
|
-
File.open(backup_file_name) do |infile|
|
12
|
-
bench_name = Hash.new{ |hash,key| hash[key] = key }
|
13
|
-
File.open(file_name, "w") do |outfile|
|
14
|
-
infile.each_line do |line|
|
15
|
-
case line
|
16
|
-
when /-bm=([^\s]+)/
|
17
|
-
# $stderr.puts "-bm=#{$1}"
|
18
|
-
outfile.puts(line)
|
19
|
-
benchmarks = BenchmarkSpec.load($1)
|
20
|
-
benchmarks.each{|spec| bench_name[spec.uri] = spec.name}
|
21
|
-
when /^(.*)(\s+[\d\.]+\s+[\d\.]+\s+[\d\.]+\s+\(\s*[\d\.]+\s*\))$/
|
22
|
-
l = $1.length
|
23
|
-
# $stderr.printf "%-#{l}s%s\n", $1.strip, $2
|
24
|
-
outfile.printf "%-#{l}s%s\n", bench_name[$1.strip], $2
|
25
|
-
else
|
26
|
-
outfile.puts(line)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
__END__
|
34
|
-
|
35
|
-
# Copyright (C) 2007 Stefan Kaes
|
36
|
-
#
|
37
|
-
# This program is free software; you can redistribute it and/or modify
|
38
|
-
# it under the terms of the GNU General Public License as published by
|
39
|
-
# the Free Software Foundation; either version 2 of the License, or
|
40
|
-
# (at your option) any later version.
|
41
|
-
#
|
42
|
-
# This program is distributed in the hope that it will be useful,
|
43
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
44
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
45
|
-
# GNU General Public License for more details.
|
46
|
-
#
|
47
|
-
# You should have received a copy of the GNU General Public License
|
48
|
-
# along with this program; if not, write to the Free Software
|
49
|
-
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$:.unshift(File.expand_path(File.dirname(__FILE__) + '/../lib'))
|
4
|
+
|
5
|
+
require 'fileutils'
|
6
|
+
require 'railsbench/benchmark_specs'
|
7
|
+
|
8
|
+
ARGV.each do |file_name|
|
9
|
+
backup_file_name = file_name + '~'
|
10
|
+
FileUtils.mv(file_name, backup_file_name)
|
11
|
+
File.open(backup_file_name) do |infile|
|
12
|
+
bench_name = Hash.new{ |hash,key| hash[key] = key }
|
13
|
+
File.open(file_name, "w") do |outfile|
|
14
|
+
infile.each_line do |line|
|
15
|
+
case line
|
16
|
+
when /-bm=([^\s]+)/
|
17
|
+
# $stderr.puts "-bm=#{$1}"
|
18
|
+
outfile.puts(line)
|
19
|
+
benchmarks = BenchmarkSpec.load($1)
|
20
|
+
benchmarks.each{|spec| bench_name[spec.uri] = spec.name}
|
21
|
+
when /^(.*)(\s+[\d\.]+\s+[\d\.]+\s+[\d\.]+\s+\(\s*[\d\.]+\s*\))$/
|
22
|
+
l = $1.length
|
23
|
+
# $stderr.printf "%-#{l}s%s\n", $1.strip, $2
|
24
|
+
outfile.printf "%-#{l}s%s\n", bench_name[$1.strip], $2
|
25
|
+
else
|
26
|
+
outfile.puts(line)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
__END__
|
34
|
+
|
35
|
+
# Copyright (C) 2007, 2008 Stefan Kaes
|
36
|
+
#
|
37
|
+
# This program is free software; you can redistribute it and/or modify
|
38
|
+
# it under the terms of the GNU General Public License as published by
|
39
|
+
# the Free Software Foundation; either version 2 of the License, or
|
40
|
+
# (at your option) any later version.
|
41
|
+
#
|
42
|
+
# This program is distributed in the hope that it will be useful,
|
43
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
44
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
45
|
+
# GNU General Public License for more details.
|
46
|
+
#
|
47
|
+
# You should have received a copy of the GNU General Public License
|
48
|
+
# along with this program; if not, write to the Free Software
|
49
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
data/script/generate_benchmarks
CHANGED
@@ -1,5 +1,15 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
+
unless ENV['RAILS_ROOT']
|
4
|
+
if File.directory?("config") && File.exists?("config/environment.rb")
|
5
|
+
ENV['RAILS_ROOT'] = File.expand_path(".")
|
6
|
+
else
|
7
|
+
$stderr.puts("\nperf_bench: can't generate benchmarks unless RAILS_ROOT is set")
|
8
|
+
$stderr.puts("\nbenchmarking aborted!")
|
9
|
+
exit 1
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
3
13
|
require "#{ENV['RAILS_ROOT']}/config/environment"
|
4
14
|
require 'application'
|
5
15
|
|
@@ -40,7 +50,7 @@ def dump_entry(name, entry, io = $stdout)
|
|
40
50
|
io.puts "#{name}:"
|
41
51
|
if entry.is_a? Hash
|
42
52
|
VALID_KEYS.each do |key|
|
43
|
-
io.printf "
|
53
|
+
io.printf " %-15s %s\n", key + ':', entry[key] if entry.has_key? key
|
44
54
|
end
|
45
55
|
io.puts
|
46
56
|
elsif entry.is_a? String
|
@@ -50,8 +60,8 @@ def dump_entry(name, entry, io = $stdout)
|
|
50
60
|
end
|
51
61
|
end
|
52
62
|
|
53
|
-
unless Rails::VERSION::
|
54
|
-
$stderr.puts "Rails version #{Rails::VERSION::STRING} is not supported. please use a 1.2.x variety."
|
63
|
+
unless Rails::VERSION::STRING >= "1.2"
|
64
|
+
$stderr.puts "Rails version #{Rails::VERSION::STRING} is not supported. please use a 1.2.x or later variety."
|
55
65
|
exit 1
|
56
66
|
end
|
57
67
|
|
@@ -144,7 +154,7 @@ out.close unless out.nil?
|
|
144
154
|
|
145
155
|
__END__
|
146
156
|
|
147
|
-
# Copyright (C) 2007 Stefan Kaes
|
157
|
+
# Copyright (C) 2007, 2008 Stefan Kaes
|
148
158
|
#
|
149
159
|
# This program is free software; you can redistribute it and/or modify
|
150
160
|
# it under the terms of the GNU General Public License as published by
|
data/script/perf_bench
CHANGED
@@ -3,9 +3,12 @@
|
|
3
3
|
$:.unshift(File.expand_path(File.dirname(__FILE__) + '/../lib'))
|
4
4
|
|
5
5
|
unless ENV['RAILS_ROOT']
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
if File.directory?("config") && File.exists?("config/environment.rb")
|
7
|
+
ENV['RAILS_ROOT'] = File.expand_path(".")
|
8
|
+
else
|
9
|
+
$stderr.puts("\nperf_bench: can't benchmark unless RAILS_ROOT is set")
|
10
|
+
exit 1
|
11
|
+
end
|
9
12
|
end
|
10
13
|
|
11
14
|
trap("INT") { $stderr.puts("benchmarking aborted!"); exit!(-1) }
|
@@ -19,17 +22,18 @@ module Benchmark
|
|
19
22
|
end
|
20
23
|
end
|
21
24
|
require "benchmark"
|
22
|
-
include Benchmark
|
23
25
|
|
24
|
-
bm(32) do |test|
|
26
|
+
Benchmark.bm(32) do |test|
|
25
27
|
test.report("loading environment") do
|
26
28
|
require 'railsbench/railsbenchmark'
|
27
29
|
require ENV['RAILS_ROOT'] + '/config/benchmarks'
|
28
30
|
end
|
29
31
|
|
30
32
|
trap("INT") do
|
31
|
-
$stderr.
|
32
|
-
ActiveRecord::Base.send :clear_all_cached_connections!
|
33
|
+
$stderr.print "clearing database connections ..."
|
34
|
+
ActiveRecord::Base.send :clear_all_cached_connections! if ActiveRecord::Base.respond_to?(:clear_all_cached_connections)
|
35
|
+
ActiveRecord::Base.send :clear_all_connections! if ActiveRecord::Base.respond_to?(:clear_all_connections)
|
36
|
+
$stderr.puts
|
33
37
|
$stderr.puts "benchmarking aborted!"
|
34
38
|
exit!(-1)
|
35
39
|
end
|
@@ -53,7 +57,7 @@ Benchmark::OUTPUT.close unless Benchmark::OUTPUT.nil? || !ENV['RAILS_BENCHMARK_F
|
|
53
57
|
|
54
58
|
__END__
|
55
59
|
|
56
|
-
# Copyright (C) 2005
|
60
|
+
# Copyright (C) 2005-2008 Stefan Kaes
|
57
61
|
#
|
58
62
|
# This program is free software; you can redistribute it and/or modify
|
59
63
|
# it under the terms of the GNU General Public License as published by
|
data/script/perf_comp
CHANGED
@@ -134,7 +134,7 @@ end
|
|
134
134
|
|
135
135
|
__END__
|
136
136
|
|
137
|
-
# Copyright (C) 2005
|
137
|
+
# Copyright (C) 2005-2008 Stefan Kaes
|
138
138
|
#
|
139
139
|
# This program is free software; you can redistribute it and/or modify
|
140
140
|
# it under the terms of the GNU General Public License as published by
|
data/script/perf_comp_gc
CHANGED
@@ -85,10 +85,18 @@ printf "freelist : #{number_format}\n",
|
|
85
85
|
gcis[0].freelist_min, gcis[1].freelist_min,
|
86
86
|
gcis[0].freelist_max, gcis[1].freelist_max
|
87
87
|
|
88
|
+
printf "\ngarbage per object type:\n"
|
89
|
+
printf "%-12s %9s %9s %9s %7s\n", "object type", "#c1", "#c2", "c2-c1", "c2/c1"
|
90
|
+
|
91
|
+
GCInfo.object_types(gcis).each do |object_type|
|
92
|
+
n1, n2 = gcis[0].garbage_totals[object_type], gcis[1].garbage_totals[object_type]
|
93
|
+
printf "%-12s %9d %9d %9d %7.2f\n", object_type, n1, n2, n2-n1, n2.to_f/n1
|
94
|
+
end
|
95
|
+
|
88
96
|
|
89
97
|
__END__
|
90
98
|
|
91
|
-
# Copyright (C) 2005
|
99
|
+
# Copyright (C) 2005-2008 Stefan Kaes
|
92
100
|
#
|
93
101
|
# This program is free software; you can redistribute it and/or modify
|
94
102
|
# it under the terms of the GNU General Public License as published by
|
data/script/perf_diff
CHANGED
@@ -9,7 +9,7 @@ end
|
|
9
9
|
bindir = File.dirname(__FILE__)
|
10
10
|
require "#{bindir}/../lib/railsbench/perf_utils"
|
11
11
|
|
12
|
-
|
12
|
+
determine_rails_root_or_die!
|
13
13
|
|
14
14
|
iterations = ARGV[0]
|
15
15
|
common = ARGV[1]
|
@@ -31,7 +31,7 @@ system("ruby #{bindir}/perf_comp #{file1} #{file2}")
|
|
31
31
|
|
32
32
|
__END__
|
33
33
|
|
34
|
-
# Copyright (C) 2005
|
34
|
+
# Copyright (C) 2005-2008 Stefan Kaes
|
35
35
|
#
|
36
36
|
# This program is free software; you can redistribute it and/or modify
|
37
37
|
# it under the terms of the GNU General Public License as published by
|
data/script/perf_diff_gc
CHANGED
@@ -9,7 +9,7 @@ end
|
|
9
9
|
bindir = File.dirname(__FILE__)
|
10
10
|
require "#{bindir}/../lib/railsbench/perf_utils"
|
11
11
|
|
12
|
-
|
12
|
+
determine_rails_root_or_die!
|
13
13
|
|
14
14
|
iterations = ARGV[0]
|
15
15
|
common = ARGV[1]
|
@@ -36,7 +36,7 @@ system("ruby #{bindir}/perf_comp_gc #{file1} #{file2}")
|
|
36
36
|
|
37
37
|
__END__
|
38
38
|
|
39
|
-
# Copyright (C) 2005
|
39
|
+
# Copyright (C) 2005-2008 Stefan Kaes
|
40
40
|
#
|
41
41
|
# This program is free software; you can redistribute it and/or modify
|
42
42
|
# it under the terms of the GNU General Public License as published by
|
data/script/perf_html
CHANGED
@@ -86,7 +86,7 @@ end
|
|
86
86
|
|
87
87
|
__END__
|
88
88
|
|
89
|
-
# Copyright (C) 2005
|
89
|
+
# Copyright (C) 2005-2008 Stefan Kaes
|
90
90
|
#
|
91
91
|
# This program is free software; you can redistribute it and/or modify
|
92
92
|
# it under the terms of the GNU General Public License as published by
|
data/script/perf_plot
CHANGED
@@ -1,97 +1,214 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require 'rubygems'
|
4
|
-
|
4
|
+
|
5
|
+
require 'optparse'
|
6
|
+
require 'ostruct'
|
5
7
|
|
6
8
|
$:.unshift(File.expand_path(File.dirname(__FILE__) + '/../lib'))
|
7
9
|
require 'railsbench/perf_info'
|
8
10
|
|
9
|
-
#
|
10
|
-
|
11
|
-
selection = []
|
12
|
-
title = "Performance Graph"
|
13
|
-
files = []
|
14
|
-
names = []
|
15
|
-
labels = []
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
11
|
+
# parse options
|
12
|
+
o = OpenStruct.new
|
13
|
+
o.selection = []
|
14
|
+
o.title = "Performance Graph"
|
15
|
+
o.files = []
|
16
|
+
o.names = []
|
17
|
+
o.labels = []
|
18
|
+
o.graph_type = :line
|
19
|
+
o.graph_width = '800x600'
|
20
|
+
o.font_size = 14
|
21
|
+
o.output_file = nil
|
22
|
+
o.colors = nil
|
23
|
+
o.theme = nil
|
24
|
+
o.engine = :gruff
|
23
25
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
graph_type = Gruff::Bar
|
34
|
-
when /^-width=(\d+)$/
|
35
|
-
graph_width = $1.to_i
|
36
|
-
when /^-geometry=(\d+x\d+)$/
|
37
|
-
graph_width = $1
|
38
|
-
when /^-colors=(.*)$/
|
39
|
-
colors = $1.split(/ *,/)
|
40
|
-
when /^-theme=(.*)$/
|
41
|
-
theme = $1
|
42
|
-
when /^-names=(.+)$/
|
43
|
-
names = $1.split(',')
|
44
|
-
when /^-labels=(.+)$/
|
45
|
-
labels = $1.split(',')
|
46
|
-
when /^-font_size=(\d+)$/
|
47
|
-
font_size = $1.to_i
|
48
|
-
when /^-out=(.+)$/
|
49
|
-
output_file = $1
|
50
|
-
else
|
51
|
-
files << File.open_or_die(arg)
|
52
|
-
names[files.length-1] ||= File.basename(arg).sub(/\.txt$/, '').sub(/^\d\d-\d\d\.[^\.]+./, '')
|
26
|
+
parser = OptionParser.new do |opts|
|
27
|
+
opts.banner = "Usage: perf_plot [options] file1 file2 ..."
|
28
|
+
|
29
|
+
opts.separator ""
|
30
|
+
opts.separator "Options:"
|
31
|
+
|
32
|
+
opts.on("-t", "--title T",
|
33
|
+
"Specify the title for your plot") do |t|
|
34
|
+
o.title = t
|
53
35
|
end
|
36
|
+
|
37
|
+
opts.on("--only LIST", Array,
|
38
|
+
"Restrict plot to a subset of the benchmarks") do |t|
|
39
|
+
o.selection = t.map{|s| s.to_i}
|
40
|
+
end
|
41
|
+
|
42
|
+
opts.on("--line",
|
43
|
+
"Plot a line graph") do |t|
|
44
|
+
o.graph_type = :line
|
45
|
+
end
|
46
|
+
|
47
|
+
opts.on("--bar",
|
48
|
+
"Plot a bar graph") do |t|
|
49
|
+
o.graph_type = :bar
|
50
|
+
end
|
51
|
+
|
52
|
+
opts.on("-w", "--width W", Integer,
|
53
|
+
"Width of the plot (pixels)") do |w|
|
54
|
+
o.graph_width = w
|
55
|
+
end
|
56
|
+
|
57
|
+
opts.on("-g", "--geometry WxH", /\d+x\d+/,
|
58
|
+
"Specify plot dimensions (pixels)") do |d|
|
59
|
+
o.graph_width = d
|
60
|
+
end
|
61
|
+
|
62
|
+
opts.on("-c", "--colors LIST", Array,
|
63
|
+
"Use specified colors for lines/bars") do |t|
|
64
|
+
o.colors = t
|
65
|
+
end
|
66
|
+
|
67
|
+
opts.on("--theme NAME",
|
68
|
+
"Use specified theme") do |t|
|
69
|
+
o.theme = t
|
70
|
+
end
|
71
|
+
|
72
|
+
opts.on("-e", "--engine ENGINE", [:gruff, :gnuplot],
|
73
|
+
"Select plotting engine: (gruff, gnuplot)") do |e|
|
74
|
+
o.engine = e
|
75
|
+
end
|
76
|
+
|
77
|
+
opts.on("-n", "--names LIST", Array,
|
78
|
+
"Use specified names for the legend") do |t|
|
79
|
+
o.names = t
|
80
|
+
end
|
81
|
+
|
82
|
+
opts.on("-l", "--labels LIST", Array,
|
83
|
+
"Use specified labels instead of benchmark names") do |t|
|
84
|
+
o.labels = t
|
85
|
+
end
|
86
|
+
|
87
|
+
opts.on("-o", "--out FILE",
|
88
|
+
"Specify output file") do |f|
|
89
|
+
o.output_file = f
|
90
|
+
end
|
91
|
+
|
92
|
+
opts.on("-f", "--font-size N", Integer,
|
93
|
+
"Overall font size to use in the plot (points)") do |n|
|
94
|
+
o.font_size = n
|
95
|
+
end
|
96
|
+
|
97
|
+
opts.on_tail("-h", "--help", "Show this message") do
|
98
|
+
puts opts
|
99
|
+
exit
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
# option compatibility with older versions
|
104
|
+
args=[]
|
105
|
+
ARGV.each do |arg|
|
106
|
+
arg = arg.sub("font_size", "font-size") if arg =~ /^-font_size/
|
107
|
+
arg = "-" + arg if arg =~ /^-(title|width|out|geometry|font-size|names|labels|colors|line|bar|only)/
|
108
|
+
args << arg
|
54
109
|
end
|
55
110
|
|
56
|
-
|
111
|
+
parser.parse!(args)
|
112
|
+
|
113
|
+
o.output_file ||= o.engine == :gruff ? "graph.png" : "graph.pdf"
|
57
114
|
|
58
|
-
|
59
|
-
files
|
60
|
-
|
61
|
-
iter = pi.iterations
|
62
|
-
urls = pi.requests_per_key
|
63
|
-
perf_data << pi.keys.map{ |key| iter*urls/pi.timings_mean(key) }
|
64
|
-
file.close
|
115
|
+
args.each do |arg|
|
116
|
+
o.files << File.open_or_die(arg)
|
117
|
+
o.names[o.files.length-1] ||= File.basename(arg).sub(/\.txt$/, '').sub(/^\d\d-\d\d\.[^\.]+./, '')
|
65
118
|
end
|
66
119
|
|
67
|
-
|
68
|
-
|
69
|
-
|
120
|
+
o.files.length > 0 or die(parser.banner)
|
121
|
+
|
122
|
+
class Plotter
|
123
|
+
attr_reader :o
|
124
|
+
def initialize(options)
|
125
|
+
@o = options
|
126
|
+
setup
|
127
|
+
end
|
128
|
+
|
129
|
+
def setup
|
130
|
+
pi = nil
|
131
|
+
@perf_data = []
|
132
|
+
o.files.each do |file|
|
133
|
+
pi = PerfInfo.new(file)
|
134
|
+
iter = pi.iterations
|
135
|
+
urls = pi.requests_per_key
|
136
|
+
@perf_data << pi.keys.map{ |key| iter*urls/pi.timings_mean(key) }
|
137
|
+
file.close
|
138
|
+
end
|
139
|
+
o.selection = (1..(@perf_data.last.length)).to_a if o.selection.empty?
|
140
|
+
if o.labels.empty?
|
141
|
+
o.labels = pi.keys.restrict_to(o.selection.map{|i| i-1})
|
142
|
+
end
|
143
|
+
@perf_data = @perf_data.map{|d| d.restrict_to(o.selection.map{|i| i-1})}
|
144
|
+
end
|
145
|
+
|
146
|
+
def plot_with_gruff
|
147
|
+
require 'gruff'
|
148
|
+
|
149
|
+
g = o.graph_type == :line ? Gruff::Line.new(o.graph_width) : Gruff::Bar.new(o.graph_width)
|
150
|
+
g.send "theme_#{o.theme}" if o.theme
|
151
|
+
|
152
|
+
# on OS X, ImagMagick can't find it's default font (arial) sometimes, so specify some font
|
153
|
+
#g.font = 'Arial-Normal' if RUBY_PLATFORM =~ /darwin/
|
154
|
+
g.font = 'Helvetica' if RUBY_PLATFORM =~ /darwin/
|
155
|
+
|
156
|
+
g.replace_colors(o.colors) if o.colors
|
157
|
+
g.title = o.title
|
158
|
+
g.sort = false
|
159
|
+
g.legend_font_size = o.font_size
|
160
|
+
g.legend_box_size = o.font_size
|
161
|
+
g.marker_font_size = o.font_size
|
162
|
+
g.minimum_value = 0
|
163
|
+
g.maximum_value = @perf_data.flatten.max.ceil
|
164
|
+
g.labels = o.labels.index_map
|
165
|
+
@perf_data.each_with_index{|d,i| g.data(o.names[i], d)}
|
166
|
+
g.write(o.output_file)
|
167
|
+
end
|
168
|
+
|
169
|
+
def plot_with_gnuplot
|
170
|
+
require 'gnuplot'
|
171
|
+
Gnuplot.open(false) do |gnuplot|
|
172
|
+
Gnuplot::Plot.new(gnuplot) do |plot|
|
173
|
+
plot.terminal "pdf noenhanced color fname 'Helvetica' fsize 5"
|
174
|
+
plot.output o.output_file
|
175
|
+
plot.xlabel "Benchmarks"
|
176
|
+
plot.ylabel "Requests per second"
|
177
|
+
plot.yrange "[0:*]"
|
178
|
+
plot.title o.title
|
179
|
+
plot.style "fill solid 1.0 noborder"
|
180
|
+
plot.style "data #{o.graph_type == :line ? "linespoints" : "histogram"}"
|
181
|
+
plot.style "histogram cluster gap 1"
|
182
|
+
plot.xtics "nomirror rotate by -45"
|
183
|
+
label_specs = []
|
184
|
+
o.labels.each_with_index{ |l,i| label_specs << "\"#{l}\" #{i}" }
|
185
|
+
plot.xtics "(#{label_specs.join(', ')})"
|
186
|
+
plot.key "outside reverse"
|
187
|
+
#plot.boxwidth "0.95"
|
188
|
+
plot.grid "nopolar"
|
189
|
+
plot.grid "noxtics nomxtics ytics nomytics noztics nomztics nox2tics nomx2tics noy2tics nomy2tics nocbtics nomcbtics"
|
190
|
+
plot.grid "back linetype 0 linewidth 0.7"
|
191
|
+
|
192
|
+
@perf_data.each_with_index do |d,i|
|
193
|
+
plot.data << Gnuplot::DataSet.new([[o.names[i]] + d]) do |ds|
|
194
|
+
ds.using = "1 title 1"
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
def plot
|
202
|
+
send "plot_with_#{o.engine}"
|
203
|
+
end
|
70
204
|
end
|
71
|
-
|
72
|
-
|
73
|
-
# puts selection.inspect
|
74
|
-
# puts labels.inspect
|
75
|
-
# puts perf_data.inspect
|
76
|
-
|
77
|
-
g = graph_type.new(graph_width)
|
78
|
-
g.send "theme_#{theme}" if theme
|
79
|
-
g.replace_colors(colors) if colors
|
80
|
-
g.title = title
|
81
|
-
g.sort = false
|
82
|
-
g.legend_font_size = font_size
|
83
|
-
g.legend_box_size = font_size
|
84
|
-
g.marker_font_size = font_size
|
85
|
-
g.minimum_value = 0
|
86
|
-
g.maximum_value = perf_data.flatten.max.ceil
|
87
|
-
g.labels = labels.index_map
|
88
|
-
perf_data.each_with_index{|d,i| g.data(names[i], d)}
|
89
|
-
g.write(output_file)
|
205
|
+
|
206
|
+
Plotter.new(o).plot
|
90
207
|
|
91
208
|
|
92
209
|
__END__
|
93
210
|
|
94
|
-
# Copyright (C) 2005
|
211
|
+
# Copyright (C) 2005-2008 Stefan Kaes
|
95
212
|
#
|
96
213
|
# This program is free software; you can redistribute it and/or modify
|
97
214
|
# it under the terms of the GNU General Public License as published by
|