ghc-events-analyze alternatives and similar packages
Based on the "ghc" category.
Alternatively, view ghc-events-analyze alternatives based on common mentions on social networks and blogs.
-
ghc-exactprint
GHC version of haskell-src-exts exactPrint -
ghc-source-gen
Library for generating Haskell source files and code fragments. -
ghc-events
Library and tool for parsing .eventlog files from GHC -
ghc-typelits-natnormalise
Normalise GHC.TypeLits.Nat equations -
ghc-typelits-extra
Extra type-level operations on GHC.TypeLits.Nat and a custom solver -
ghc-typelits-knownnat
Derive KnownNat constraints from other KnownNat constraints -
ghc-make
An alternative to ghc --make which supports parallel compilation of modules and runs faster when nothing needs compiling. -
ghc-datasize
ghc-datasize is a tool to determine the size of Haskell data structures in GHC's memory -
ghc-tags-plugin
Generate tags file for haskell modules (GHC) -
ghc-core-html
Read ghc-core with style. javascript and CSS style. -
ghc-imported-from
For a given Haskell source file, determine where a symbol is imported from -
ghc-time-alloc-prof
Library for parsing GHC time and allocation profiling reports -
ghc-prof
Library for parsing GHC time and allocation profiling reports -
ghc-trace-events
ByteString/Text variants of Debug.Trace.traceEvent/traceMarker and binary event logging -
ghc-pkg-autofix
Simple utility to fix BROKEN package dependencies for cabal-install. -
ghc-srcspan-plugin
Generic GHC Plugin for annotating Haskell code with source location data. -
ghc-syb-utils
Scrap Your Boilerplate utilities for the GHC API.
Clean code begins in your IDE with SonarLint
Do you think we are missing an alternative of ghc-events-analyze or a related project?
README
ghc-events-analyze
See Performance profiling with ghc-events-analyze for an introduction to this tool. Below we describe some features that were introduced since the blog post.
Controlling layout
As of version 0.2.3, there are a number of options for controlling the layout. To slice time coarsely, as we did in the blog post, you can run
ghc-events-analyze -b 50 ...
This results in something like
[](slicedcoarsely.png)
By default (in 0.2.0 and again from 0.2.3) time is split into 100 buckets. To slice time more finely (this was the default for versions 0.2.1 and 0.2.2), you can run
ghc-events-analyze -b 500 --tick-every 10 --bucket-width 1 --border-width 0
The results in something like
[](slicedfinely.png)
Windowing
Windowing can be used to split all events into a bunch of reports, one per window. You can use it like this:
traceEventIO "START WINDOW"
...
traceEventIO "STOP WINDOW"
traceEventIO "START WINDOW"
...
traceEventIO "STOP WINDOW"
traceEventIO "START WINDOW"
...
traceEventIO "STOP WINDOW"
If you then run ghc-events-analyze
using --window "WINDOW"
it will create
one report per window; for instance, in the above example it would create
example.0.timed.svg
example.1.timed.svg
example.2.timed.svg
Event subscripts
Suppose you have multiple events that should all show up as request
in the
generated reports, but should nonetheless be distinguished from each other.
There are two ways to do this. One is to call the events request0
, request1
,
etc.
traceEventIO "START request0"
...
traceEventIO "STOP request0"
traceEventIO "START request1"
...
traceEventIO "STOP request1"
and then use the ghc-events-analyze
DSL to add some renaming instructions.
However, that might get tedious if there are a lof of these. Alternatively,
you can use event subscripts, like this:
traceEventIO "START 0 request"
...
traceEventIO "STOP 0 request"
traceEventIO "START 1 request"
...
traceEventIO "STOP 1 request"
These subscripts are used to distinguish events, but do not show up in the report.