Module: Benchmark::Timing

Extended by:
FFI::Library
Defined in:
lib/benchmark/timing.rb

Defined Under Namespace

Classes: TimeVal

Class Method Summary collapse

Class Method Details

.clean_envObject



128
129
130
131
132
133
134
135
# File 'lib/benchmark/timing.rb', line 128

def self.clean_env
  # rbx
  if GC.respond_to? :run
    GC.run(true)
  else
    GC.start
  end
end

.mean(samples) ⇒ Object



100
101
102
103
# File 'lib/benchmark/timing.rb', line 100

def self.mean(samples)
  sum = samples.inject(0) { |acc, i| acc + i }
  sum / samples.size
end

.resample_mean(samples, resample_times = 100) ⇒ Object



117
118
119
120
121
122
123
124
125
126
# File 'lib/benchmark/timing.rb', line 117

def self.resample_mean(samples, resample_times=100)
  resamples = []

  resample_times.times do
    resample = samples.map { samples[rand(samples.size)] }
    resamples << Timing.mean(resample)
  end

  resamples
end

.resolutionObject



79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/benchmark/timing.rb', line 79

def self.resolution
  samples = []

  t1 = TimeVal.new
  t2 = TimeVal.new

  30.times do
    t1.update!

    while true
      t2.update!
      break if t2 != t1
    end

    samples << t1.diff(t2)
  end

  sum = samples.inject(0) { |acc, i| acc + i }
  sum / 30
end

.stddev(samples, m = nil) ⇒ Object



113
114
115
# File 'lib/benchmark/timing.rb', line 113

def self.stddev(samples, m=nil)
  Math.sqrt variance(samples, m)
end

.variance(samples, m = nil) ⇒ Object



105
106
107
108
109
110
111
# File 'lib/benchmark/timing.rb', line 105

def self.variance(samples, m=nil)
  m ||= mean(samples)

  total = samples.inject(0) { |acc, i| acc + ((i - m) ** 2) }

  total / samples.size
end