Criterion: robust, reliable performance measurement
This package provides the Criterion module, a Haskell library for measuring and analysing software performance.
Building and installing
To build and install criterion, just run
cabal install criterion
Please report bugs via the github issue tracker.
Master github repository:
git clone https://github.com/bos/criterion.git
There's also a Mercurial mirror:
hg clone https://bitbucket.org/bos/criterion
(You can create and contribute changes using either Mercurial or git.)
This library is written and maintained by Bryan O'Sullivan, .
Important bugfix: versions 184.108.40.206 and 220.127.116.11 were incorrectly displaying the lower and upper bounds for measured values on HTML reports.
criterionemit warnings if suspicious things happen during mustache template substitution when creating HTML reports. This can be useful when using custom templates with the
Criterion.Measurement. These are inteded to replace
GCStats(which has been deprecated in
baseand will be removed in GHC 8.4), as well as
applyGCStats, which have also been deprecated and will be removed in the next major
Add new matchers for the
--match pattern, which matches by searching for a given substring in benchmark paths.
--match ipattern, which is like
--match patternbut case-insensitive.
Criterion.toBenchmarkable, which behaves like the
Benchmarkableconstructor did prior to
Add support for per-run allocation/cleanup of the environment with
Add support for per-batch allocation/cleanup with
envWithCleanup, a variant of
envwith cleanup support.
criterion-reportexecutable, which creates reports from previously created JSON files.
Unicode output is now correctly printed on Windows.
Add Safe Haskell annotations.
--jsonoption for writing reports in JSON rather than binary format. Also: various bugfixes related to this.
code-pagelibrary to ensure that
criterionprints out Unicode characters (like ², which
criterionuses in reports) in a UTF-8-compatible code page on Windows.
Give an explicit implementation for
Binary Regressioninstance. This should fix sporadic
criterionfailures with older versions of
test-frameworkin the test suites.
Restore support for 32-bit Intel CPUs.
Restore build compatibilty with GHC 7.4.
If a benchmark uses
Criterion.envin a non-lazy way, and you try to use
--listto list benchmark names, you'll now get an understandable error message instead of something cryptic.
We now flush stdout and stderr after printing messages, so that output is printed promptly even when piped (e.g. into a pager).
A new function
runModeallows custom benchmarking applications to run benchmarks with control over the
Added support for Linux on non-Intel CPUs.
This version supports GHC 8.
--only-runoption for benchmarks is renamed to
The dependency on the either package has been dropped in favour of a dependency on transformers-compat. This greatly reduces the number of packages criterion depends on. This shouldn't affect the user-visible API.
The documentation claimed that environments were created only when needed, but this wasn't implemented. (gh-76)
The package now compiles with GHC 7.10.
On Windows with a non-Unicode code page, printing results used to cause a crash. (gh-55)
Bump lower bound on optparse-applicative to 0.11 to handle yet more annoying API churn.
- Added a lower bound of 0.10 on the optparse-applicative dependency, as there were major API changes between 0.9 and 0.10.