Packages

Get CSV from your benchee benchmarks to turn them into graphs or whatever!

Current section

Files

Jump to
benchee_csv lib benchee formatters csv.ex
Raw

lib/benchee/formatters/csv.ex

defmodule Benchee.Formatters.CSV do
@moduledoc """
Functionality for converting Benchee benchmarking results to CSV so that
they can be written to file and opened in a spreadsheet tool for graph
generation for instance.
"""
@column_descriptors ["Name", "Iterations per Second", "Average",
"Standard Deviation", "Standard Deviation Ratio",
"Median"]
@doc """
Transforms the statistical results `Benche.statistics` to be written
somewhere, such as a file through `IO.write/2`.
## Examples
iex> [{"My Job", %{average: 200.0, ips: 5000.0, std_dev: 20, std_dev_ratio: 0.1, median: 190.0}}]
iex> |> Benchee.Formatters.CSV.format
iex> |> Enum.take(2)
["Name,Iterations per Second,Average,Standard Deviation,Standard Deviation Ratio,Median\\r\\n",
"My Job,5.0e3,200.0,20,0.1,190.0\\r\\n"]
"""
def format(jobs) do
sorted = Benchee.Statistics.sort(jobs)
[@column_descriptors | job_csvs(sorted)]
|> CSV.encode
end
defp job_csvs(jobs) do
Enum.map(jobs, &to_csv/1)
end
defp to_csv({name, %{ips: ips,
average: average,
std_dev: std_dev,
std_dev_ratio: std_dev_ratio,
median: median}}) do
[name, ips, average, std_dev, std_dev_ratio, median]
end
end