2015-11-20 18:13:21 +01:00
|
|
|
require "benchmark"
|
|
|
|
class Stats
|
|
|
|
|
|
|
|
def initialize
|
|
|
|
@n = 0
|
|
|
|
@mean = 0.0
|
|
|
|
@variance = 0.0
|
|
|
|
end
|
|
|
|
attr_reader :n , :mean , :variance
|
|
|
|
|
|
|
|
def add(x)
|
|
|
|
@n = @n + 1
|
|
|
|
delta = x - @mean
|
|
|
|
@mean = @mean + delta/@n
|
|
|
|
@variance = @variance + delta*(x - @mean)
|
|
|
|
end
|
|
|
|
def show
|
2015-11-20 19:13:35 +01:00
|
|
|
#puts "no per var"
|
2015-11-20 22:51:58 +01:00
|
|
|
|
|
|
|
puts "#{@n} #{@mean} #{@variance / @n}"
|
2015-11-20 18:13:21 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
class Runner
|
2015-11-20 19:13:35 +01:00
|
|
|
def initialize
|
2015-11-20 18:13:21 +01:00
|
|
|
@stats = Stats.new
|
|
|
|
@cmd = ARGV[0]
|
|
|
|
end
|
|
|
|
def run
|
2015-11-20 22:51:58 +01:00
|
|
|
while true
|
|
|
|
once
|
|
|
|
end
|
2015-11-20 18:13:21 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
def once
|
|
|
|
GC.disable
|
2015-11-20 22:51:58 +01:00
|
|
|
took = Benchmark.measure { %x(#{@cmd} > /dev/null)}.real
|
2015-11-20 18:13:21 +01:00
|
|
|
GC.enable
|
|
|
|
@stats.add took
|
2015-11-20 19:13:35 +01:00
|
|
|
@stats.show
|
2015-11-20 18:13:21 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
Runner.new.run
|