Class: BenchmarkDriver::BulkOutput

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

Overview

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.

Instance Method Summary collapse

Constructor Details

#initialize(metrics:, jobs:, contexts:) ⇒ BulkOutput

Returns a new instance of BulkOutput.

Parameters:



16
17
18
# File 'lib/benchmark_driver/bulk_output.rb', line 16

def initialize(metrics:, jobs:, contexts:)
  @metrics = metrics
end

Instance Method Details

#bulk_output(job_context_result:, metrics:) ⇒ Object

The main API you need to override if you make a class inherit ‘BenchmarkDriver::BulkOutput`.

Parameters:

Raises:

  • (NotImplementedError)


23
24
25
# File 'lib/benchmark_driver/bulk_output.rb', line 23

def bulk_output(job_context_result:, metrics:)
  raise NotImplementedError.new("#{self.class} must override #bulk_output")
end

#report(result) ⇒ Object

Parameters:



53
54
55
# File 'lib/benchmark_driver/bulk_output.rb', line 53

def report(result)
  @job_context_result[@job][@context] = result
end

#with_benchmark(&block) ⇒ Object



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

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) ⇒ Object

Parameters:



47
48
49
50
# File 'lib/benchmark_driver/bulk_output.rb', line 47

def with_context(context, &block)
  @context = context
  block.call
end

#with_job(job, &block) ⇒ Object

Parameters:



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

def with_job(job, &block)
  @job = job
  block.call
end

#with_warmup(&block) ⇒ Object



27
28
29
# File 'lib/benchmark_driver/bulk_output.rb', line 27

def with_warmup(&block)
  block.call # noop
end