Crate glassbench

source ·
Expand description

A micro-benchmarking crate with memory.

See usage and example in README.

In a standard setup you’ll only use

  • the glassbench! macro which let you title your bench and add functions defining tasks
  • the Bench struct, as argument of your global bench function, with its Bench::task function to define a task
  • the TaskBench struct that you receive as argument when defining a task. You’ll call TaskBench::iter with the callback to benchmark
  • pretend_used as an opaque sinkhole, which can receive the values you produce in your tests and prevent the optimizer to remove their construction

Macros

Generates a benchmark with a consistent id (using the benchmark file title), calling the benchmarking functions given in argument.

Structs

A whole benchmark
What the user asked at the cli
Storage interface for Glassbench, wrapping a SQLite connection
Git related information regarding the execution context
A temporary structure for graphing a history
A temporary structure for printing as table a history in standard output
The builder of the HTML standalone viewer
A small helper to print using markdown templates
A temporary structure to print the result of a benchmark to the console
Benching of one task
Printable difference between two task measures
The history of the measures of ta task as defined by the bench name and task name
The result of the measure of a task: number of iterations and total duration
A measure of a task, with time, commit and tag

Enums

glassbench error type

Constants

Number of iterations to do, after warmup, to estimate the total number of iterations to do
The absolute minimal number of iterations we don’t want to go below for benchmarking (to minimize random dispersion)
How long we’d like the measures of a task to go. Will be divided by the duration of a task in the estimate phase to decide how many iterations we’ll do for measures
version of the schema
Number of iterations to do before everything else

Functions

Print the tabular report for the executed benchmark then graph, list history, and or save according to command
Create a bench with a user defined name (instead of the file name) and command (instead of the one read in arguments)
tell the compiler not to optimize away the given argument (which is expected to be the function call you want to benchmark).