summaryrefslogtreecommitdiffstatshomepage
path: root/py/modmicropython.c
diff options
context:
space:
mode:
authorPaul Sokolovsky <pfalcon@users.sourceforge.net>2014-12-01 20:41:56 +0200
committerPaul Sokolovsky <pfalcon@users.sourceforge.net>2014-12-01 20:42:24 +0200
commit6e8ff9cd6848492547b9e2da29d29acefe2fde95 (patch)
tree35bdf53b09b0e979e2758813110fc8744282a780 /py/modmicropython.c
parent17c5ce372748a646d973e098bf1244fba98e3bfc (diff)
downloadmicropython-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.c35
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 },