class Diagnostics::Sample

Attributes

cycles[W]
warmup_cycles[W]

Public Class Methods

build(cycles=nil, warmup_cycles: nil, gc: nil, &action) click to toggle source
# File lib/diagnostics/sample/sample.rb, line 25
def self.build(cycles=nil, warmup_cycles: nil, gc: nil, &action)
  gc = Defaults.gc if gc.nil?

  result = Result.new
  result.gc = gc

  instance = new(result)

  instance.cycles = cycles unless cycles.nil?
  instance.warmup_cycles = warmup_cycles unless warmup_cycles.nil?

  instance.configure(action: action, gc: gc)
  instance
end
call(cycles=nil, warmup_cycles: nil, gc: nil, &action) click to toggle source
# File lib/diagnostics/sample/sample.rb, line 40
def self.call(cycles=nil, warmup_cycles: nil, gc: nil, &action)
  instance = build(cycles, warmup_cycles: warmup_cycles, gc: gc, &action)
  instance.()
end

Public Instance Methods

call() click to toggle source
# File lib/diagnostics/sample/sample.rb, line 45
def call
  logger.trace { "Starting warmup (Warmup Cycles: #{warmup_cycles})" }

  warmup_cycles.times do |iteration|
    elapsed_time_nanoseconds = measure.(iteration)

    elapsed_time = milliseconds(elapsed_time_nanoseconds)

    result.warmup_cycle(elapsed_time)
  end

  logger.debug { "Finished warmup (Warmup Cycles: #{warmup_cycles})" }

  logger.trace { "Starting sample (Cycles: #{cycles}, Warmup Cycles: #{warmup_cycles})" }

  cycles.times do |iteration|
    elapsed_time_nanoseconds = measure.(iteration + self.warmup_cycles)

    elapsed_time = milliseconds(elapsed_time_nanoseconds)

    result.cycle(elapsed_time)
  end

  logger.info { "Finished sample (Cycles: #{cycles}, Warmup Cycles: #{warmup_cycles}, Mean Cycle Time: #{result.mean_cycle_time_milliseconds}ms)" }

  result
end
configure(action: nil, gc: nil) click to toggle source
# File lib/diagnostics/sample/sample.rb, line 11
def configure(action: nil, gc: nil)
  Measure.configure(self, action: action, gc: gc)
end
cycles() click to toggle source
# File lib/diagnostics/sample/sample.rb, line 16
def cycles
  @cycles ||= Defaults.cycles
end
milliseconds(nanoseconds) click to toggle source
# File lib/diagnostics/sample/sample.rb, line 73
def milliseconds(nanoseconds)
  Rational(nanoseconds, 1_000_000)
end
warmup_cycles() click to toggle source
# File lib/diagnostics/sample/sample.rb, line 21
def warmup_cycles
  @warmup_cycles ||= Defaults.warmup_cycles
end