forked from prawnpdf/prawn
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtable_bench.rb
40 lines (32 loc) · 1.41 KB
/
table_bench.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# encoding: utf-8
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
require "prawn"
require "benchmark"
# Helpers for benchmark
class String
CHARS = ("a".."z").to_a
def self.random(length)
length.times.collect { CHARS.sample }.join
end
end
def data_for_table(columns,rows,string_size)
rows.times.collect { columns.times.collect { String.random(string_size) }}
end
def benchmark_table_generation(columns,rows,string_size,options={})
data = data_for_table(columns,rows,string_size)
Benchmark.bm do |x|
x.report("#{columns}x#{rows} table (#{columns*rows} cells, with #{string_size} char string contents#{", options = #{options.inspect}" unless options.empty?})") do
Prawn::Document.new { table(data,options) }.render
end
end
end
# Slowest case: styled table, which is very squeezed horizontally,
# so text has to be wrapped
benchmark_table_generation(26,50,10, :row_colors => ['FFFFFF','F0F0FF'], :header => true, :cell_style => {:inline_format=>true})
# Try building and rendering tables of different sizes
benchmark_table_generation(10,400,5)
benchmark_table_generation(10,200,5)
benchmark_table_generation(10,100,5)
# Try different optional arguments to Prawn::Document#table
benchmark_table_generation(10,450,5, :cell_style => {:inline_format=>true})
benchmark_table_generation(10,450,5, :row_colors => ['FFFFFF','F0F0FF'], :header => true, :cell_style => {:inline_format=>true})