Class: BenchmarkDriver::RubyInterface

Inherits:
Object
  • Object
show all
Defined in:
lib/benchmark_driver/ruby_interface.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(output: nil, runner: nil, repeat_count: 1) ⇒ RubyInterface

Returns a new instance of RubyInterface.

Parameters:

  • output (String, NilClass) (defaults to: nil)
  • runner (String, NilClass) (defaults to: nil)


29
30
31
32
33
34
35
36
37
38
# File 'lib/benchmark_driver/ruby_interface.rb', line 29

def initialize(output: nil, runner: nil, repeat_count: 1)
  @prelude = ''
  @loop_count = nil
  @jobs = []
  @config = BenchmarkDriver::Config.new
  @config.output_type = output.to_s if output
  @config.runner_type = runner.to_s if runner
  @config.repeat_count = Integer(repeat_count)
  @executables = []
end

Class Method Details

.run(**args, &block) ⇒ Object



3
4
5
# File 'lib/benchmark_driver/ruby_interface.rb', line 3

def self.run(**args, &block)
  new(**args).tap { |x| block.call(x) }.run
end

Instance Method Details

#compare!Object

Backward compatibility. This is actually default now.



64
65
66
# File 'lib/benchmark_driver/ruby_interface.rb', line 64

def compare!
  @config.output_type = 'compare'
end

#executable(name:, command:) ⇒ Object

Raises:

  • (ArgumentError)


87
88
89
90
# File 'lib/benchmark_driver/ruby_interface.rb', line 87

def executable(name:, command:)
  raise ArgumentError, "`command' should be an Array" unless command.kind_of? Array
  @executables << BenchmarkDriver::Config::Executable.new(name: name, command: command)
end

#loop_count(count) ⇒ Object

Parameters:

  • count (Integer)


46
47
48
# File 'lib/benchmark_driver/ruby_interface.rb', line 46

def loop_count(count)
  @loop_count = count
end

#output(type) ⇒ Object



59
60
61
# File 'lib/benchmark_driver/ruby_interface.rb', line 59

def output(type)
  @config.output_type = type
end

#prelude(script) ⇒ Object

Parameters:

  • script (String)


41
42
43
# File 'lib/benchmark_driver/ruby_interface.rb', line 41

def prelude(script)
  @prelude << "#{script}\n"
end

#rbenv(*versions) ⇒ Object



68
69
70
71
72
# File 'lib/benchmark_driver/ruby_interface.rb', line 68

def rbenv(*versions)
  versions.each do |version|
    @executables << BenchmarkDriver::Rbenv.parse_spec(version)
  end
end

#report(name, script = nil) ⇒ Object

Parameters:

  • name (String)
    • Name shown on result output.

  • script (String, nil) (defaults to: nil)
    • Benchmarked script in String. If nil, name is considered as script too.



52
53
54
55
56
57
# File 'lib/benchmark_driver/ruby_interface.rb', line 52

def report(name, script = nil)
  if script.nil?
    script = name
  end
  @jobs << { benchmark: [{ name: name, script: script }] }
end

#ridkuse(*versions) ⇒ Object

ridk use command for RubyInstaller2 on Windows



81
82
83
84
85
# File 'lib/benchmark_driver/ruby_interface.rb', line 81

def ridkuse(*versions)
  versions.each do |version|
    @executables << BenchmarkDriver::RidkUse.parse_spec(version)
  end
end

#runObject

Build jobs and run. This is NOT interface for users.



8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/benchmark_driver/ruby_interface.rb', line 8

def run
  unless @executables.empty?
    @config.executables = @executables
  end

  jobs = @jobs.flat_map do |job|
    BenchmarkDriver::JobParser.parse({
      type: @config.runner_type,
      prelude: @prelude,
      loop_count: @loop_count,
    }.merge!(job))
  end
  BenchmarkDriver::Runner.run(jobs, config: @config)
end

#rvm(*versions) ⇒ Object



74
75
76
77
78
# File 'lib/benchmark_driver/ruby_interface.rb', line 74

def rvm(*versions)
  versions.each do |version|
    @executables << BenchmarkDriver::Rvm.parse_spec(version)
  end
end

#verbose(level = 1) ⇒ Object



92
93
94
# File 'lib/benchmark_driver/ruby_interface.rb', line 92

def verbose(level = 1)
  @config.verbose = level
end