about summary refs log blame commit diff
path: root/src/libexpr/function-trace.hh
blob: 8234b760312f8eee35eedade2aa7e1e0c409cff4 (plain) (tree)























                                                                                     
#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());
    }
};
}