about summary refs log tree commit diff
path: root/src/libexpr/function-trace.hh
blob: 8234b760312f8eee35eedade2aa7e1e0c409cff4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#pragma once

#include "eval.hh"
#include <sys/time.h>

namespace nix {

struct FunctionCallTrace
{
    const Pos & pos;

    FunctionCallTrace(const Pos & pos) : pos(pos) {
        auto duration = std::chrono::high_resolution_clock::now().time_since_epoch();
        auto ns = std::chrono::duration_cast<std::chrono::nanoseconds>(duration);
        vomit("function-trace entered %1% at %2%", pos, ns.count());
    }

    ~FunctionCallTrace() {
        auto duration = std::chrono::high_resolution_clock::now().time_since_epoch();
        auto ns = std::chrono::duration_cast<std::chrono::nanoseconds>(duration);
        vomit("function-trace exited %1% at %2%", pos, ns.count());
    }
};
}