25
25
*/
26
26
27
27
#include "emscripten.h"
28
+ #include "py/gc.h"
28
29
#include "py/objmodule.h"
29
30
#include "py/runtime.h"
30
31
#include "proxy_c.h"
@@ -75,6 +76,44 @@ static mp_obj_t mp_jsffi_async_timeout_ms(mp_obj_t arg) {
75
76
}
76
77
static MP_DEFINE_CONST_FUN_OBJ_1 (mp_jsffi_async_timeout_ms_obj , mp_jsffi_async_timeout_ms ) ;
77
78
79
+ // *FORMAT-OFF*
80
+ EM_JS (void , js_get_proxy_js_ref_info , (uint32_t * out ), {
81
+ let used = 0 ;
82
+ for (const elem of proxy_js_ref ) {
83
+ if (elem != = undefined ) {
84
+ ++ used ;
85
+ }
86
+ }
87
+ Module .setValue (out , proxy_js_ref .length , "i32 ");
88
+ Module .setValue (out + 4 , used , "i32" );
89
+ });
90
+ // *FORMAT-ON*
91
+
92
+ static mp_obj_t mp_jsffi_mem_info (void ) {
93
+ mp_obj_list_t * l = (mp_obj_list_t * )MP_OBJ_TO_PTR (MP_STATE_PORT (proxy_c_ref ));
94
+ mp_int_t used = 0 ;
95
+ for (size_t i = 0 ; i < l -> len ; ++ i ) {
96
+ if (l -> items [i ] != MP_OBJ_NULL ) {
97
+ ++ used ;
98
+ }
99
+ }
100
+ uint32_t proxy_js_ref_info [2 ];
101
+ js_get_proxy_js_ref_info (proxy_js_ref_info );
102
+ gc_info_t info ;
103
+ gc_info (& info );
104
+ mp_obj_t elems [] = {
105
+ MP_OBJ_NEW_SMALL_INT (info .total ), // GC heap total bytes
106
+ MP_OBJ_NEW_SMALL_INT (info .used ), // GC heap used bytes
107
+ MP_OBJ_NEW_SMALL_INT (info .free ), // GC heap free bytes
108
+ MP_OBJ_NEW_SMALL_INT (l -> len ), // proxy_c_ref allocated size
109
+ MP_OBJ_NEW_SMALL_INT (used ), // proxy_c_ref used
110
+ MP_OBJ_NEW_SMALL_INT (proxy_js_ref_info [0 ]), // proxy_js_ref allocated size
111
+ MP_OBJ_NEW_SMALL_INT (proxy_js_ref_info [1 ]), // proxy_js_ref used
112
+ };
113
+ return mp_obj_new_tuple (MP_ARRAY_SIZE (elems ), elems );
114
+ }
115
+ static MP_DEFINE_CONST_FUN_OBJ_0 (mp_jsffi_mem_info_obj , mp_jsffi_mem_info ) ;
116
+
78
117
static const mp_rom_map_elem_t mp_module_jsffi_globals_table [] = {
79
118
{ MP_ROM_QSTR (MP_QSTR___name__ ), MP_ROM_QSTR (MP_QSTR_jsffi ) },
80
119
@@ -83,6 +122,7 @@ static const mp_rom_map_elem_t mp_module_jsffi_globals_table[] = {
83
122
{ MP_ROM_QSTR (MP_QSTR_create_proxy ), MP_ROM_PTR (& mp_jsffi_create_proxy_obj ) },
84
123
{ MP_ROM_QSTR (MP_QSTR_to_js ), MP_ROM_PTR (& mp_jsffi_to_js_obj ) },
85
124
{ MP_ROM_QSTR (MP_QSTR_async_timeout_ms ), MP_ROM_PTR (& mp_jsffi_async_timeout_ms_obj ) },
125
+ { MP_ROM_QSTR (MP_QSTR_mem_info ), MP_ROM_PTR (& mp_jsffi_mem_info_obj ) },
86
126
};
87
127
static MP_DEFINE_CONST_DICT (mp_module_jsffi_globals , mp_module_jsffi_globals_table ) ;
88
128
0 commit comments