diff options
author | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2014-12-01 20:41:56 +0200 |
---|---|---|
committer | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2014-12-01 20:42:24 +0200 |
commit | 6e8ff9cd6848492547b9e2da29d29acefe2fde95 (patch) | |
tree | 35bdf53b09b0e979e2758813110fc8744282a780 /py/modmicropython.c | |
parent | 17c5ce372748a646d973e098bf1244fba98e3bfc (diff) | |
download | micropython-6e8ff9cd6848492547b9e2da29d29acefe2fde95.tar.gz micropython-6e8ff9cd6848492547b9e2da29d29acefe2fde95.zip |
modmicropython: Move mem_info() and qstr_info() functions from unix port.
TODO: Merge useful functionality from modpyb too.
Diffstat (limited to 'py/modmicropython.c')
-rw-r--r-- | py/modmicropython.c | 35 |
1 files changed, 32 insertions, 3 deletions
diff --git a/py/modmicropython.c b/py/modmicropython.c index b23758291d..1701417579 100644 --- a/py/modmicropython.c +++ b/py/modmicropython.c @@ -24,11 +24,15 @@ * THE SOFTWARE. */ +#include <stdint.h> +#include <stdio.h> #include "mpconfig.h" #include "misc.h" #include "qstr.h" #include "obj.h" #include "builtin.h" +#include "stackctrl.h" +#include "gc.h" // Various builtins specific to MicroPython runtime, // living in micropython module @@ -37,18 +41,41 @@ STATIC mp_obj_t mp_micropython_mem_total() { return MP_OBJ_NEW_SMALL_INT(m_get_total_bytes_allocated()); } +STATIC MP_DEFINE_CONST_FUN_OBJ_0(mp_micropython_mem_total_obj, mp_micropython_mem_total); STATIC mp_obj_t mp_micropython_mem_current() { return MP_OBJ_NEW_SMALL_INT(m_get_current_bytes_allocated()); } +STATIC MP_DEFINE_CONST_FUN_OBJ_0(mp_micropython_mem_current_obj, mp_micropython_mem_current); STATIC mp_obj_t mp_micropython_mem_peak() { return MP_OBJ_NEW_SMALL_INT(m_get_peak_bytes_allocated()); } - -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mp_micropython_mem_total_obj, mp_micropython_mem_total); -STATIC MP_DEFINE_CONST_FUN_OBJ_0(mp_micropython_mem_current_obj, mp_micropython_mem_current); STATIC MP_DEFINE_CONST_FUN_OBJ_0(mp_micropython_mem_peak_obj, mp_micropython_mem_peak); + +mp_obj_t mp_micropython_mem_info(mp_uint_t n_args, const mp_obj_t *args) { + printf("mem: total=" UINT_FMT ", current=" UINT_FMT ", peak=" UINT_FMT "\n", + m_get_total_bytes_allocated(), m_get_current_bytes_allocated(), m_get_peak_bytes_allocated()); + printf("stack: " UINT_FMT "\n", mp_stack_usage()); +#if MICROPY_ENABLE_GC + gc_dump_info(); + if (n_args == 1) { + // arg given means dump gc allocation table + gc_dump_alloc_table(); + } +#endif + return mp_const_none; +} +STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_micropython_mem_info_obj, 0, 1, mp_micropython_mem_info); + +STATIC mp_obj_t qstr_info(void) { + mp_uint_t n_pool, n_qstr, n_str_data_bytes, n_total_bytes; + qstr_pool_info(&n_pool, &n_qstr, &n_str_data_bytes, &n_total_bytes); + printf("qstr pool: n_pool=" UINT_FMT ", n_qstr=" UINT_FMT ", n_str_data_bytes=" UINT_FMT ", n_total_bytes=" UINT_FMT "\n", + n_pool, n_qstr, n_str_data_bytes, n_total_bytes); + return mp_const_none; +} +STATIC MP_DEFINE_CONST_FUN_OBJ_0(mp_micropython_qstr_info_obj, qstr_info); #endif #if MICROPY_ENABLE_EMERGENCY_EXCEPTION_BUF && (MICROPY_EMERGENCY_EXCEPTION_BUF_SIZE == 0) @@ -61,6 +88,8 @@ STATIC const mp_map_elem_t mp_module_micropython_globals_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR_mem_total), (mp_obj_t)&mp_micropython_mem_total_obj }, { MP_OBJ_NEW_QSTR(MP_QSTR_mem_current), (mp_obj_t)&mp_micropython_mem_current_obj }, { MP_OBJ_NEW_QSTR(MP_QSTR_mem_peak), (mp_obj_t)&mp_micropython_mem_peak_obj }, + { MP_OBJ_NEW_QSTR(MP_QSTR_mem_info), (mp_obj_t)&mp_micropython_mem_info_obj }, + { MP_OBJ_NEW_QSTR(MP_QSTR_qstr_info), (mp_obj_t)&mp_micropython_qstr_info_obj }, #endif #if MICROPY_ENABLE_EMERGENCY_EXCEPTION_BUF && (MICROPY_EMERGENCY_EXCEPTION_BUF_SIZE == 0) { MP_OBJ_NEW_QSTR(MP_QSTR_alloc_emergency_exception_buf), (mp_obj_t)&mp_alloc_emergency_exception_buf_obj }, |