diff --git a/PixelComposer.resource_order b/PixelComposer.resource_order index c24dc617f..ada61623a 100644 --- a/PixelComposer.resource_order +++ b/PixelComposer.resource_order @@ -1264,6 +1264,7 @@ {"name":"panel_preview_view_settings","order":9,"path":"scripts/panel_preview_view_settings/panel_preview_view_settings.yy",}, {"name":"panel_preview_window","order":1,"path":"scripts/panel_preview_window/panel_preview_window.yy",}, {"name":"panel_profile_render","order":15,"path":"scripts/panel_profile_render/panel_profile_render.yy",}, + {"name":"panel_resource_monitor","order":16,"path":"scripts/panel_resource_monitor/panel_resource_monitor.yy",}, {"name":"panel_test","order":8,"path":"scripts/panel_test/panel_test.yy",}, {"name":"panel_text_editor","order":9,"path":"scripts/panel_text_editor/panel_text_editor.yy",}, {"name":"panel_tunnels","order":1,"path":"scripts/panel_tunnels/panel_tunnels.yy",}, diff --git a/PixelComposer.yyp b/PixelComposer.yyp index 677e8d2a8..d13f10f4a 100644 --- a/PixelComposer.yyp +++ b/PixelComposer.yyp @@ -1878,6 +1878,7 @@ {"id":{"name":"panel_preview_window","path":"scripts/panel_preview_window/panel_preview_window.yy",},}, {"id":{"name":"panel_preview","path":"scripts/panel_preview/panel_preview.yy",},}, {"id":{"name":"panel_profile_render","path":"scripts/panel_profile_render/panel_profile_render.yy",},}, + {"id":{"name":"panel_resource_monitor","path":"scripts/panel_resource_monitor/panel_resource_monitor.yy",},}, {"id":{"name":"panel_test","path":"scripts/panel_test/panel_test.yy",},}, {"id":{"name":"panel_text_editor","path":"scripts/panel_text_editor/panel_text_editor.yy",},}, {"id":{"name":"panel_tunnels","path":"scripts/panel_tunnels/panel_tunnels.yy",},}, diff --git a/scripts/panel_function/panel_function.gml b/scripts/panel_function/panel_function.gml index 113a1baf7..05d9ca6d3 100644 --- a/scripts/panel_function/panel_function.gml +++ b/scripts/panel_function/panel_function.gml @@ -73,7 +73,8 @@ case "Panel_Gradient" : return new Panel_Gradient(); case "Panel_Console" : return new Panel_Console(); - case "Panel_Profile_Render" : return new Panel_Profile_Render(); + case "Panel_Profile_Render" : return new Panel_Profile_Render(); + case "Panel_Resource_Monitor" : return new Panel_Resource_Monitor(); } return noone; diff --git a/scripts/panel_menu/panel_menu.gml b/scripts/panel_menu/panel_menu.gml index 30e3f4a41..1adfee6d8 100644 --- a/scripts/panel_menu/panel_menu.gml +++ b/scripts/panel_menu/panel_menu.gml @@ -252,29 +252,30 @@ function Panel_Menu() : PanelContent() constructor { if(TESTING) { array_push(menus, [ __txt("Dev"), [ MENU_ITEMS.console_panel, - menuItem(__txtx("panel_debug_overlay", "Debug overlay"), function() /*=>*/ { show_debug_overlay(true); }), - menuItem(__txtx("panel_menu_profile_render", "Render Profiler"), function() /*=>*/ { var dia = dialogPanelCall(new Panel_Profile_Render()); }), + menuItem(__txtx("panel_debug_overlay", "Debug overlay"), function() /*=>*/ { show_debug_overlay(true); }), + menuItem(__txtx("panel_menu_profile_render", "Render Profiler"), function() /*=>*/ { dialogPanelCall(new Panel_Profile_Render()); }), + menuItem(__txtx("panel_menu_resource_monitor", "Resource Monitor"), function() /*=>*/ { dialogPanelCall(new Panel_Resource_Monitor()); }), -1, - menuItem(__txtx("panel_menu_tester", "Save frozen"), function() /*=>*/ { PROJECT.freeze = true; SAVE(); }), - menuItem(__txtx("panel_menu_tester", "Tester"), function() /*=>*/ { var dia = dialogPanelCall(new Panel_Test()); }), + menuItem(__txtx("panel_menu_tester", "Save frozen"), function() /*=>*/ { PROJECT.freeze = true; SAVE(); }), + menuItem(__txtx("panel_menu_tester", "Tester"), function() /*=>*/ { dialogPanelCall(new Panel_Test()); }), -1, - menuItem(__txtx("panel_menu_test_load_all", "Load all current collections"), function() /*=>*/ { __test_load_current_collections(); }), - menuItem(__txtx("panel_menu_test_update_all", "Update all current collections"), function() /*=>*/ { __test_update_current_collections(); }), - menuItem(__txtx("panel_menu_test_add_meta", "Add metadata to current collections"), function() /*=>*/ { __test_metadata_current_collections(); }), - menuItem(__txtx("panel_menu_test_update_sam", "Update sample projects"), function() /*=>*/ { __test_update_sample_projects(); }), + menuItem(__txtx("panel_menu_test_load_all", "Load all current collections"), function() /*=>*/ { __test_load_current_collections(); }), + menuItem(__txtx("panel_menu_test_update_all", "Update all current collections"), function() /*=>*/ { __test_update_current_collections(); }), + menuItem(__txtx("panel_menu_test_add_meta", "Add metadata to current collections"), function() /*=>*/ { __test_metadata_current_collections(); }), + menuItem(__txtx("panel_menu_test_update_sam", "Update sample projects"), function() /*=>*/ { __test_update_sample_projects(); }), -1, - menuItem(__txtx("panel_menu_test_load_nodes", "Load all nodes"), function() /*=>*/ { __test_load_all_nodes(); }), - menuItem(__txtx("panel_menu_test_gen_guide", "Generate node guide"), function() /*=>*/ { var dia = dialogPanelCall(new Panel_Node_Data_Gen()); }), - menuItem(__txtx("panel_menu_test_gen_theme", "Generate theme object"), function() /*=>*/ { __test_generate_theme(); }), + menuItem(__txtx("panel_menu_test_load_nodes", "Load all nodes"), function() /*=>*/ { __test_load_all_nodes(); }), + menuItem(__txtx("panel_menu_test_gen_guide", "Generate node guide"), function() /*=>*/ { dialogPanelCall(new Panel_Node_Data_Gen()); }), + menuItem(__txtx("panel_menu_test_gen_theme", "Generate theme object"), function() /*=>*/ { __test_generate_theme(); }), -1, - menuItem(__txtx("panel_menu_test_warning", "Display Warning"), function() /*=>*/ { noti_warning("Error message") }), - menuItem(__txtx("panel_menu_test_error", "Display Error"), function() /*=>*/ { noti_error("Error message") }), - menuItem(__txtx("panel_menu_test_crash", "Force crash"), function() /*=>*/ { print(1 + "a"); }), + menuItem(__txtx("panel_menu_test_warning", "Display Warning"), function() /*=>*/ { noti_warning("Error message") }), + menuItem(__txtx("panel_menu_test_error", "Display Error"), function() /*=>*/ { noti_error("Error message") }), + menuItem(__txtx("panel_menu_test_crash", "Force crash"), function() /*=>*/ { print(1 + "a"); }), -1, menuItemShelf(__txt("Misc."), function(_dat) { - return submenuCall(_dat, [ menuItem(__txtx("panel_menu_node_credit", "Node credit dialog"), function() /*=>*/ { var dia = dialogPanelCall(new Panel_Node_Cost()); }), ]); + return submenuCall(_dat, [ menuItem(__txtx("panel_menu_node_credit", "Node credit dialog"), function() /*=>*/ { dialogPanelCall(new Panel_Node_Cost()); }), ]); }), ]]); } diff --git a/scripts/panel_resource_monitor/panel_resource_monitor.gml b/scripts/panel_resource_monitor/panel_resource_monitor.gml new file mode 100644 index 000000000..6571dfc83 --- /dev/null +++ b/scripts/panel_resource_monitor/panel_resource_monitor.gml @@ -0,0 +1,55 @@ +function Panel_Resource_Monitor() : PanelContent() constructor { + title = "ResMon"; + w = ui(380); + h = ui(48); + min_h = ui(20); + + sysinfo_init(); + + mb = 1024 * 1024; + gb = 1024 * 1024 * 1024; + memory_max = sysinfo_get_memory_max(); + vram_max = sysinfo_get_gpu_vram(); + cpu_cores = sysinfo_get_core_count(); + + memory_use = 0; + cpu_uses = array_create(5); + cpu_use_ind = 0; + cpu_use_acc = 0; + cpu_rec = 0; + + runner = 0; + + function drawContent(panel) { + draw_clear(merge_color(c_black, CDEF.main_dkblack, 0.75)); + draw_clear(COLORS.panel_bg_clear_inner); + runner++; + + if(runner % 100 == 0) { + memory_use = sysinfo_proc_memory_used(); + cpu_use = sysinfo_sys_cpu_usage(); + if(cpu_use > 0) { + cpu_use_acc -= cpu_uses[cpu_use_ind]; + cpu_uses[cpu_use_ind] = cpu_use; + cpu_use_acc += cpu_use; + cpu_use_ind = (cpu_use_ind + 1) % 5; + cpu_rec++; + } + } + + var _cpu = cpu_use_acc / clamp(cpu_rec, 1, 5); + var _mem = memory_use / memory_max; + + draw_sprite_stretched_ext(THEME.s_box_r2, 0, 0, 0, w * _mem, h, COLORS._main_value_positive, 0.2); + draw_set_text(f_code, fa_left, fa_center, COLORS._main_text); + + var _tx = ui(12); + var _ty = h / 2; + draw_set_color(COLORS._main_text_sub); draw_text(_tx, _ty, $"CPU usage"); + draw_set_color(COLORS._main_text); draw_text(_tx + ui(80), _ty, $"{_cpu}%"); + + _tx += ui(160); + draw_set_color(COLORS._main_text_sub); draw_text(_tx, _ty, $"Memory"); + draw_set_color(COLORS._main_text); draw_text(_tx + ui(56), _ty, $"{memory_use / mb} MB"); + } +} \ No newline at end of file diff --git a/scripts/panel_resource_monitor/panel_resource_monitor.yy b/scripts/panel_resource_monitor/panel_resource_monitor.yy new file mode 100644 index 000000000..bc67cf75d --- /dev/null +++ b/scripts/panel_resource_monitor/panel_resource_monitor.yy @@ -0,0 +1,14 @@ +{ + "$GMScript":"v1", + "%Name":"panel_resource_monitor", + "isCompatibility":false, + "isDnD":false, + "name":"panel_resource_monitor", + "parent":{ + "name":"_others", + "path":"folders/panels/_others.yy", + }, + "resourceType":"GMScript", + "resourceVersion":"2.0", + "tags":[], +} \ No newline at end of file