diff --git a/src/bin/ui/ui_memory.c b/src/bin/ui/ui_memory.c index c1c5e1f..10b2895 100644 --- a/src/bin/ui/ui_memory.c +++ b/src/bin/ui/ui_memory.c @@ -6,7 +6,6 @@ typedef struct { Ecore_Thread *thread; Evas_Object *win; - Evas_Object *bg; Evas_Object *used; Evas_Object *cached; @@ -15,46 +14,9 @@ typedef struct { Evas_Object *swap; Evas_Object *video[MEM_VIDEO_CARD_MAX]; - int pos; - Ui *ui; } Ui_Data; -static Eina_Bool starting = 1; - -#define STEP 1 -#define MAX_HIST 2048 -#define UPOLLTIME 250000 - -#define GR_USED 0 -#define GR_CACHED 1 -#define GR_BUFFER 2 -#define GR_SHARED 3 - -#define COLOR_USED 206, 70, 93, 255 -#define COLOR_CACHED 135, 190, 85, 255 -#define COLOR_BUFFER 100, 177, 242, 255 -#define COLOR_SHARED 225, 107, 62, 255 -#define COLOR_NONE 0, 0, 0, 0 - -#if !defined(__OpenBSD__) -static -#endif -Eina_Lock _mlock; - -typedef struct -{ - Eina_List *blocks; - int pos; - double history[MAX_HIST]; - int r, g, b, a; -} Graph; - -#if !defined(__OpenBSD__) -static -#endif -Graph graphs[4]; - static Evas_Object * _label_mem(Evas_Object *parent, const char *text) { @@ -79,89 +41,6 @@ _progress_add(Evas_Object *parent) return pb; } -static Evas_Object * -vg_add(Evas_Object *w) -{ - Evas_Object *o; - Evas_Vg_Container *con; - Evas_Vg_Shape *sh; - - o = evas_object_vg_add(evas_object_evas_get(w)); - con = evas_vg_container_add(o); - sh = evas_vg_shape_add(con); - evas_object_show(o); - evas_object_vg_root_node_set(o, con); - evas_object_data_set(o, "con", con); - evas_object_data_set(o, "shape", sh); - return o; -} - -static void -vg_fill(Evas_Object *o, Ui_Data *pd, int w, int h, double *pt, int r, int g, int b, int a) -{ - Evas_Vg_Shape *sh; - int i; - double v; - Evas_Vg_Node *n; - - evas_object_resize(o, w, h); - sh = evas_object_data_get(o, "shape"); - evas_vg_shape_reset(sh); - evas_vg_shape_append_move_to(sh, 0, h); - for (i = 0; i < w; i++) - { - v = (h / 100) * pt[i]; - if (v < -h) v = -h; - else if (v > h) v = h; - evas_vg_shape_append_line_to(sh, i, h - v); - } - evas_vg_shape_append_line_to(sh, pd->pos, h); - n = evas_object_data_get(sh, "shape"); - evas_vg_shape_fill_set(sh, n); - evas_vg_node_color_set(sh, r, g, b, a); - evas_vg_node_origin_set(n, 0, 0); -} - -static void -position_shrink_list(Eina_List *list) -{ - Evas_Object *o; - Eina_List *l, *ll; - int i = 0; - - EINA_LIST_FOREACH_SAFE(list, l, ll, o) - { - if (i++ > 0) - { - evas_object_del(o); - list = eina_list_remove_list(list, l); - } - } -} - -static void -position_gr_list(Eina_List *list, int w, int h, int offset) -{ - Evas_Object *o; - Eina_List *l, *ll; - int x = w - offset; - - EINA_LIST_FOREACH_SAFE(list, l, ll, o) - { - if (x + w < 0) - { - evas_object_del(o); - list = eina_list_remove_list(list, l); - } - else - { - evas_object_move(o, x, 0); - evas_object_resize(o, w, h); - } - x -= (w - STEP); - } -} - static void _mem_usage_main_cb(void *data EINA_UNUSED, Ecore_Thread *thread) { @@ -175,7 +54,7 @@ _mem_usage_main_cb(void *data EINA_UNUSED, Ecore_Thread *thread) memory.used += memory.zfs_arc_used; ecore_thread_feedback(thread, &memory); - usleep(UPOLLTIME); + usleep(1000000); } } @@ -252,100 +131,18 @@ _update_widgets(Ui_Data *pd, meminfo_t *memory) } } -static void -_reverse(double *arr, int n) -{ - for (int i = 0, j = n - 1; i < j; i++, j--) - { - double tmp = arr[i]; - arr[i] = arr[j]; - arr[j] = tmp; - } -} - -static void -_update_graph(Graph *graph, double perc, Ui_Data *pd, Evas_Coord w, Evas_Coord h) -{ - int i, r, g, b, a; - Evas_Object *o; - - r = graph->r; g = graph->g; b = graph->b; a = graph->a; - - if (graph->pos == 0) - { - if (starting) - for (i = 0; i < MAX_HIST; i++) - graph->history[i] = 0; - else - _reverse(graph->history, MAX_HIST); - - o = vg_add(pd->bg); - graph->blocks = eina_list_prepend(graph->blocks, o); - } - o = graph->blocks->data; - graph->history[graph->pos] = perc; - pd->pos = graph->pos; - vg_fill(o, pd, w, h, graph->history, r, g, b, a); - position_gr_list(graph->blocks, w, h, graph->pos); - - graph->pos += STEP; - if (graph->pos >= w) graph->pos = 0; -} - static void _mem_usage_feedback_cb(void *data, Ecore_Thread *thread EINA_UNUSED, void *msgdata) { - Evas_Coord w, h; Ui_Data *pd; meminfo_t *memory; - double ratio; pd = data; memory = msgdata; if (ecore_thread_check(thread)) return; - ratio = memory->total / 100.0; - if (ratio == 0.0) return; - _update_widgets(pd, memory); - - evas_object_geometry_get(pd->bg, NULL, NULL, &w, &h); - - eina_lock_take(&_mlock); - - _update_graph(&graphs[GR_USED], memory->used / ratio, pd, w, h); - _update_graph(&graphs[GR_CACHED], memory->cached / ratio, pd, w, h); - _update_graph(&graphs[GR_BUFFER], memory->buffered / ratio, pd, w, h); - _update_graph(&graphs[GR_SHARED], memory->shared / ratio, pd, w, h); - - if (starting) starting = 0; - eina_lock_release(&_mlock); -} - -static void -_graph_init(Graph *graph, int r, int g, int b, int a) -{ - memset(graph, 0, sizeof(Graph)); - graph->r = r; graph->g = g; graph->b = b, graph->a = a; -} - -static Evas_Object * -_graph_guide(Evas_Object *parent, int r, int g, int b, int a) -{ - Evas_Object *btn, *rec;; - - btn = elm_button_add(parent); - evas_object_show(btn); - - rec = evas_object_rectangle_add(parent); - evas_object_color_set(rec, r, g, b, a); - evas_object_size_hint_min_set(rec, ELM_SCALE_SIZE(16), ELM_SCALE_SIZE(16)); - evas_object_size_hint_max_set(rec, ELM_SCALE_SIZE(16), ELM_SCALE_SIZE(16)); - evas_object_show(rec); - elm_object_part_content_set(btn, "elm.swallow.content", rec); - - return btn; } static void @@ -369,22 +166,21 @@ _win_move_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info { Ui_Data *pd; Ui *ui; - Evas_Coord x = 0, y = 0; pd = data; ui = pd->ui; - evas_object_geometry_get(obj, &x, &y, NULL, NULL); - ui->mem.x = x; - ui->mem.y = y; + evas_object_geometry_get(obj, &ui->mem.x, &ui->mem.y, NULL, NULL); } static void _win_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) { + Ui *ui; Ui_Data *pd = data; - Ui *ui = pd->ui; + + ui = pd->ui; evisum_ui_config_save(ui); ecore_thread_cancel(pd->thread); @@ -393,31 +189,20 @@ _win_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, evas_object_del(obj); ui->mem.win = NULL; free(pd); - eina_lock_free(&_mlock); } static void _win_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) { Ui_Data *pd = data; - Ui *ui = pd->ui; - eina_lock_take(&_mlock); - - position_shrink_list((&graphs[GR_USED])->blocks); - position_shrink_list((&graphs[GR_CACHED])->blocks); - position_shrink_list((&graphs[GR_BUFFER])->blocks); - position_shrink_list((&graphs[GR_SHARED])->blocks); - - eina_lock_release(&_mlock); - - evisum_ui_config_save(ui); + evisum_ui_config_save(pd->ui); } void ui_win_memory_add(Ui *ui) { - Evas_Object *win, *lb, *bx, *tbl, *rec, *pb; + Evas_Object *win, *lb, *bx, *tbl, *pb; Evas_Object *fr; int i; meminfo_t memory; @@ -432,8 +217,6 @@ ui_win_memory_add(Ui *ui) if (!pd) return; pd->ui = ui; - eina_lock_new(&_mlock); - memset(&memory, 0, sizeof(memory)); system_memory_usage_get(&memory); @@ -445,27 +228,12 @@ ui_win_memory_add(Ui *ui) evisum_ui_background_random_add(win, evisum_ui_backgrounds_enabled_get()); - _graph_init(&graphs[GR_USED], COLOR_USED); - _graph_init(&graphs[GR_CACHED], COLOR_CACHED); - _graph_init(&graphs[GR_BUFFER], COLOR_BUFFER); - _graph_init(&graphs[GR_SHARED], COLOR_SHARED); - bx = elm_box_add(win); evas_object_size_hint_weight_set(bx, EXPAND, 0); evas_object_size_hint_align_set(bx, FILL, FILL); evas_object_show(bx); elm_object_content_set(win, bx); - pd->bg = rec = evas_object_rectangle_add(evas_object_evas_get(win)); - evas_object_size_hint_weight_set(rec, EXPAND, EXPAND); - evas_object_size_hint_align_set(rec, FILL, FILL); - evas_object_color_set(rec, 32, 32, 32, 255); - evas_object_size_hint_min_set(rec, 1, ELM_SCALE_SIZE(200)); - evas_object_size_hint_max_set(rec, MAX_HIST, ELM_SCALE_SIZE(480)); - evas_object_show(rec); - - elm_box_pack_end(bx, rec); - fr = elm_frame_add(win); evas_object_size_hint_weight_set(fr, EXPAND, EXPAND); evas_object_size_hint_align_set(fr, FILL, FILL); @@ -483,29 +251,21 @@ ui_win_memory_add(Ui *ui) lb = _label_mem(tbl, _("Used")); pd->used = pb = _progress_add(tbl); - rec = _graph_guide(tbl, COLOR_USED); - elm_table_pack(tbl, rec, 0, 1, 1, 1); elm_table_pack(tbl, lb, 1, 1, 1, 1); elm_table_pack(tbl, pb, 2, 1, 1, 1); lb = _label_mem(tbl, _("Cached")); pd->cached = pb = _progress_add(tbl); - rec = _graph_guide(tbl, COLOR_CACHED); - elm_table_pack(tbl, rec, 0, 2, 1, 1); elm_table_pack(tbl, lb, 1, 2, 1, 1); elm_table_pack(tbl, pb, 2, 2, 1, 1); lb = _label_mem(tbl, _("Buffered")); pd->buffered = pb = _progress_add(tbl); - rec = _graph_guide(tbl, COLOR_BUFFER); - elm_table_pack(tbl, rec, 0, 3, 1, 1); elm_table_pack(tbl, lb, 1, 3, 1, 1); elm_table_pack(tbl, pb, 2, 3, 1, 1); lb = _label_mem(tbl, _("Shared")); pd->shared = pb = _progress_add(tbl); - rec = _graph_guide(tbl, COLOR_SHARED); - elm_table_pack(tbl, rec, 0, 4, 1, 1); elm_table_pack(tbl, lb, 1, 4, 1, 1); elm_table_pack(tbl, pb, 2, 4, 1, 1);