diff options
author | Daniel Gröber <dxld@darkboxed.org> | 2019-07-18 03:19:37 +0200 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2021-02-17 11:21:11 -0500 |
commit | e640f61172434293f00aa28ac3cd0930f7c7ae6d (patch) | |
tree | 999fb4c539b75fda7037b78d5a6807a93382f9ba /rts/ProfHeapInternal.h | |
parent | 3eac10ae2200a379cf9d90965cf6ecf45f866972 (diff) | |
download | haskell-e640f61172434293f00aa28ac3cd0930f7c7ae6d.tar.gz |
rts: ProfHeap: Move definitions for Census to new header
Diffstat (limited to 'rts/ProfHeapInternal.h')
-rw-r--r-- | rts/ProfHeapInternal.h | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/rts/ProfHeapInternal.h b/rts/ProfHeapInternal.h new file mode 100644 index 0000000000..7707f12d5f --- /dev/null +++ b/rts/ProfHeapInternal.h @@ -0,0 +1,61 @@ +/* ----------------------------------------------------------------------------- + * + * (c) The GHC Team, 2019 + * + * Internal definitions for subordinate heap profilers to consume + * + * ---------------------------------------------------------------------------*/ + +#pragma once + +#include "Hash.h" +#include "Arena.h" + +#include "BeginPrivate.h" + +/* ----------------------------------------------------------------------------- + * Counters + * + * For most heap profiles each closure identity gets a simple count + * of live words in the heap at each census. However, if we're + * selecting by biography, then we have to keep the various + * lag/drag/void counters for each identity. + * -------------------------------------------------------------------------- */ +typedef struct _counter { + const void *identity; + union { + ssize_t resid; + struct { + // Total sizes of: + ssize_t prim; // 'inherently used' closures + ssize_t not_used; // 'never used' closures + ssize_t used; // 'used at least once' closures + ssize_t void_total; // 'destroyed without being used' closures + ssize_t drag_total; // 'used at least once and waiting to die' + } ldv; + } c; + struct _counter *next; +} counter; + +typedef struct { + double time; // the time in MUT time when the census is made + StgWord64 rtime; // The eventlog time the census was made. This is used + // for the LDV profiling events because they are all + // emitted at the end of compilation so we need to know + // when the sample actually took place. + HashTable * hash; + counter * ctrs; + Arena * arena; + + // for LDV profiling, when just displaying by LDV + ssize_t prim; + ssize_t not_used; + ssize_t used; + ssize_t void_total; + ssize_t drag_total; +} Census; + +void initLDVCtr(counter *ctr); +counter* heapInsertNewCounter(Census *census, StgWord identity); + +#include "EndPrivate.h" |