From 14f7a6075537031fe39d42c94ffbaa0582cd4069 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 24 Apr 2019 13:46:34 +0200 Subject: [PATCH] Keep some stats --- src/libexpr/gc.cc | 7 ++++++- src/libexpr/gc.hh | 4 ++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/libexpr/gc.cc b/src/libexpr/gc.cc index 1a56ac324..2ed5e0198 100644 --- a/src/libexpr/gc.cc +++ b/src/libexpr/gc.cc @@ -44,7 +44,10 @@ GC::GC() GC::~GC() { - debug("allocated %d bytes in total", totalSize * WORD_SIZE); + printInfo("%d bytes in arenas, %d bytes allocated, %d bytes reclaimed by GC", + totalSize * WORD_SIZE, + allTimeWordsAllocated * WORD_SIZE, + allTimeWordsFreed * WORD_SIZE); size_t n = 0; for (Ptr * p = frontPtrSentinel->next; p != backPtrSentinel; p = p->next) @@ -250,6 +253,8 @@ void GC::gc() debug("freed %d bytes in %d dead objects, keeping %d objects", totalWordsFreed * WORD_SIZE, totalObjectsFreed, marked); + + allTimeWordsFreed += totalWordsFreed; } std::pair GC::freeUnmarked(Arena & arena) diff --git a/src/libexpr/gc.hh b/src/libexpr/gc.hh index 5a62fb052..47edfd003 100644 --- a/src/libexpr/gc.hh +++ b/src/libexpr/gc.hh @@ -188,6 +188,9 @@ private: std::array freeLists; + size_t allTimeWordsAllocated = 0; + size_t allTimeWordsFreed = 0; + Object * allocObject(size_t size) { assert(size >= 2); @@ -255,6 +258,7 @@ public: Ptr alloc(size_t size, const Args & ... args) { auto raw = allocObject(size); + allTimeWordsAllocated += size; return new (raw) T(args...); }