Add development tools to generate flame graphs for nix-instantiate

This commit is contained in:
adisbladis 2020-02-27 08:43:17 +00:00
parent 6fc16e0dee
commit 8336c5f8c6
No known key found for this signature in database
GPG key ID: 110BFAD44C6249B7
2 changed files with 48 additions and 0 deletions

View file

@ -6,10 +6,12 @@
}:
let
tools = pkgs.callPackage ./tools {};
in
pkgs.mkShell {
buildInputs = [
tools.flamegraph
pkgs.nixpkgs-fmt
pkgs.poetry
];

46
tools/default.nix Normal file
View file

@ -0,0 +1,46 @@
{ pkgs ? import <nixpkgs> {
overlays = [
(import ../overlay.nix)
];
}
}:
let
inherit (pkgs) lib;
in
{
flamegraph = let
runtimeDeps = lib.makeBinPath [
pkgs.flamegraph
pkgs.python3
pkgs.nix
];
nixSrc = pkgs.runCommandNoCC "${pkgs.nix.name}-sources" {} ''
mkdir $out
tar -x --strip=1 -f ${pkgs.nix.src} -C $out
'';
srcPath = builtins.toString ../.;
in
pkgs.writeScriptBin "poetry2nix-flamegraph" ''
#!${pkgs.runtimeShell}
export PATH=${runtimeDeps}:$PATH
workdir=$(mktemp -d)
function cleanup {
rm -rf "$workdir"
}
trap cleanup EXIT
# Run once to warm up
nix-instantiate --expr '(import <nixpkgs> { overlays = [ (import ${srcPath + "/overlay.nix"}) ]; })' -A poetry
nix-instantiate --trace-function-calls --expr '(import <nixpkgs> { overlays = [ (import ${srcPath + "/overlay.nix"}) ]; })' -A poetry 2> $workdir/traceFile
python3 ${nixSrc}/contrib/stack-collapse.py $workdir/traceFile > $workdir/traceFile.folded
flamegraph.pl $workdir/traceFile.folded > poetry2nix-flamegraph.svg
'';
}