diff options
Diffstat (limited to 'home/scripts/perf-flamegraph.nix')
-rw-r--r-- | home/scripts/perf-flamegraph.nix | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/home/scripts/perf-flamegraph.nix b/home/scripts/perf-flamegraph.nix new file mode 100644 index 0000000..f379591 --- /dev/null +++ b/home/scripts/perf-flamegraph.nix @@ -0,0 +1,22 @@ +{ pkgs, config, ... }: +let + perf-flamegraph-process = + pkgs.writeShellScriptBin "perf-flamegraph-process" '' + set -euo pipefail + + OUT_DIR="''${HOME}/workspace/tmp/flamegraph" + OUT_SVG="''${OUT_DIR}/$(date +%y%m%d-%H%M%S).svg" + + mkdir -p ''${OUT_DIR} + + ${pkgs.linuxPackages.perf}/bin/perf record -g --call-graph dwarf -F max "$@" + ${pkgs.linuxPackages.perf}/bin/perf script \ + | ${pkgs.flamegraph}/bin/stackcollapse-perf.pl \ + | ${pkgs.flamegraph}/bin/flamegraph.pl > "''${OUT_SVG}" + ''; +in { + config = { + home.packages = with pkgs; [ flamegraph perf-flamegraph-process ]; + }; +} + |