| #!/usr/bin/env bash |
| |
| # The full path to the script directory, regardless of pwd. |
| DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) |
| |
| # Current UNIX time. |
| TIME=$(date +%s) |
| |
| # Make sure FlameGraph scripts are available. |
| if [ ! -e $DIR/FlameGraph ] |
| then |
| git clone https://github.com/BrendanGregg/FlameGraph \ |
| $DIR/create-flamegraph/FlameGraph |
| fi |
| |
| # Make sure a release build of Alacritty is available. |
| if [ ! -e $DIR/../target/release/alacritty ] |
| then |
| echo "Must build alacritty first: cargo build --release" |
| exit 1 |
| fi |
| |
| # Make sure perf is available. |
| if [ ! -x "$(command -v perf)" ] |
| then |
| echo "Cannot find perf, please make sure it's installed" |
| exit 1 |
| fi |
| |
| # Run perf, this will block while alacritty runs. |
| perf record -g -F 99 $DIR/../target/release/alacritty |
| perf script \ |
| | $DIR/create-flamegraph/FlameGraph/stackcollapse-perf.pl \ |
| | $DIR/create-flamegraph/FlameGraph/flamegraph.pl --width 1920 \ |
| > flame-$TIME.svg |
| |
| # Tell users where the file is. |
| echo "Flame graph created at: file://$(pwd)/flame-$TIME.svg" |