aboutsummaryrefslogtreecommitdiff
path: root/src/libexpr/eval.cc
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2018-06-11 16:10:50 +0200
committerEelco Dolstra <edolstra@gmail.com>2018-06-12 17:49:55 +0200
commit30964103dc31c32ccb69912fdd73474cd65447e9 (patch)
tree91b27a001244248f7cce82d735e8c5f5a1037839 /src/libexpr/eval.cc
parent24c68069948681366ff2351dd7400af6e69006d9 (diff)
Add temporary stats
Diffstat (limited to 'src/libexpr/eval.cc')
-rw-r--r--src/libexpr/eval.cc28
1 files changed, 27 insertions, 1 deletions
diff --git a/src/libexpr/eval.cc b/src/libexpr/eval.cc
index facfddbb5..1ab2b0ac1 100644
--- a/src/libexpr/eval.cc
+++ b/src/libexpr/eval.cc
@@ -13,6 +13,9 @@
#include <sys/time.h>
#include <sys/resource.h>
+#include <sys/time.h>
+#include <sys/resource.h>
+
#if HAVE_BOEHMGC
#include <gc/gc.h>
@@ -574,10 +577,19 @@ inline Value * EvalState::lookupVar(Env * env, const ExprVar & var, bool noEval)
}
+std::atomic<uint64_t> nrValuesFreed{0};
+
+void finalizeValue(void * obj, void * data)
+{
+ nrValuesFreed++;
+}
+
Value * EvalState::allocValue()
{
nrValues++;
- return (Value *) allocBytes(sizeof(Value));
+ auto v = (Value *) allocBytes(sizeof(Value));
+ //GC_register_finalizer_no_order(v, finalizeValue, nullptr, nullptr, nullptr);
+ return v;
}
@@ -1707,6 +1719,20 @@ bool EvalState::eqValues(Value & v1, Value & v2)
}
+void EvalState::printStats2()
+{
+ struct rusage ru;
+ getrusage(RUSAGE_SELF, &ru);
+
+ GC_prof_stats_s gc;
+ GC_get_prof_stats(&gc, sizeof(gc));
+
+ printError("STATS %d %d %d %d %d %d",
+ nrValues, nrValuesFreed.load(), nrValues - nrValuesFreed,
+ ru.ru_maxrss,
+ gc.heapsize_full, gc.free_bytes_full);
+}
+
void EvalState::printStats()
{
bool showStats = getEnv("NIX_SHOW_STATS", "0") != "0";