lib/benchmark_driver/output/gruff.rb in benchmark_driver-output-gruff-0.2.0 vs lib/benchmark_driver/output/gruff.rb in benchmark_driver-output-gruff-0.3.0

- old
+ new

@@ -2,19 +2,21 @@ require 'benchmark_driver' class BenchmarkDriver::Output::Gruff < BenchmarkDriver::BulkOutput GRAPH_PATH = 'graph.png' - # @param [Array<String>] job_names - # @param [Array<String>] context_names - def initialize(job_names:, context_names:) - @context_names = context_names + # @param [Array<BenchmarkDriver::Metric>] metrics + # @param [Array<BenchmarkDriver::Job>] jobs + # @param [Array<BenchmarkDriver::Context>] contexts + def initialize(contexts:, **) + super + @contexts = contexts end # @param [Hash{ BenchmarkDriver::Job => Hash{ BenchmarkDriver::Context => { BenchmarkDriver::Metric => Float } } }] result # @param [Array<BenchmarkDriver::Metric>] metrics - def bulk_output(result:, metrics:) + def bulk_output(job_context_result:, metrics:) print "rendering graph..." g = Gruff::SideBar.new g.theme = { colors: ['#3285e1', '#e2c13e', '#489d32', '#12a702', '#aedaa9', '#6886B4', '#D1695E', '#8A6EAF', '#EFAA43'], marker_color: '#dddddd', @@ -24,24 +26,23 @@ metric = metrics.first # only one metric is supported for now g.x_axis_label = metric.unit g.legend_font_size = 10.0 g.marker_font_size = 14.0 g.minimum_value = 0 - g.maximum_value = (result.values.map(&:values).flatten.map(&:values).flatten.max * 1.2).to_i - if result.keys.size == 1 + results = job_context_result.values.map(&:values).flatten + g.maximum_value = (results.map(&:values).map(&:values).flatten.max * 1.2).to_i + if job_context_result.keys.size == 1 # Use Ruby version for base axis - job = result.keys.first - g.labels = Hash[result[job].keys.map.with_index { |context, index| [index, context.name] } ] - g.data job.name, result[job].map { |_, metric_value| metric_value[metric] } + job = job_context_result.keys.first + g.labels = Hash[job_context_result[job].keys.map.with_index { |context, index| [index, context.name] }] + g.data job.name, job_context_result[job].values.map { |result| result.values.fetch(metric) } else # Use benchmark name for base axis, use different colors for different Ruby versions - jobs = result.keys + jobs = job_context_result.keys g.labels = Hash[jobs.map.with_index { |job, index| [index, job.name] }] - @context_names.each do |context_name| - context = @result[jobs.first].keys.find { |c| c.name == context_name } + @contexts.each do |context| g.data context.executable.description, jobs.map { |job| - _, metric_value = @result[job].find { |context, _| context.name == context_name } - metric_value[metric] + job_context_result[job][context].values.fetch(metric) } end end g.bar_spacing = 0.6 g.write(GRAPH_PATH)