timestats: A library for profiling time in Haskell applications

[ bsd3, library, profiling ] [ Propose Tags ]

Flags

Manual Flags

NameDescriptionDefault
devel

Enable more warnings and fail compilation when warnings occur. Turn this flag on in CI.

Disabled

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

Versions [RSS] 0.1.0, 0.1.1
Change log CHANGELOG.md
Dependencies base (<5), containers, text [details]
License BSD-3-Clause
Copyright 2022 EURL Tweag
Author Facundo Domínguez
Maintainer facundo.dominguez@tweag.io
Category Profiling
Home page https://github.com/tweag/timestats
Bug tracker https://github.com/tweag/timestats/issues
Uploaded by FacundoDominguez at 2023-11-05T19:58:10Z
Distributions NixOS:0.1.1
Downloads 103 total (9 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2023-11-05 [all 1 reports]

Readme for timestats-0.1.1

[back to package description]

timestats

This is a simple library for profiling time that can help when more sophisticated tools aren't available or needed. Most programs should be possible to analyze by instrumenting the code with a few calls and then building and running the application as usual.

This library associates fragments of a program with labels, and measures the execution time of these fragments using the function getMonotonicTimeNSec.

Multiple measures of a same program fragment (or different fragments using the same label) are aggregated and reported at chosen times of the execution.

The announcement post contains additional motivation.

Usage

import Control.Exception (evaluate)
import qualified Debug.TimeStats as TimeStats (printTimeStats, measureM)

fib n = if n < 2 then 1 else fib (n - 1) + fib (n - 2)

main = do
    -- measureM collects the time taken to compute the given action
    -- and stores it associated with a given label in global state.
    TimeStats.measureM "fib" $ evaluate (fib 31)
    -- measuring multiple times with the same label adds up
    -- the time taken by all of those invocations
    TimeStats.measureM "fib2" $ evaluate (fib 30)
    -- adds up to the existing "fib2" stats
    TimeStats.measureM "fib2" $ evaluate (fib 29)
    TimeStats.printTimeStats

The output when running the program with timestats enabled will look as

$ DEBUG_TIMESTATS_ENABLE=1 ./a.out

 fib: 2.055s  count: 1
fib2: 2.071s  count: 2

timestats is enabled by setting the environment variable DEBUG_TIMESTATS_ENABLE to any value ahead of invoking any function in Debug.TimeStats.

See the API documentation for further details.