diff options
author | Lukas Larsson <[email protected]> | 2016-01-26 10:18:05 +0100 |
---|---|---|
committer | Lukas Larsson <[email protected]> | 2016-01-26 10:21:01 +0100 |
commit | 82dfea33002de4ad456b59d11d912c148e2debfb (patch) | |
tree | 7c51f8413827d28b0520ce3e20abba94ee6226b6 /erts/emulator/beam/erl_gc.c | |
parent | d60ac245114e7e7d82bd21ca047f5bdf6016708b (diff) | |
parent | 9d0a5bf2c1cc564fd38268cbb5313cd8813ea138 (diff) | |
download | otp-82dfea33002de4ad456b59d11d912c148e2debfb.tar.gz otp-82dfea33002de4ad456b59d11d912c148e2debfb.tar.bz2 otp-82dfea33002de4ad456b59d11d912c148e2debfb.zip |
Merge branch 'lukas/erts/gc_info/OTP-13265'
* lukas/erts/gc_info/OTP-13265:
erts: Add garbage_collection_info to process_info/2
Conflicts:
erts/emulator/beam/erl_bif_info.c
Diffstat (limited to 'erts/emulator/beam/erl_gc.c')
-rw-r--r-- | erts/emulator/beam/erl_gc.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/erts/emulator/beam/erl_gc.c b/erts/emulator/beam/erl_gc.c index 0f86b9a25c..6839c24c25 100644 --- a/erts/emulator/beam/erl_gc.c +++ b/erts/emulator/beam/erl_gc.c @@ -2947,6 +2947,57 @@ erts_gc_info_request(Process *c_p) return ref; } +Eterm +erts_process_gc_info(Process *p, Uint *sizep, Eterm **hpp) +{ + ERTS_DECL_AM(bin_vheap_size); + ERTS_DECL_AM(bin_vheap_block_size); + ERTS_DECL_AM(bin_old_vheap_size); + ERTS_DECL_AM(bin_old_vheap_block_size); + Eterm tags[] = { + /* If you increase the number of elements here, make sure to update + any call sites as they may have stack allocations that depend + on the number of elements here. */ + am_old_heap_block_size, + am_heap_block_size, + am_mbuf_size, + am_recent_size, + am_stack_size, + am_old_heap_size, + am_heap_size, + AM_bin_vheap_size, + AM_bin_vheap_block_size, + AM_bin_old_vheap_size, + AM_bin_old_vheap_block_size + }; + UWord values[] = { + OLD_HEAP(p) ? OLD_HEND(p) - OLD_HEAP(p) : 0, + HEAP_SIZE(p), + MBUF_SIZE(p), + HIGH_WATER(p) - HEAP_START(p), + STACK_START(p) - p->stop, + OLD_HEAP(p) ? OLD_HTOP(p) - OLD_HEAP(p) : 0, + HEAP_TOP(p) - HEAP_START(p), + MSO(p).overhead, + BIN_VHEAP_SZ(p), + BIN_OLD_VHEAP(p), + BIN_OLD_VHEAP_SZ(p) + }; + + Eterm res = THE_NON_VALUE; + + ERTS_CT_ASSERT(sizeof(values)/sizeof(*values) == sizeof(tags)/sizeof(*tags)); + ERTS_CT_ASSERT(sizeof(values)/sizeof(*values) == ERTS_PROCESS_GC_INFO_MAX_TERMS); + + res = erts_bld_atom_uword_2tup_list(hpp, + sizep, + sizeof(values)/sizeof(*values), + tags, + values); + + return res; +} + #if defined(DEBUG) || defined(ERTS_OFFHEAP_DEBUG) static int |