Please disregard that first patch I sent out earlier. This one is an updated version. It has been tested against current anon-CVS as of 19:40 CST.
This patch has configuration save/load as well as the features specified in patch 2.0. Here's the complete changelog for this patch. ADDED : Configuration Menus! ADDED : Support for Interval Changing. Intervals for CPU, Memory, and Network are all adjustable. ADDED : Support for Network Interface changing. Monitor now scans for network interfaces on load and provides a menu with a list. ADDED : Option to ignore Cache or Buffer memory. ADDED : Save/load functions for all new configuration options using e_config. (Thanks to the guys on the e-devel list for pointing me in the right direction) CHANGED : Clean up some more warnings. CHANGED : Moved configuration items to the correct structure. After reviewing the code of the modules provided with E17, this seemed like the more approriate place for them. TODO : The memory icon definitely needs some cleaning. The more I stare at it, the more I don't care for it. Thanks, -- Ed Presutti (ekrunch on freenode)
Index: e17/apps/e_modules/src/modules/monitor/e_mod_main.c =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e_modules/src/modules/monitor/e_mod_main.c,v retrieving revision 1.2 diff -b -u -3 -r1.2 e_mod_main.c --- e17/apps/e_modules/src/modules/monitor/e_mod_main.c 19 Jul 2005 11:38:21 -0000 1.2 +++ e17/apps/e_modules/src/modules/monitor/e_mod_main.c 21 Jul 2005 00:37:50 -0000 @@ -14,6 +14,47 @@ static void _monitor_face_menu_new(Monitor_Face *face); static void _monitor_face_cb_gmc_change(void *data, E_Gadman_Client *gmc, E_Gadman_Change change); +static void _monitor_mem_real_ignore_buffers_set_cb(void *data, E_Menu *m, + E_Menu_Item *mi); +static void _monitor_mem_real_ignore_cached_set_cb(void *data, E_Menu *m, + E_Menu_Item *mi); + +static void _monitor_mem_interval_cb_fast(void *data, E_Menu *m, + E_Menu_Item *mi); +static void _monitor_mem_interval_cb_medium(void *data, E_Menu *m, + E_Menu_Item *mi); +static void _monitor_mem_interval_cb_normal(void *data, E_Menu *m, + E_Menu_Item *mi); +static void _monitor_mem_interval_cb_slow(void *data, E_Menu *m, + E_Menu_Item *mi); +static void _monitor_mem_interval_cb_very_slow(void *data, E_Menu *m, + E_Menu_Item *mi); + +static void _monitor_cpu_interval_cb_fast(void *data, E_Menu *m, + E_Menu_Item *mi); +static void _monitor_cpu_interval_cb_medium(void *data, E_Menu *m, + E_Menu_Item *mi); +static void _monitor_cpu_interval_cb_normal(void *data, E_Menu *m, + E_Menu_Item *mi); +static void _monitor_cpu_interval_cb_slow(void *data, E_Menu *m, + E_Menu_Item *mi); +static void _monitor_cpu_interval_cb_very_slow(void *data, E_Menu *m, + E_Menu_Item *mi); + +static void _monitor_net_interval_cb_fast(void *data, E_Menu *m, + E_Menu_Item *mi); +static void _monitor_net_interval_cb_medium(void *data, E_Menu *m, + E_Menu_Item *mi); +static void _monitor_net_interval_cb_normal(void *data, E_Menu *m, + E_Menu_Item *mi); +static void _monitor_net_interval_cb_slow(void *data, E_Menu *m, + E_Menu_Item *mi); +static void _monitor_net_interval_cb_very_slow(void *data, E_Menu *m, + E_Menu_Item *mi); +static void _monitor_net_interface_cb(void *data, E_Menu *m, + E_Menu_Item *mi); + + static void _monitor_face_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _monitor_face_cb_menu_enabled(void *data, E_Menu *m, @@ -38,6 +79,12 @@ static E_Config_DD *conf_edd; static E_Config_DD *conf_face_edd; +static Flow_Chart *flow_chart_cpu; +static Flow_Chart *flow_chart_net_in; +static Flow_Chart *flow_chart_net_out; +static Flow_Chart *flow_chart_mem_real; +static Flow_Chart *flow_chart_mem_swap; + /* public module routines. all modules must have these */ void * e_modapi_init(E_Module *module) @@ -124,6 +171,12 @@ #define T Config_Face #define D conf_face_edd E_CONFIG_VAL(D, T, enabled, INT); + E_CONFIG_VAL(D, T, cpu_interval, DOUBLE); + E_CONFIG_VAL(D, T, mem_interval, DOUBLE); + E_CONFIG_VAL(D, T, net_interval, DOUBLE); + E_CONFIG_VAL(D, T, net_interface, STR); + E_CONFIG_VAL(D, T, mem_real_ignore_cached, INT); + E_CONFIG_VAL(D, T, mem_real_ignore_buffers, INT); conf_edd = E_CONFIG_DD_NEW("Monitor_Config", Config); #undef T @@ -162,6 +215,12 @@ { face->conf = E_NEW(Config_Face, 1); face->conf->enabled = 1; + face->conf->cpu_interval = 1.0; + face->conf->mem_interval = 1.0; + face->conf->net_interval = 1.0; + face->conf->net_interface = strdup("eth0"); + face->conf->mem_real_ignore_cached = 0; + face->conf->mem_real_ignore_buffers = 0; monitor->conf->faces = evas_list_append(monitor->conf->faces, face->conf); @@ -184,6 +243,31 @@ /* Setup */ if (!face->conf->enabled) _monitor_face_disable(face); + + /* + * Now that init is done, set up intervals, + * interfaces, and memory monitor parameters + * according to the configuration. + */ + mem_real_ignore_buffers_set( + face->conf->mem_real_ignore_buffers); + mem_real_ignore_cached_set( + face->conf->mem_real_ignore_cached); + + net_interface_set( + face->conf->net_interface); + + flow_chart_update_rate_set(flow_chart_cpu, + face->conf->cpu_interval); + flow_chart_update_rate_set(flow_chart_mem_real, + face->conf->mem_interval); + flow_chart_update_rate_set(flow_chart_mem_swap, + face->conf->mem_interval); + flow_chart_update_rate_set(flow_chart_net_in, + face->conf->net_interval); + flow_chart_update_rate_set(flow_chart_net_out, + face->conf->net_interval); + } } } @@ -221,8 +305,16 @@ Monitor_Face *face; Evas_Object *o; + /* + * Configuration cannot be used yet as the face config + * is not initialized. Everything will be updated after + * the init is complete. + */ + double tmp_cpu_interval = 1.0; + double tmp_mem_interval = 1.0; + double tmp_net_interval = 1.0; + Chart_Container *chart_con; - Flow_Chart *flow_chart; face = E_NEW(Monitor_Face, 1); if (!face) return NULL; @@ -232,11 +324,6 @@ evas_event_freeze(con->bg_evas); - /* setup intervals */ - face->cpu_rate = 1.0; - face->mem_rate = 1.0; - face->net_rate = 1.0; - /* setup monitor object */ o = edje_object_add(con->bg_evas); face->monitor_object = o; @@ -264,13 +351,13 @@ evas_object_show(o); /* add cpu chart */ chart_con = chart_container_new(con->bg_evas,0,0,0,0); - flow_chart = flow_chart_new(); - flow_chart_color_set(flow_chart, 33, 100, 220, 255); - flow_chart_get_value_function_set(flow_chart, cpu_usage_get); - flow_chart_update_rate_set(flow_chart, face->cpu_rate); - chart_container_chart_add(chart_con, flow_chart); + flow_chart_cpu = flow_chart_new(); + flow_chart_color_set(flow_chart_cpu, 33, 100, 220, 255); + flow_chart_get_value_function_set(flow_chart_cpu, cpu_usage_get); + flow_chart_update_rate_set(flow_chart_cpu, tmp_cpu_interval); + chart_container_chart_add(chart_con, flow_chart_cpu); face->chart_cpu = chart_con; - flow_chart_callback_set(flow_chart, _monitor_cpu_text_update_callcack, face); + flow_chart_callback_set(flow_chart_cpu, _monitor_cpu_text_update_callcack, face); o = evas_object_rectangle_add(con->bg_evas); face->cpu_ev_obj = o; @@ -291,23 +378,23 @@ evas_object_show(o); /* add mem charts */ chart_con = chart_container_new(con->bg_evas,0,0,0,0); - flow_chart = flow_chart_new(); - flow_chart_color_set(flow_chart, 213, 91, 91, 255); - flow_chart_get_value_function_set(flow_chart, mem_real_usage_get); - flow_chart_update_rate_set(flow_chart, face->mem_rate); - chart_container_chart_add(chart_con, flow_chart); + flow_chart_mem_real = flow_chart_new(); + flow_chart_color_set(flow_chart_mem_real, 213, 91, 91, 255); + flow_chart_get_value_function_set(flow_chart_mem_real, mem_real_usage_get); + flow_chart_update_rate_set(flow_chart_mem_real, tmp_mem_interval); + chart_container_chart_add(chart_con, flow_chart_mem_real); face->chart_mem = chart_con; - flow_chart_callback_set(flow_chart, _monitor_mem_real_text_update_callback, - face); + flow_chart_callback_set(flow_chart_mem_real, + _monitor_mem_real_text_update_callback, face); - flow_chart = flow_chart_new(); - flow_chart_color_set(flow_chart, 51, 181, 69, 255); - flow_chart_get_value_function_set(flow_chart, mem_swap_usage_get); - flow_chart_update_rate_set(flow_chart, face->mem_rate); - flow_chart_alignment_set(flow_chart, 0); - chart_container_chart_add(chart_con, flow_chart); - flow_chart_callback_set(flow_chart, _monitor_mem_swap_text_update_callback, - face); + flow_chart_mem_swap = flow_chart_new(); + flow_chart_color_set(flow_chart_mem_swap, 51, 181, 69, 255); + flow_chart_get_value_function_set(flow_chart_mem_swap, mem_swap_usage_get); + flow_chart_update_rate_set(flow_chart_mem_swap, tmp_mem_interval); + flow_chart_alignment_set(flow_chart_mem_swap, 0); + chart_container_chart_add(chart_con, flow_chart_mem_swap); + flow_chart_callback_set(flow_chart_mem_swap, + _monitor_mem_swap_text_update_callback, face); o = evas_object_rectangle_add(con->bg_evas); @@ -329,23 +416,23 @@ evas_object_show(o); /* add net charts */ chart_con = chart_container_new(con->bg_evas,0,0,0,0); - flow_chart = flow_chart_new(); - flow_chart_color_set(flow_chart, 213, 91, 91, 255); - flow_chart_get_value_function_set(flow_chart, net_in_usage_get); - flow_chart_update_rate_set(flow_chart, face->net_rate); - chart_container_chart_add(chart_con, flow_chart); + flow_chart_net_in = flow_chart_new(); + flow_chart_color_set(flow_chart_net_in, 213, 91, 91, 255); + flow_chart_get_value_function_set(flow_chart_net_in, net_in_usage_get); + flow_chart_update_rate_set(flow_chart_net_in, tmp_net_interval); + chart_container_chart_add(chart_con, flow_chart_net_in); face->chart_net = chart_con; - flow_chart_callback_set(flow_chart, _monitor_net_in_text_update_callcack, - face); + flow_chart_callback_set(flow_chart_net_in, + _monitor_net_in_text_update_callcack, face); - flow_chart = flow_chart_new(); - flow_chart_color_set(flow_chart, 51, 181, 69, 255); - flow_chart_get_value_function_set(flow_chart, net_out_usage_get); - flow_chart_update_rate_set(flow_chart, face->net_rate); - flow_chart_alignment_set(flow_chart, 0); - chart_container_chart_add(chart_con, flow_chart); - flow_chart_callback_set(flow_chart, _monitor_net_out_text_update_callcack, - face); + flow_chart_net_out = flow_chart_new(); + flow_chart_color_set(flow_chart_net_out, 51, 181, 69, 255); + flow_chart_get_value_function_set(flow_chart_net_out, net_out_usage_get); + flow_chart_update_rate_set(flow_chart_net_out, tmp_net_interval); + flow_chart_alignment_set(flow_chart_net_out, 0); + chart_container_chart_add(chart_con, flow_chart_net_out); + flow_chart_callback_set(flow_chart_net_out, + _monitor_net_out_text_update_callcack, face); o = evas_object_rectangle_add(con->bg_evas); @@ -488,8 +575,16 @@ if (face->monitor_object) evas_object_del(face->monitor_object); if (face->table_object) evas_object_del(face->table_object); + e_object_del(E_OBJECT(face->menu_network_interface)); + e_object_del(E_OBJECT(face->menu_network_interval)); + e_object_del(E_OBJECT(face->menu_network)); + e_object_del(E_OBJECT(face->menu_memory_interval)); + e_object_del(E_OBJECT(face->menu_memory)); + e_object_del(E_OBJECT(face->menu_cpu_interval)); + e_object_del(E_OBJECT(face->menu_cpu)); e_object_del(E_OBJECT(face->menu)); + free(face->conf->net_interface); free(face->conf); free(face); _monitor_count--; @@ -514,24 +609,200 @@ static void _monitor_face_menu_new(Monitor_Face *face) { - E_Menu *mn; E_Menu_Item *mi; + Ecore_List* interfaces = NULL; + int interface_count = 0; + char* interface_name = NULL; + + /* Setup Menus */ + face->menu = e_menu_new(); + face->menu_cpu = e_menu_new(); + face->menu_cpu_interval = e_menu_new(); + face->menu_memory = e_menu_new(); + face->menu_memory_interval = e_menu_new(); + face->menu_network = e_menu_new(); + face->menu_network_interval = e_menu_new(); + face->menu_network_interface = e_menu_new(); + + /* Main Menu Items */ + mi = e_menu_item_new(face->menu); + e_menu_item_label_set(mi, _("Edit Mode")); + e_menu_item_callback_set(mi, _monitor_face_cb_menu_edit, face); - mn = e_menu_new(); - face->menu = mn; + /* CPU Menu */ + mi = e_menu_item_new(face->menu); + e_menu_item_label_set(mi, _("CPU")); + e_menu_item_submenu_set(mi, face->menu_cpu); + + mi = e_menu_item_new(face->menu_cpu); + e_menu_item_label_set(mi, _("Set Interval")); + e_menu_item_submenu_set(mi, face->menu_cpu_interval); + + /* CPU Menu Items */ + mi = e_menu_item_new(face->menu_cpu_interval); + e_menu_item_label_set(mi, _("Check Fast (1 sec)")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 1); + if (face->conf->cpu_interval == 1.0) e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, _monitor_cpu_interval_cb_fast, face); + + mi = e_menu_item_new(face->menu_cpu_interval); + e_menu_item_label_set(mi, _("Check Medium (5 sec)")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 1); + if (face->conf->cpu_interval == 5.0) e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, _monitor_cpu_interval_cb_medium, face); + + mi = e_menu_item_new(face->menu_cpu_interval); + e_menu_item_label_set(mi, _("Check Normal (10 sec)")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 1); + if (face->conf->cpu_interval == 10.0) e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, _monitor_cpu_interval_cb_normal, face); + + mi = e_menu_item_new(face->menu_cpu_interval); + e_menu_item_label_set(mi, _("Check Slow (30 sec)")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 1); + if (face->conf->cpu_interval == 30.0) e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, _monitor_cpu_interval_cb_slow, face); + + mi = e_menu_item_new(face->menu_cpu_interval); + e_menu_item_label_set(mi, _("Check Very Slow (60 sec)")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 1); + if (face->conf->cpu_interval == 60.0) e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, _monitor_cpu_interval_cb_very_slow, face); + + /* Memory Menu */ + mi = e_menu_item_new(face->menu); + e_menu_item_label_set(mi, _("Memory")); + e_menu_item_submenu_set(mi, face->menu_memory); + + mi = e_menu_item_new(face->menu_memory); + e_menu_item_label_set(mi, _("Set Interval")); + e_menu_item_submenu_set(mi, face->menu_memory_interval); + + /* Memory Interval Menu Items */ + mi = e_menu_item_new(face->menu_memory_interval); + e_menu_item_label_set(mi, _("Check Fast (1 sec)")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 1); + if (face->conf->mem_interval == 1.0) e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, _monitor_mem_interval_cb_fast, face); + + mi = e_menu_item_new(face->menu_memory_interval); + e_menu_item_label_set(mi, _("Check Medium (5 sec)")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 1); + if (face->conf->mem_interval == 5.0) e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, _monitor_mem_interval_cb_medium, face); + + mi = e_menu_item_new(face->menu_memory_interval); + e_menu_item_label_set(mi, _("Check Normal (10 sec)")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 1); + if (face->conf->mem_interval == 10.0) e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, _monitor_mem_interval_cb_normal, face); + + mi = e_menu_item_new(face->menu_memory_interval); + e_menu_item_label_set(mi, _("Check Slow (30 sec)")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 1); + if (face->conf->mem_interval == 30.0) e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, _monitor_mem_interval_cb_slow, face); + + mi = e_menu_item_new(face->menu_memory_interval); + e_menu_item_label_set(mi, _("Check Very Slow (60 sec)")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 1); + if (face->conf->mem_interval == 60.0) e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, _monitor_mem_interval_cb_very_slow, face); + + /* Memory Menu Items */ + mi = e_menu_item_new(face->menu_memory); + e_menu_item_label_set(mi, _("Ignore Cached")); + e_menu_item_check_set(mi, 1); + if (face->conf->mem_real_ignore_cached) e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, _monitor_mem_real_ignore_cached_set_cb, face); - /* Enabled - mi = e_menu_item_new(mn); - e_menu_item_label_set(mi, "Enabled"); + mi = e_menu_item_new(face->menu_memory); + e_menu_item_label_set(mi, _("Ignore Buffers")); e_menu_item_check_set(mi, 1); - if (face->conf->enabled) e_menu_item_toggle_set(mi, 1); - e_menu_item_callback_set(mi, _monitor_face_cb_menu_enabled, face); - //*/ - - /* Edit */ - mi = e_menu_item_new(mn); - e_menu_item_label_set(mi, "Edit Mode"); - e_menu_item_callback_set(mi, _monitor_face_cb_menu_edit, face); + if (face->conf->mem_real_ignore_buffers) e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, _monitor_mem_real_ignore_buffers_set_cb, face); + + /* Network Menu */ + mi = e_menu_item_new(face->menu); + e_menu_item_label_set(mi, _("Network")); + e_menu_item_submenu_set(mi, face->menu_network); + + mi = e_menu_item_new(face->menu_network); + e_menu_item_label_set(mi, _("Set Interval")); + e_menu_item_submenu_set(mi, face->menu_network_interval); + + mi = e_menu_item_new(face->menu_network); + e_menu_item_label_set(mi, _("Select Interface")); + e_menu_item_submenu_set(mi, face->menu_network_interface); + + interfaces = ecore_list_new (); + interface_count = net_interfaces_get (interfaces); + + ecore_list_goto_first(interfaces); + + while ((interface_name = ecore_list_current(interfaces))) + { + + mi = e_menu_item_new(face->menu_network_interface); + e_menu_item_label_set(mi, _(interface_name)); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 1); + if (!strcmp(face->conf->net_interface, interface_name)) + e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, _monitor_net_interface_cb, face); + + free(interface_name); + ecore_list_remove(interfaces); + } + + ecore_list_destroy(interfaces); + + /* Network Menu Items */ + mi = e_menu_item_new(face->menu_network_interval); + e_menu_item_label_set(mi, _("Check Fast (1 sec)")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 1); + if (face->conf->net_interval == 1.0) e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, _monitor_net_interval_cb_fast, face); + + mi = e_menu_item_new(face->menu_network_interval); + e_menu_item_label_set(mi, _("Check Medium (5 sec)")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 1); + if (face->conf->net_interval == 5.0) e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, _monitor_net_interval_cb_medium, face); + + mi = e_menu_item_new(face->menu_network_interval); + e_menu_item_label_set(mi, _("Check Normal (10 sec)")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 1); + if (face->conf->net_interval == 10.0) e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, _monitor_net_interval_cb_normal, face); + + mi = e_menu_item_new(face->menu_network_interval); + e_menu_item_label_set(mi, _("Check Slow (30 sec)")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 1); + if (face->conf->net_interval == 30.0) e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, _monitor_net_interval_cb_slow, face); + + mi = e_menu_item_new(face->menu_network_interval); + e_menu_item_label_set(mi, _("Check Very Slow (60 sec)")); + e_menu_item_radio_set(mi, 1); + e_menu_item_radio_group_set(mi, 1); + if (face->conf->net_interval == 60.0) e_menu_item_toggle_set(mi, 1); + e_menu_item_callback_set(mi, _monitor_net_interval_cb_very_slow, face); + } static void @@ -612,6 +883,59 @@ } static void +_monitor_mem_real_ignore_buffers_set_cb(void *data, E_Menu *m, + E_Menu_Item *mi) +{ + Monitor_Face *face; + + face = data; + unsigned char enabled; + + enabled = e_menu_item_toggle_get(mi); + + if (!enabled) { + /* Uncheck */ + face->conf->mem_real_ignore_buffers = 0; + mem_real_ignore_buffers_set(face->conf->mem_real_ignore_buffers); + e_menu_item_toggle_set(mi, face->conf->mem_real_ignore_buffers); + } + else + { + /* Check */ + face->conf->mem_real_ignore_buffers = 1; + mem_real_ignore_buffers_set(face->conf->mem_real_ignore_buffers); + e_menu_item_toggle_set(mi, face->conf->mem_real_ignore_buffers); + } + e_config_save_queue(); +} +static void +_monitor_mem_real_ignore_cached_set_cb(void *data, E_Menu *m, + E_Menu_Item *mi) +{ + Monitor_Face *face; + + face = data; + unsigned char enabled; + + enabled = e_menu_item_toggle_get(mi); + + if (!enabled) { + /* Uncheck */ + face->conf->mem_real_ignore_cached = 0; + mem_real_ignore_cached_set(face->conf->mem_real_ignore_cached); + e_menu_item_toggle_set(mi, face->conf->mem_real_ignore_cached); + } + else + { + /* Check */ + face->conf->mem_real_ignore_cached = 1; + mem_real_ignore_cached_set(face->conf->mem_real_ignore_cached); + e_menu_item_toggle_set(mi, face->conf->mem_real_ignore_cached); + } + e_config_save_queue(); +} + +static void _monitor_face_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info) { @@ -652,3 +976,205 @@ void *event_info) { } + +static void +_monitor_mem_interval_cb_fast(void *data, E_Menu *m, + E_Menu_Item *mi) +{ + Monitor_Face *face; + face = data; + + face->conf->mem_interval = 1.0; + flow_chart_update_rate_set(flow_chart_mem_real, face->conf->mem_interval); + flow_chart_update_rate_set(flow_chart_mem_swap, face->conf->mem_interval); + e_config_save_queue(); +} + +static void +_monitor_mem_interval_cb_medium(void *data, E_Menu *m, + E_Menu_Item *mi) +{ + Monitor_Face *face; + face = data; + + face->conf->mem_interval = 5.0; + flow_chart_update_rate_set(flow_chart_mem_real, face->conf->mem_interval); + flow_chart_update_rate_set(flow_chart_mem_swap, face->conf->mem_interval); + e_config_save_queue(); +} + +static void +_monitor_mem_interval_cb_normal(void *data, E_Menu *m, + E_Menu_Item *mi) +{ + Monitor_Face *face; + face = data; + + face->conf->mem_interval = 10.0; + flow_chart_update_rate_set(flow_chart_mem_real, face->conf->mem_interval); + flow_chart_update_rate_set(flow_chart_mem_swap, face->conf->mem_interval); + e_config_save_queue(); +} + +static void +_monitor_mem_interval_cb_slow(void *data, E_Menu *m, + E_Menu_Item *mi) +{ + Monitor_Face *face; + face = data; + + face->conf->mem_interval = 30.0; + flow_chart_update_rate_set(flow_chart_mem_real, face->conf->mem_interval); + flow_chart_update_rate_set(flow_chart_mem_swap, face->conf->mem_interval); + e_config_save_queue(); +} + +static void +_monitor_mem_interval_cb_very_slow(void *data, E_Menu *m, + E_Menu_Item *mi) +{ + Monitor_Face *face; + face = data; + + face->conf->mem_interval = 60.0; + flow_chart_update_rate_set(flow_chart_mem_real, face->conf->mem_interval); + flow_chart_update_rate_set(flow_chart_mem_swap, face->conf->mem_interval); + e_config_save_queue(); +} + +static void +_monitor_cpu_interval_cb_fast(void *data, E_Menu *m, + E_Menu_Item *mi) +{ + Monitor_Face *face; + face = data; + + face->conf->cpu_interval = 1.0; + flow_chart_update_rate_set(flow_chart_cpu, face->conf->cpu_interval); + e_config_save_queue(); +} + +static void +_monitor_cpu_interval_cb_medium(void *data, E_Menu *m, + E_Menu_Item *mi) +{ + Monitor_Face *face; + face = data; + + face->conf->cpu_interval = 5.0; + flow_chart_update_rate_set(flow_chart_cpu, face->conf->cpu_interval); + e_config_save_queue(); +} + +static void +_monitor_cpu_interval_cb_normal(void *data, E_Menu *m, + E_Menu_Item *mi) +{ + Monitor_Face *face; + face = data; + + face->conf->cpu_interval = 10.0; + flow_chart_update_rate_set(flow_chart_cpu, face->conf->cpu_interval); + e_config_save_queue(); +} + +static void +_monitor_cpu_interval_cb_slow(void *data, E_Menu *m, + E_Menu_Item *mi) +{ + Monitor_Face *face; + face = data; + + face->conf->cpu_interval = 30.0; + flow_chart_update_rate_set(flow_chart_cpu, face->conf->cpu_interval); + e_config_save_queue(); +} + +static void +_monitor_cpu_interval_cb_very_slow(void *data, E_Menu *m, + E_Menu_Item *mi) +{ + Monitor_Face *face; + face = data; + + face->conf->cpu_interval = 60.0; + flow_chart_update_rate_set(flow_chart_cpu, face->conf->cpu_interval); + e_config_save_queue(); +} + +static void +_monitor_net_interval_cb_fast(void *data, E_Menu *m, + E_Menu_Item *mi) +{ + Monitor_Face *face; + face = data; + + face->conf->net_interval = 1.0; + flow_chart_update_rate_set(flow_chart_net_in, face->conf->net_interval); + flow_chart_update_rate_set(flow_chart_net_out, face->conf->net_interval); + e_config_save_queue(); +} + +static void +_monitor_net_interval_cb_medium(void *data, E_Menu *m, + E_Menu_Item *mi) +{ + Monitor_Face *face; + face = data; + + face->conf->net_interval = 5.0; + flow_chart_update_rate_set(flow_chart_net_in, face->conf->net_interval); + flow_chart_update_rate_set(flow_chart_net_out, face->conf->net_interval); + e_config_save_queue(); +} + +static void +_monitor_net_interval_cb_normal(void *data, E_Menu *m, + E_Menu_Item *mi) +{ + Monitor_Face *face; + face = data; + + face->conf->net_interval = 10.0; + flow_chart_update_rate_set(flow_chart_net_in, face->conf->net_interval); + flow_chart_update_rate_set(flow_chart_net_out, face->conf->net_interval); + e_config_save_queue(); +} + +static void +_monitor_net_interval_cb_slow(void *data, E_Menu *m, + E_Menu_Item *mi) +{ + Monitor_Face *face; + face = data; + + face->conf->net_interval = 30.0; + flow_chart_update_rate_set(flow_chart_net_in, face->conf->net_interval); + flow_chart_update_rate_set(flow_chart_net_out, face->conf->net_interval); + e_config_save_queue(); +} + +static void +_monitor_net_interval_cb_very_slow(void *data, E_Menu *m, + E_Menu_Item *mi) +{ + Monitor_Face *face; + face = data; + + face->conf->net_interval = 60.0; + flow_chart_update_rate_set(flow_chart_net_in, face->conf->net_interval); + flow_chart_update_rate_set(flow_chart_net_out, face->conf->net_interval); + e_config_save_queue(); +} + +static void +_monitor_net_interface_cb(void *data, E_Menu *m, + E_Menu_Item *mi) +{ + Monitor_Face *face; + face = data; + + face->conf->net_interface = strdup(mi->label); + net_interface_set(face->conf->net_interface); + e_config_save_queue(); +} Index: e17/apps/e_modules/src/modules/monitor/e_mod_main.h =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e_modules/src/modules/monitor/e_mod_main.h,v retrieving revision 1.2 diff -b -u -3 -r1.2 e_mod_main.h --- e17/apps/e_modules/src/modules/monitor/e_mod_main.h 19 Jul 2005 11:38:21 -0000 1.2 +++ e17/apps/e_modules/src/modules/monitor/e_mod_main.h 21 Jul 2005 00:37:50 -0000 @@ -4,6 +4,7 @@ #include <e.h> +#include <Ecore.h> #include "flow_chart.h" #include "linux_2.6.h" @@ -21,6 +22,15 @@ struct _Config_Face { unsigned char enabled; + + double cpu_interval; + double mem_interval; + double net_interval; + + char *net_interface; + + int mem_real_ignore_cached; + int mem_real_ignore_buffers; }; struct _Monitor @@ -35,19 +45,21 @@ { E_Container *con; E_Menu *menu; + E_Menu *menu_cpu; + E_Menu *menu_cpu_interval; + E_Menu *menu_memory; + E_Menu *menu_memory_interval; + E_Menu *menu_network; + E_Menu *menu_network_interval; + E_Menu *menu_network_interface; Config_Face *conf; Evas_Object *cpu, *net, *mem; Evas_Object *cpu_ev_obj, *net_ev_obj, *mem_ev_obj; Evas_Object *table_object, *monitor_object; - double cpu_rate; - double mem_rate; - double net_rate; - Chart_Container *chart_cpu, *chart_net, *chart_mem; - E_Gadman_Client *gmc; }; Index: e17/apps/e_modules/src/modules/monitor/flow_chart.c =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e_modules/src/modules/monitor/flow_chart.c,v retrieving revision 1.1 diff -b -u -3 -r1.1 flow_chart.c --- e17/apps/e_modules/src/modules/monitor/flow_chart.c 22 May 2005 03:07:06 -0000 1.1 +++ e17/apps/e_modules/src/modules/monitor/flow_chart.c 21 Jul 2005 00:37:50 -0000 @@ -7,7 +7,8 @@ { Flow_Chart *chart = (Flow_Chart *)data; - Evas_Object *o, *last; + Evas_Object *o; + Evas_Object *last = NULL; Evas_List *l; int i, j = 0; int value = 0, text_value = 0; @@ -64,7 +65,7 @@ for(i = x+w; l && j - 2 < w - dist_right - dist_left; l = l->next, j++) { - Evas_Coord x,y; + Evas_Coord y; Evas_Object *lo; lo = (Evas_Object *)evas_list_data(l); Index: e17/apps/e_modules/src/modules/monitor/flow_chart.h =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e_modules/src/modules/monitor/flow_chart.h,v retrieving revision 1.1 diff -b -u -3 -r1.1 flow_chart.h --- e17/apps/e_modules/src/modules/monitor/flow_chart.h 22 May 2005 03:07:06 -0000 1.1 +++ e17/apps/e_modules/src/modules/monitor/flow_chart.h 21 Jul 2005 00:37:50 -0000 @@ -1,6 +1,7 @@ #include <Ecore.h> #include <Evas.h> +#include <Edje.h> typedef struct _Chart_Container Chart_Container; typedef struct _Flow_Chart Flow_Chart; Index: e17/apps/e_modules/src/modules/monitor/linux_2.6.c =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e_modules/src/modules/monitor/linux_2.6.c,v retrieving revision 1.3 diff -b -u -3 -r1.3 linux_2.6.c --- e17/apps/e_modules/src/modules/monitor/linux_2.6.c 19 Jul 2005 11:38:21 -0000 1.3 +++ e17/apps/e_modules/src/modules/monitor/linux_2.6.c 21 Jul 2005 00:37:50 -0000 @@ -14,7 +14,7 @@ return -1; while (fscanf (stat, "cp%s %*u %*u %*u %*u %*u %*u %*u %*u\n", - &tmp) == 1) + (char *)&tmp) == 1) { cpu++; } @@ -103,7 +103,7 @@ long bytes_out = 0; int in_usage = 0; int out_usage = 0; - +int interface_changed = 1; int get_net_input_output(unsigned long *in, unsigned long *out, const char *dev) @@ -160,6 +160,19 @@ unsigned long r_total = 0, t_total = 0; + if (interface_changed) + { + /* Interface Changed, reset counters! */ + interface_changed = 0; + old_r_total = 0; + old_t_total = 0; + bytes_in = 0; + bytes_out = 0; + in_usage = 0; + out_usage = 0; + return; + } + if ((get_net_input_output( &r_total, &t_total, net_dev)) == -1) { in_usage = -1; @@ -214,15 +227,74 @@ return out_usage; } +void net_interface_set(char* interface_name) +{ + /* Change Network Interface */ + net_dev = interface_name; + interface_changed = 1; +} + +int +net_interfaces_get(Ecore_List * ifaces) +{ + unsigned long int dummy; + + char *iface; + char buf[256]; + FILE *stat; + int iface_count = 0; + int x = 0; + + stat = fopen ("/proc/net/dev", "r"); + if (!stat) return 0; + + while (fgets (buf, 256, stat)) + { + int i = 0; + + /* remove : */ + for(; buf[i] != 0; i++) + if(buf[i] == ':')buf[i] = ' '; + + iface = (char *)malloc(sizeof(char) * 64); + x = sscanf (buf, + "%s %*u %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu" + "%lu %lu %lu %lu %lu\n", iface, &dummy, &dummy, + &dummy, &dummy, &dummy, &dummy, &dummy, &dummy, + &dummy, &dummy, &dummy, &dummy, &dummy, &dummy, + &dummy, &dummy); + if (x >= 16) + { + ecore_list_append(ifaces, iface); + iface_count++; + } + } + fclose (stat); + + return iface_count; + +} + long mem_real = 0; long mem_swap = 0; int mem_real_usage = 0; int mem_swap_usage = 0; - +int mem_real_ignore_buffers = 0; +int mem_real_ignore_cached = 0; /* Begin memory monitor code */ -void memory_check(int ignore_buffers, int ignore_cached) +void mem_real_ignore_buffers_set(int ignore_buffers) +{ + mem_real_ignore_buffers = ignore_buffers; +} + +void mem_real_ignore_cached_set(int ignore_cached) +{ + mem_real_ignore_cached = ignore_cached; +} + +void memory_check(void) { FILE *pmeminfo = NULL; int cursor = 0; @@ -251,11 +323,11 @@ mtotal = value; else if (strcmp(field, "MemFree:") == 0) mfree = value; - else if (ignore_buffers && strcmp(field, "Buffers:") == 0) + else if (mem_real_ignore_buffers && strcmp(field, "Buffers:") == 0) mfree += value; - else if (ignore_cached && strcmp(field, "Cached:") == 0) + else if (mem_real_ignore_cached && strcmp(field, "Cached:") == 0) mfree += value; - else if (ignore_cached && strcmp(field, "SwapCached:") == 0) + else if (mem_real_ignore_cached && strcmp(field, "SwapCached:") == 0) sfree += value; else if (strcmp(field, "SwapTotal:") == 0) stotal = value; @@ -307,10 +379,7 @@ int mem_real_usage_get(void) { - /* FIXME - * Need a menu option to change the ignore buffers and ignore cache options - */ - memory_check(0, 0); + memory_check(); return mem_real_usage; } Index: e17/apps/e_modules/src/modules/monitor/linux_2.6.h =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e_modules/src/modules/monitor/linux_2.6.h,v retrieving revision 1.2 diff -b -u -3 -r1.2 linux_2.6.h --- e17/apps/e_modules/src/modules/monitor/linux_2.6.h 19 Jul 2005 11:38:21 -0000 1.2 +++ e17/apps/e_modules/src/modules/monitor/linux_2.6.h 21 Jul 2005 00:37:50 -0000 @@ -5,6 +5,7 @@ #include <stdio.h> #include <string.h> #include <stdlib.h> +#include <Ecore.h> int cpu_usage_get(void); @@ -13,10 +14,15 @@ int mem_real_usage_get(void); int mem_swap_usage_get(void); +void mem_real_ignore_buffers_set(int ignore_buffers); +void mem_real_ignore_cached_set(int ignore_cached); + int net_in_usage_get(void); long net_bytes_in_get(void); int net_out_usage_get(void); long net_bytes_out_get(void); +int net_interfaces_get(Ecore_List * ifaces); +void net_interface_set(char* interface_name); #endif /* LINUX_2_6 */