With this patch, and this file I called `log.py`:
#!/usr/bin/env nix-shell
#!nix-shell -i python3 -p python3 --pure
import sys
from pprint import pprint
stack = []
timestack = []
for line in open(sys.argv[1]):
components = line.strip().split(" ", 2)
if components[0] != "function-trace":
continue
direction = components[1]
components = components[2].rsplit(" ", 2)
loc = components[0]
_at = components[1]
time = int(components[2])
if direction == "entered":
stack.append(loc)
timestack.append(time)
elif direction == "exited":
dur = time - timestack.pop()
vst = ";".join(stack)
print(f"{vst} {dur}")
stack.pop()
and:
nix-instantiate --trace-function-calls -vvvv ../nixpkgs/pkgs/top-level/release.nix -A unstable > log.matthewbauer 2>&1
./log.py ./log.matthewbauer > log.matthewbauer.folded
flamegraph.pl --title matthewbauer-post-pr log.matthewbauer.folded > log.matthewbauer.folded.svg
I can make flame graphs like: http://gsc.io/log.matthewbauer.folded.svg
---
Includes test cases around function call failures and tryEval. Uses
RAII so the finish is always called at the end of the function.
42 lines
1.2 KiB
Makefile
42 lines
1.2 KiB
Makefile
check:
|
|
@echo "Warning: Nix has no 'make check'. Please install Nix and run 'make installcheck' instead."
|
|
|
|
nix_tests = \
|
|
init.sh hash.sh lang.sh add.sh simple.sh dependencies.sh \
|
|
gc.sh \
|
|
gc-concurrent.sh \
|
|
gc-auto.sh \
|
|
referrers.sh user-envs.sh logging.sh nix-build.sh misc.sh fixed.sh \
|
|
gc-runtime.sh check-refs.sh filter-source.sh \
|
|
remote-store.sh export.sh export-graph.sh \
|
|
timeout.sh secure-drv-outputs.sh nix-channel.sh \
|
|
multiple-outputs.sh import-derivation.sh fetchurl.sh optimise-store.sh \
|
|
binary-cache.sh nix-profile.sh repair.sh dump-db.sh case-hack.sh \
|
|
check-reqs.sh pass-as-file.sh tarball.sh restricted.sh \
|
|
placeholders.sh nix-shell.sh \
|
|
linux-sandbox.sh \
|
|
build-dry.sh \
|
|
build-remote.sh \
|
|
nar-access.sh \
|
|
structured-attrs.sh \
|
|
fetchGit.sh \
|
|
fetchMercurial.sh \
|
|
signing.sh \
|
|
run.sh \
|
|
brotli.sh \
|
|
pure-eval.sh \
|
|
check.sh \
|
|
plugins.sh \
|
|
search.sh \
|
|
nix-copy-ssh.sh \
|
|
post-hook.sh \
|
|
function-trace.sh
|
|
# parallel.sh
|
|
|
|
install-tests += $(foreach x, $(nix_tests), tests/$(x))
|
|
|
|
tests-environment = NIX_REMOTE= $(bash) -e
|
|
|
|
clean-files += $(d)/common.sh
|
|
|
|
installcheck: $(d)/common.sh $(d)/plugins/libplugintest.$(SO_EXT)
|