Skip to content

Andrea-MariaDB-2/time-ghc-modules

 
 

Repository files navigation

time-ghc-modules

Figure out why your builds are slow. This tool analyzes how long it takes GHC to compile your Haskell modules, broken down by phase.

Quick start

git clone git@github.com:codedownio/time-ghc-modules.git

cd <my-project>

stack clean
stack build --ghc-options "-ddump-to-file -ddump-timings"
# ----- OR -----
cabal clean
cabal build --ghc-options "-ddump-to-file -ddump-timings"

If you have Nix, in the same folder just run:

/path/to/time-ghc-modules/time-ghc-modules-nix

Otherwise, you need to have the following installed: SQLite >= 3.33.0, Python 3, and sed.

/path/to/time-ghc-modules/time-ghc-modules

The script will search for all your *.dump-timings files and analyze them. It will finish by printing out the path to an HTML file:

...
--> Wrote report at file:///tmp/tmp.pvnp4FYmLa/report.html

Example: hledger

You can generate the time report below for hledger by running the following commands (assuming you have Nix).

set -e
cd $(mktemp -d)
git clone git@github.com:simonmichael/hledger.git
git clone git@github.com:codedownio/time-ghc-modules.git
cd hledger
stack build --ghc-options "-ddump-to-file -ddump-timings"
../time-ghc-modules/time-ghc-modules-nix

hledger profile

Tips

The script will output its log messages to stderr and print the final report path to stdout (assuming it didn't exit with a failure). This makes it easy to use the output in scripts. For example:

# Build the report and open it in your browser
> firefox $(/path/to/time-ghc-modules/time-ghc-modules)
# Build the report in CI and stash it somewhere
> cp $(/path/to/time-ghc-modules/time-ghc-modules) $MY_CI_ARTIFACTS_DIR/

Compatibility

The flag -ddump-timings is available for GHC >= 8.4.1.

About

Analyze GHC .dump-timings files

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 59.2%
  • Shell 29.4%
  • Nix 6.4%
  • HTML 5.0%