class Benchmark::IPS::Job
def run
def run @list.each do |item| @suite.running item.label, @time if @suite unless @quiet $stdout.print item.label_rjust end Timing.clean_env iter = 0 target = Time.now + @time measurements_us = [] # Running this number of cycles should take around 100ms. cycles = @timing[item] while Time.now < target before = Time.now item.call_times cycles after = Time.now # If for some reason the timing said this took no time (O_o) # then ignore the iteration entirely and start another. iter_us = time_us before, after next if iter_us <= 0.0 iter += cycles measurements_us << iter_us end final_time = Time.now measured_us = measurements_us.inject(0) { |a,i| a + i } all_ips = measurements_us.map { |time_us| iterations_per_sec cycles, time_us } avg_ips = Timing.mean(all_ips) sd_ips = Timing.stddev(all_ips).round rep = create_report(item, measured_us, iter, avg_ips, sd_ips, cycles) if (final_time - target).abs >= (@time.to_f * MAX_TIME_SKEW) rep.show_total_time! end $stdout.puts " #{rep.body}" unless @quiet @suite.add_report rep, caller(1).first if @suite end end