netstar pushed a commit to branch master.

http://git.enlightenment.org/apps/evisum.git/commit/?id=489295737f5692b218cf044dc442102ffa8dd714

commit 489295737f5692b218cf044dc442102ffa8dd714
Author: Alastair Poole <nets...@gmail.com>
Date:   Tue Sep 8 15:27:37 2020 +0100

    cpu: nuke the poop
---
 src/bin/ui/ui_cpu.c | 500 ++++++++++------------------------------------------
 1 file changed, 90 insertions(+), 410 deletions(-)

diff --git a/src/bin/ui/ui_cpu.c b/src/bin/ui/ui_cpu.c
index 6a37bea..4aa7046 100644
--- a/src/bin/ui/ui_cpu.c
+++ b/src/bin/ui/ui_cpu.c
@@ -3,13 +3,6 @@
 #define COLOR_FG 0xff2f99ff
 #define COLOR_BG 0xff202020
 
-
-#define COLOR_HIGH     0xff26f226
-#define COLOR_MID_HIGH 0xfff2f226
-#define COLOR_MID      0xffe21212
-#define COLOR_MID_LOW  0xff471292
-#define COLOR_LOW      0xff2f99ff
-
 typedef enum {
     COLOR_0   =  0xff57bb8a,
     COLOR_5   =  0xff63b682,
@@ -34,41 +27,6 @@ typedef enum {
     COLOR_100 =  0xffdd776e,
 } Colors;
 
-typedef struct {
-   Ui          *ui;
-   int          cpu_id;
-
-   Evas_Object *bg;
-   Evas_Object *line;
-   Evas_Object *obj;
-   Evas_Object *btn;
-
-   Eina_Bool    enabled;
-   Eina_Bool    redraw;
-
-   int          freq;
-   int          freq_min;
-   int          freq_max;
-
-   int          pos;
-   double       value;
-   double       step;
-} Animate_Data;
-
-typedef struct {
-   Ecore_Animator *animator;
-   Animate_Data   *ad;
-   double         *value;
-   Evas_Object    *pb;
-   Evas_Object    *lbl;
-} Progress;
-
-static void
-loop_reset(Animate_Data *ad)
-{
-   ad->pos = ad->step = 0;
-}
-
 static int
 _core_color(int percent)
 {
@@ -96,339 +54,6 @@ _core_color(int percent)
    return COLOR_0;
 }
 
-static Eina_Bool
-_bg_fill(Animate_Data *ad)
-{
-   uint32_t *pixels;
-   Evas_Coord x, y, w, h;
-
-   evas_object_geometry_get(ad->bg, NULL, NULL, &w, &h);
-   pixels = evas_object_image_data_get(ad->obj, EINA_TRUE);
-   if (!pixels) return EINA_FALSE;
-   for (y = 0; y < h; y++)
-     {
-        for (x = 0; x < w; x++)
-          {
-             *(pixels++) = COLOR_BG;
-          }
-     }
-   ad->redraw = EINA_FALSE;
-   return EINA_TRUE;
-}
-
-static int
-_color_rng(int fr, int fr_min, int fr_max)
-{
-   int rng, n;
-
-   rng = fr_max - fr_min;
-   n = fr - fr_min;
-   n = (n * 100) / rng;
-
-   return _core_color(n);
-}
-
-static int
-_color(Animate_Data *ad)
-{
-   if (ad->freq != -1 && ad->freq_min && ad->freq_max)
-     {
-        return _color_rng(ad->freq, ad->freq_min, ad->freq_max);
-     }
-
-   return COLOR_FG;
-}
-
-static Eina_Bool
-animate(void *data)
-{
-   uint32_t *pixels;
-   Evas_Object *line, *obj, *bg;
-   Evas_Coord x, y, w, h, fill_y;
-   double value;
-   Animate_Data *ad = data;
-
-   bg = ad->bg; line = ad->line; obj = ad->obj;
-
-   evas_object_geometry_get(bg, &x, &y, &w, &h);
-   evas_object_image_size_set(obj, w, h);
-
-   evas_object_move(line, x + w - ad->pos, y);
-   evas_object_resize(line, 1, h);
-   if (ad->enabled)
-     evas_object_show(line);
-   else
-     evas_object_hide(line);
-
-   if (ad->redraw)
-     {
-        _bg_fill(ad);
-        return EINA_TRUE;
-     }
-
-   pixels = evas_object_image_data_get(obj, EINA_TRUE);
-   if (!pixels) return EINA_TRUE;
-
-   value = ad->value > 0 ? ad->value : 1.0;
-
-   fill_y = h - (int) ((double)(h / 100.0) * value);
-
-   for (y = 0; ad->enabled && y < h; y++)
-     {
-        for (x = 0; x < w; x++)
-          {
-             if (x == (w - ad->pos))
-               {
-                   *(pixels) = COLOR_BG;
-               }
-             if ((x == (w - ad->pos)) && (y >= fill_y))
-               {
-                  if (y % 2)
-                    *(pixels) = _color(ad);
-               }
-             pixels++;
-          }
-     }
-
-   ad->step += (double) (w * ecore_animator_frametime_get()) / 60.0;
-   ad->pos = ad->step;
-
-   if (ad->pos >= w)
-     loop_reset(ad);
-
-   return EINA_TRUE;
-}
-
-static void
-_anim_resize_cb(void *data, Evas_Object *obj EINA_UNUSED,
-                void *event_info EINA_UNUSED)
-{
-   Animate_Data *ad = data;
-
-   ad->redraw = EINA_TRUE;
-   loop_reset(ad);
-
-   evas_object_hide(ad->line);
-}
-
-static void
-_anim_move_cb(void *data, Evas_Object *obj EINA_UNUSED,
-              void *event_info EINA_UNUSED)
-{
-   Animate_Data *ad = data;
-
-   evas_object_hide(ad->line);
-}
-
-static void
-_btn_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED,
-                void *event_info EINA_UNUSED)
-{
-   Evas_Object *rect;
-   Animate_Data *ad = data;
-
-   ad->enabled = !ad->enabled;
-
-   rect = elm_object_part_content_get(ad->btn, "elm.swallow.content");
-   if (!ad->enabled)
-     evas_object_color_set(rect, 0, 0, 0, 0);
-   else
-     evas_object_color_set(rect, 47, 153, 255, 255);
-}
-
-static void
-_core_times_cb(void *data, Ecore_Thread *thread)
-{
-   Progress *progress;
-   cpu_core_t **cores;
-   Eina_List *l;
-   Ui *ui;
-   int ncpu, min = 0, max = 0;
-   Eina_Bool cpu_freq = EINA_FALSE;
-
-   ui = data;
-
-   if (!system_cpu_frequency_min_max_get(&min, &max))
-     cpu_freq = EINA_TRUE;
-
-   for (int i = 0; !ecore_thread_check(thread); i = 0)
-     {
-        cores = system_cpu_usage_get(&ncpu);
-        EINA_LIST_FOREACH(ui->cpu_list, l, progress)
-          {
-             *progress->value = cores[i]->percent;
-             ecore_thread_main_loop_begin();
-
-             if (cpu_freq)
-               {
-                  int freq = system_cpu_n_frequency_get(progress->ad->cpu_id);
-
-                  if (freq > 1000000)
-                    elm_object_text_set(progress->lbl, 
eina_slstr_printf("%1.1f GHz", (double) freq / 1000000.0));
-                  else
-                    elm_object_text_set(progress->lbl, eina_slstr_printf("%d 
MHz",  freq / 1000));
-
-                  progress->ad->freq = freq;
-                  progress->ad->freq_min = min;
-                  progress->ad->freq_max = max;
-               }
-             elm_progressbar_value_set(progress->pb, cores[i]->percent / 100);
-             ecore_thread_main_loop_end();
-             free(cores[i++]);
-          }
-        free(cores);
-     }
-}
-
-static void
-_win_del_cb(void *data, Evas_Object *obj,
-            void *event_info EINA_UNUSED)
-{
-   Progress *progress;
-   Ui *ui = data;
-
-   ecore_thread_cancel(ui->thread_cpu);
-
-   EINA_LIST_FREE(ui->cpu_list, progress)
-     {
-        ecore_animator_del(progress->animator);
-        free(progress->ad);
-        free(progress);
-     }
-
-   ecore_thread_wait(ui->thread_cpu, 0.1);
-   evas_object_del(obj);
-   ui->win_cpu = NULL;
-}
-
-void
-_graphs(Ui *ui, Evas_Object *parent)
-{
-   Evas_Object *frame, *bg, *line, *pb, *tbl, *cbox, *sbox, *lbl, *lbox, *btn, 
*rect;
-   Evas_Object *obj;
-   Evas_Object *box = parent;
-
-   int cpu_count = system_cpu_online_count_get();
-   for (int i = 0; i < cpu_count; i++)
-     {
-        lbox = elm_box_add(box);
-        evas_object_size_hint_align_set(lbox, FILL, FILL);
-        evas_object_size_hint_weight_set(lbox, EXPAND, EXPAND);
-        evas_object_show(lbox);
-        elm_box_horizontal_set(lbox, EINA_TRUE);
-
-        cbox = elm_box_add(box);
-        evas_object_size_hint_align_set(cbox, FILL, FILL);
-        evas_object_size_hint_weight_set(cbox, 0.1, EXPAND);
-        evas_object_show(cbox);
-
-        sbox = elm_box_add(box);
-        evas_object_size_hint_align_set(sbox, FILL, FILL);
-        evas_object_size_hint_weight_set(sbox, EXPAND, EXPAND);
-        elm_box_horizontal_set(sbox, EINA_TRUE);
-        evas_object_show(sbox);
-
-        btn = elm_button_add(box);
-        evas_object_show(btn);
-
-        rect = evas_object_rectangle_add(evas_object_evas_get(box));
-        evas_object_size_hint_min_set(rect, 16 * elm_config_scale_get(),
-                        16 * elm_config_scale_get());
-        evas_object_color_set(rect, 47, 153, 255, 255);
-        evas_object_show(rect);
-        elm_object_part_content_set(btn, "elm.swallow.content", rect);
-
-        frame = elm_frame_add(box);
-        evas_object_size_hint_align_set(frame, FILL, FILL);
-        evas_object_size_hint_weight_set(frame, 0, EXPAND);
-        evas_object_show(frame);
-        elm_object_style_set(frame, "pad_small");
-
-        pb = elm_progressbar_add(frame);
-        evas_object_size_hint_align_set(pb, FILL, FILL);
-        evas_object_size_hint_weight_set(pb, 0.2, EXPAND);
-        elm_progressbar_span_size_set(pb, 1.0);
-        elm_progressbar_unit_format_set(pb, "%1.2f%%");
-        evas_object_show(pb);
-
-        lbl = elm_label_add(box);
-        evas_object_size_hint_align_set(lbl, 0.5, 0.0);
-        evas_object_size_hint_weight_set(lbl, EXPAND, EXPAND);
-        evas_object_show(lbl);
-
-        elm_box_pack_end(sbox, btn);
-        elm_box_pack_end(sbox, pb);
-        elm_box_pack_end(cbox, sbox);
-        elm_box_pack_end(cbox, lbl);
-        elm_box_pack_end(lbox, cbox);
-
-        tbl = elm_table_add(box);
-        evas_object_size_hint_align_set(tbl, FILL, FILL);
-        evas_object_size_hint_weight_set(tbl, EXPAND, EXPAND);
-        evas_object_show(tbl);
-
-        bg = evas_object_rectangle_add(evas_object_evas_get(box));
-        evas_object_size_hint_align_set(bg, FILL, FILL);
-        evas_object_size_hint_weight_set(bg, EXPAND, EXPAND);
-        evas_object_show(bg);
-        evas_object_size_hint_min_set(bg, 1, 60);
-
-        line = evas_object_rectangle_add(evas_object_evas_get(bg));
-        evas_object_size_hint_align_set(line, FILL, FILL);
-        evas_object_size_hint_weight_set(line, EXPAND, EXPAND);
-        evas_object_color_set(line, 255, 47, 153, 255);
-        evas_object_size_hint_max_set(line, 1, -1);
-        evas_object_show(line);
-
-        obj = evas_object_image_add(evas_object_evas_get(bg));
-        evas_object_size_hint_align_set(obj, FILL, FILL);
-        evas_object_size_hint_weight_set(obj, EXPAND, EXPAND);
-        evas_object_image_filled_set(obj, EINA_TRUE);
-        evas_object_image_colorspace_set(obj, EVAS_COLORSPACE_ARGB8888);
-        evas_object_show(obj);
-
-        elm_table_pack(tbl, bg, 0, 1, 1, 1);
-        elm_table_pack(tbl, obj, 0, 1, 1, 1);
-        elm_table_pack(tbl, line, 0, 1, 1, 1);
-
-        elm_box_pack_end(lbox, tbl);
-        elm_object_content_set(frame, lbox);
-        elm_box_pack_end(box, frame);
-
-        Animate_Data *ad = calloc(1, sizeof(Animate_Data));
-        if (!ad) return;
-
-        ad->bg = bg;
-        ad->obj = obj;
-        ad->line = line;
-        ad->enabled = EINA_TRUE;
-        ad->btn = btn;
-        ad->cpu_id = i;
-        ad->ui = ui;
-        ad->redraw = EINA_TRUE;
-
-        evas_object_smart_callback_add(btn, "clicked", _btn_clicked_cb, ad);
-        evas_object_smart_callback_add(tbl, "resize", _anim_resize_cb, ad);
-        evas_object_smart_callback_add(tbl, "move", _anim_move_cb, ad);
-
-        Progress *progress = calloc(1, sizeof(Progress));
-        if (progress)
-          {
-             progress->pb = pb;
-             progress->lbl = lbl;
-             progress->value = &ad->value;
-             progress->animator = ecore_animator_add(animate, ad);
-             progress->ad = ad;
-
-             ui->cpu_list = eina_list_append(ui->cpu_list, progress);
-          }
-     }
-
-   evas_object_smart_callback_add(ui->win_cpu, "delete,request", _win_del_cb, 
ui);
-
-   ui->thread_cpu = ecore_thread_run(_core_times_cb, NULL, NULL, ui);
-}
-
 typedef struct {
    Ecore_Animator *animator;
    Ui             *ui;
@@ -437,6 +62,9 @@ typedef struct {
    Evas_Object    *line;
    Evas_Object    *obj;
 
+   Evas_Object    *guide;
+   Evas_Object    *colors;
+
    Eina_Bool       enabled;
    Eina_Bool       redraw;
 
@@ -467,9 +95,12 @@ _core_alpha(int percent, int fr, int fr_max, int fr_min)
    int rng, n;
    int color;
 
-   rng = fr_max - fr_min;
-   n = fr - fr_min;
-   fade = (100.0 - ((n * 100) / rng)) / 100.0;
+   if (fr)
+     {
+        rng = fr_max - fr_min;
+        n = fr - fr_min;
+        fade = (100.0 - ((n * 100) / rng)) / 100.0;
+     }
 
    color = _core_color(percent);
    r = (color >> 16) & 0xff;
@@ -477,10 +108,13 @@ _core_alpha(int percent, int fr, int fr_max, int fr_min)
    b = (color & 0xff);
    a = 0xff;
 
-   r += (percent / 100.0) * 0xff;
-   if (r >= 255) r = 255;
-   b += fade * 0xff;
-   if (b >= 255) b = 255;
+   if (fr)
+     {
+        r += (percent / 100.0) * 0xff;
+        if (r >= 255) r = 255;
+        b += fade * 0xff;
+        if (b >= 255) b = 255;
+     }
 
    color = (a << 24) + (r << 16) + (g << 8) + b;
 
@@ -488,7 +122,7 @@ _core_alpha(int percent, int fr, int fr_max, int fr_min)
 }
 
 static void
-_core_times_complex_cb(void *data, Ecore_Thread *thread)
+_core_times_cb(void *data, Ecore_Thread *thread)
 {
    Animate *ad;
    int ncpu;
@@ -518,7 +152,7 @@ _core_times_complex_cb(void *data, Ecore_Thread *thread)
 }
 
 static void
-_win_complex_del_cb(void *data, Evas_Object *obj,
+_win_del_cb(void *data, Evas_Object *obj,
                     void *event_info EINA_UNUSED)
 {
    Animate *ad = data;
@@ -540,13 +174,13 @@ _win_complex_del_cb(void *data, Evas_Object *obj,
 }
 
 static void
-_complex_reset(Animate *ad)
+_reset(Animate *ad)
 {
    ad->pos = ad->step = 0;
 }
 
 static Eina_Bool
-_bg_complex_fill(Animate *ad)
+_bg_fill(Animate *ad)
 {
    uint32_t *pixels;
    Evas_Coord x, y, w, h;
@@ -568,7 +202,7 @@ _bg_complex_fill(Animate *ad)
 }
 
 static Eina_Bool
-_animate_complex(void *data)
+_animate(void *data)
 {
    uint32_t *pixels;
    Evas_Object *line, *obj, *bg;
@@ -591,7 +225,7 @@ _animate_complex(void *data)
 
    if (ad->redraw)
      {
-        _bg_complex_fill(ad);
+        _bg_fill(ad);
         return EINA_TRUE;
      }
 
@@ -624,25 +258,44 @@ _animate_complex(void *data)
    ad->pos = ad->step;
 
    if (ad->pos >= w)
-     _complex_reset(ad);
+     _reset(ad);
 
    return EINA_TRUE;
 }
 
 static void
-_anim_complex_resize_cb(void *data, Evas_Object *obj EINA_UNUSED,
+_anim_resize_cb(void *data, Evas_Object *obj EINA_UNUSED,
                 void *event_info EINA_UNUSED)
 {
+   Evas_Coord w, h, x, y;
+   uint32_t *pixels;
    Animate *ad = data;
 
    ad->redraw = EINA_TRUE;
-   _complex_reset(ad);
-
+   _reset(ad);
    evas_object_hide(ad->line);
+
+   h = 15;
+   evas_object_size_hint_min_set(ad->colors, -1, h);
+   evas_object_geometry_get(ad->bg, NULL, NULL, &w, NULL);
+   evas_object_image_size_set(ad->colors, w, h);
+   evas_object_image_data_update_add(ad->colors, 0, 0, w, h);
+
+   pixels = evas_object_image_data_get(ad->colors, EINA_TRUE);
+   if (!pixels) return;
+
+   for (y = 0; y < h; y++)
+     {
+        for (x = 0; x < w; x++)
+          {
+             int n = (100.0 / w) * x;
+             *(pixels++) = _core_alpha(n, 0, 0, 0);
+          }
+     }
 }
 
 static void
-_anim_complex_move_cb(void *data, Evas_Object *obj EINA_UNUSED,
+_anim_move_cb(void *data, Evas_Object *obj EINA_UNUSED,
               void *event_info EINA_UNUSED)
 {
    Animate *ad = data;
@@ -651,9 +304,10 @@ _anim_complex_move_cb(void *data, Evas_Object *obj 
EINA_UNUSED,
 }
 
 static void
-_complex(Ui *ui, Evas_Object *parent)
+_graph(Ui *ui, Evas_Object *parent)
 {
    Evas_Object *frame, *tbl, *box, *bg, *obj, *line;
+   Evas_Object *fr, *hbx, *bx, *guide, *colors;
 
    box = parent;
 
@@ -661,7 +315,7 @@ _complex(Ui *ui, Evas_Object *parent)
    evas_object_size_hint_align_set(frame, FILL, FILL);
    evas_object_size_hint_weight_set(frame, EXPAND, EXPAND);
    evas_object_show(frame);
-   elm_object_style_set(frame, "pad_small");
+   elm_object_text_set(frame, _("CPU % / Freq"));
 
    tbl = elm_table_add(box);
    evas_object_size_hint_align_set(tbl, FILL, FILL);
@@ -687,12 +341,41 @@ _complex(Ui *ui, Evas_Object *parent)
    evas_object_image_colorspace_set(obj, EVAS_COLORSPACE_ARGB8888);
    evas_object_show(obj);
 
-   elm_table_pack(tbl, bg, 0, 1, 1, 1);
-   elm_table_pack(tbl, obj, 0, 1, 1, 1);
-   elm_table_pack(tbl, line, 0, 1, 1, 1);
-   elm_object_content_set(frame, tbl);
+   elm_table_pack(tbl, bg, 0, 0, 1, 1);
+   elm_table_pack(tbl, obj, 0, 0, 1, 1);
+   elm_table_pack(tbl, line, 0, 0, 1, 1);
+
+   bx = elm_box_add(box);
+   evas_object_size_hint_align_set(bx, FILL, FILL);
+   evas_object_size_hint_weight_set(bx, EXPAND, EXPAND);
+   evas_object_show(bx);
+   elm_box_pack_end(bx, tbl);
+
+   hbx = elm_box_add(box);
+   evas_object_size_hint_align_set(hbx, FILL, FILL);
+   evas_object_size_hint_weight_set(hbx, EXPAND, 0);
+   elm_box_horizontal_set(hbx, 1);
+   evas_object_show(hbx);
+
+   fr = elm_frame_add(box);
+   evas_object_size_hint_align_set(fr, FILL, FILL);
+   evas_object_size_hint_weight_set(fr, EXPAND, 0);
+   evas_object_show(fr);
+   elm_object_text_set(fr, _("Increasing %"));
+   elm_object_content_set(fr, hbx);
+
+   colors = evas_object_image_add(evas_object_evas_get(fr));
+   evas_object_size_hint_align_set(colors, FILL, FILL);
+   evas_object_size_hint_weight_set(colors, EXPAND, EXPAND);
+   evas_object_image_filled_set(colors, EINA_TRUE);
+   evas_object_image_colorspace_set(colors, EVAS_COLORSPACE_ARGB8888);
+   evas_object_show(colors);
+   elm_box_pack_end(hbx, colors);
+
+   elm_object_content_set(frame, bx);
 
    elm_box_pack_end(box, frame);
+   elm_box_pack_end(box, fr);
 
    Animate *ad = calloc(1, sizeof(Animate));
    if (!ad) return;
@@ -705,6 +388,8 @@ _complex(Ui *ui, Evas_Object *parent)
    ad->redraw = EINA_TRUE;
    ad->cpu_count = system_cpu_online_count_get();
 
+   ad->colors = colors;
+
    for (int i = 0; i < ad->cpu_count; i++)
      {
         Core *core = calloc(1, sizeof(Core));
@@ -717,20 +402,19 @@ _complex(Ui *ui, Evas_Object *parent)
 
    evas_object_size_hint_min_set(bg, 1, 2 * ad->cpu_count);
 
-   evas_object_smart_callback_add(tbl, "resize", _anim_complex_resize_cb, ad);
-   evas_object_smart_callback_add(tbl, "move", _anim_complex_move_cb, ad);
-   evas_object_smart_callback_add(ui->win_cpu, "delete,request", 
_win_complex_del_cb, ad);
+   evas_object_smart_callback_add(tbl, "resize", _anim_resize_cb, ad);
+   evas_object_smart_callback_add(tbl, "move", _anim_move_cb, ad);
+   evas_object_smart_callback_add(ui->win_cpu, "delete,request", _win_del_cb, 
ad);
 
-   ad->animator = ecore_animator_add(_animate_complex, ad);
+   ad->animator = ecore_animator_add(_animate, ad);
 
-   ui->thread_cpu = ecore_thread_run(_core_times_complex_cb, NULL, NULL, ad);
+   ui->thread_cpu = ecore_thread_run(_core_times_cb, NULL, NULL, ad);
 }
 
 void
 ui_win_cpu_add(Ui *ui)
 {
    Evas_Object *win, *box, *scroller;
-   int cpu_count;
 
    if (ui->win_cpu) return;
 
@@ -752,11 +436,7 @@ ui_win_cpu_add(Ui *ui)
    evas_object_size_hint_weight_set(box, EXPAND, EXPAND);
    evas_object_show(box);
 
-   cpu_count = system_cpu_online_count_get();
-   if (cpu_count > 4)
-     _complex(ui, box);
-   else
-     _graphs(ui, box);
+   _graph(ui, box);
 
    elm_object_content_set(scroller, box);
    elm_object_content_set(win, scroller);

-- 


Reply via email to