class BenchmarkDriver::BulkOutput

This is API for your casual output plugin and NOT internally used by BenchmarkDriver.

By fully utilizing with_*/report APIs, you can implement streaming-output plugins. See also: lib/benchmark_driver/output.rb (this class's instance will be `@output`) But using these APIs can be difficult because the API is not stable yet and it's hard to deal with the complex state machine.

If you don't need to output results in a streaming manner, you can create an output plugin class that inherits `BenchmarkDriver::BulkOutput`, which requires to override only `#bulk_output` that takes all inputs at once.

Public Class Methods

new(metrics:, jobs:, contexts:, options: {}) click to toggle source

@param [Array<BenchmarkDriver::Metric>] metrics @param [Array<BenchmarkDriver::Job>] jobs @param [Array<BenchmarkDriver::Context>] contexts @param [Hash{ Symbol => Object }] options

# File lib/benchmark_driver/bulk_output.rb, line 17
def initialize(metrics:, jobs:, contexts:, options: {})
  @metrics = metrics
end

Public Instance Methods

bulk_output(job_context_result:, metrics:) click to toggle source

The main API you need to override if you make a class inherit `BenchmarkDriver::BulkOutput`. @param [Hash{ BenchmarkDriver::Job => Hash{ BenchmarkDriver::Context => BenchmarkDriver::Result } }] job_context_result @param [Array<BenchmarkDriver::Metric>] metrics

# File lib/benchmark_driver/bulk_output.rb, line 24
def bulk_output(job_context_result:, metrics:)
  raise NotImplementedError.new("#{self.class} must override #bulk_output")
end
report(result) click to toggle source

@param [BenchmarkDriver::Result] result

# File lib/benchmark_driver/bulk_output.rb, line 54
def report(result)
  if defined?(@job_context_result)
    @job_context_result[@job][@context] = result
  end
end
with_benchmark(&block) click to toggle source
# File lib/benchmark_driver/bulk_output.rb, line 32
def with_benchmark(&block)
  @job_context_result = Hash.new do |hash, job|
    hash[job] = {}
  end
  result = block.call
  bulk_output(job_context_result: @job_context_result, metrics: @metrics)
  result
end
with_context(context, &block) click to toggle source

@param [BenchmarkDriver::Context] context

# File lib/benchmark_driver/bulk_output.rb, line 48
def with_context(context, &block)
  @context = context
  block.call
end
with_job(job, &block) click to toggle source

@param [BenchmarkDriver::Job] job

# File lib/benchmark_driver/bulk_output.rb, line 42
def with_job(job, &block)
  @job = job
  block.call
end
with_warmup(&block) click to toggle source
# File lib/benchmark_driver/bulk_output.rb, line 28
def with_warmup(&block)
  block.call # noop
end