netstar pushed a commit to branch master.

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

commit ca4f9357ca44053f83770a977da3698b97b157f3
Author: Alastair Poole <nets...@gmail.com>
Date:   Thu Jan 21 09:33:05 2021 +0000

    theady: Ensure our overview is accurate.
---
 src/bin/ui/ui_cpu.c          |   2 +-
 src/bin/ui/ui_process_view.c | 121 ++++++++++++++++++++++++-------------------
 2 files changed, 70 insertions(+), 53 deletions(-)

diff --git a/src/bin/ui/ui_cpu.c b/src/bin/ui/ui_cpu.c
index f21a01f..402b0af 100644
--- a/src/bin/ui/ui_cpu.c
+++ b/src/bin/ui/ui_cpu.c
@@ -74,7 +74,7 @@ static const Color_Point temp_colormap_in[] = {
    { 256, 0xffdd776e }
 };
 #define BAR_HEIGHT 2
-#define COLORS_HEIGHT 60
+#define COLORS_HEIGHT 32
 
 // stored colormap tables
 static unsigned int cpu_colormap[256];
diff --git a/src/bin/ui/ui_process_view.c b/src/bin/ui/ui_process_view.c
index 8bb528a..c967ea7 100644
--- a/src/bin/ui/ui_process_view.c
+++ b/src/bin/ui/ui_process_view.c
@@ -98,6 +98,7 @@ static const Color_Point cpu_colormap_in[] = {
 #define ARGB(a, r, g, b) (((a) << 24) | ((r) << 16) | ((g) << 8) | (b))
 
 #define BAR_HEIGHT 16
+
 static void
 _color_init(const Color_Point *col_in, unsigned int n, unsigned int *col)
 {
@@ -106,7 +107,7 @@ _color_init(const Color_Point *col_in, unsigned int n, 
unsigned int *col)
    unsigned int a1, r1, g1, b1, v1;
    unsigned int a2, r2, g2, b2, v2;
 
-   // wal colormap_in until colormap table is full
+   // walk colormap_in until colormap table is full
    for (pos = 0, val = 0; pos < n; pos++)
      {
         // get first color and value position
@@ -140,12 +141,19 @@ _color_init(const Color_Point *col_in, unsigned int n, 
unsigned int *col)
      }
 }
 
+typedef struct
+{
+   long cpu_time;
+   long cpu_time_prev;
+} Thread_Cpu_Info;
+
 typedef struct
 {
    int     tid;
    char   *name;
    char   *state;
    int     cpu_id;
+   long    cpu_time;
    double  cpu_usage;
 } Thread_Info;
 
@@ -157,6 +165,7 @@ _thread_info_new(Proc_Info *thr, double cpu_usage)
 
    t->tid = thr->tid;
    t->name = strdup(thr->thread_name);
+   t->cpu_time = thr->cpu_time;
    t->state = strdup(thr->state);
    t->cpu_id = thr->cpu_id;
    t->cpu_usage = cpu_usage;
@@ -237,6 +246,14 @@ _item_column_add(Evas_Object *tbl, const char *text, int 
col)
    return lb;
 }
 
+static void
+_hash_free_cb(void *data)
+{
+   Thread_Cpu_Info *inf = data;
+   if (inf)
+     free(inf);
+}
+
 static Evas_Object *
 _item_create(Evas_Object *parent)
 {
@@ -258,7 +275,7 @@ _item_create(Evas_Object *parent)
    pb = elm_progressbar_add(parent);
    evas_object_size_hint_align_set(pb, FILL, FILL);
    evas_object_size_hint_weight_set(pb, EXPAND, EXPAND);
-   elm_progressbar_unit_format_set(pb, "%1.1f %%");
+   elm_progressbar_unit_format_set(pb, "%1.0f %%");
    evas_object_data_set(tbl, "cpu_usage", pb);
    rec = evas_object_rectangle_add(tbl);
    evas_object_data_set(pb, "rect", rec);
@@ -322,9 +339,19 @@ _content_get(void *data, Evas_Object *obj, const char 
*source)
    rec = evas_object_data_get(lb, "rect");
    evas_object_size_hint_min_set(rec, w, 1);
 
-   evas_object_geometry_get(pd->tab_thread_cpu_usage, NULL, NULL, &w, NULL);
+   Thread_Cpu_Info *inf;
    pb = evas_object_data_get(it->obj, "cpu_usage");
-   elm_progressbar_value_set(pb, th->cpu_usage / 100.0);
+   const char *key = eina_slstr_printf("%s:%d", th->name, th->tid);
+   if ((inf = eina_hash_find(pd->hash_cpu_times, key)))
+     {
+        if (inf->cpu_time_prev)
+          {
+             double val = (inf->cpu_time - inf->cpu_time_prev) / 100.0;
+             elm_progressbar_value_set(pb, val);
+          }
+        inf->cpu_time_prev = th->cpu_time;
+     }
+   evas_object_geometry_get(pd->tab_thread_cpu_usage, NULL, NULL, &w, NULL);
    evas_object_show(pb);
    rec = evas_object_data_get(pb, "rect");
    evas_object_size_hint_min_set(rec, w, 1);
@@ -423,14 +450,6 @@ _sort_by_tid(const void *p1, const void *p2)
    return inf1->tid - inf2->tid;
 }
 
-static void
-_hash_free_cb(void *data)
-{
-   long *cpu_time = data;
-   if (cpu_time)
-     free(cpu_time);
-}
-
 static void
 _thread_info_set(Ui_Data *pd, Proc_Info *proc)
 {
@@ -471,6 +490,36 @@ _thread_info_set(Ui_Data *pd, Proc_Info *proc)
      }
 }
 
+static void
+_threads_cpu_usage(Ui_Data *pd, Proc_Info *proc)
+{
+   Eina_List *l;
+   Proc_Info *p;
+
+   if (!pd->hash_cpu_times)
+     pd->hash_cpu_times = eina_hash_string_superfast_new(_hash_free_cb);
+
+   EINA_LIST_FOREACH(proc->threads, l, p)
+     {
+        Thread_Cpu_Info *inf;
+        double cpu_usage = 0.0;
+        const char *key = eina_slstr_printf("%s:%d", p->thread_name, p->tid);
+
+        if ((inf = eina_hash_find(pd->hash_cpu_times, key)) == NULL)
+          {
+             inf = calloc(1, sizeof(Thread_Cpu_Info));
+             inf->cpu_time = p->cpu_time;
+             eina_hash_add(pd->hash_cpu_times, key, inf);
+          }
+        else
+          {
+             cpu_usage = (double) (p->cpu_time - inf->cpu_time) * 10;
+             inf->cpu_time = p->cpu_time;
+          }
+        pd->graph.cores[p->cpu_id] += cpu_usage;
+     }
+}
+
 static char *
 _time_string(int64_t epoch)
 {
@@ -664,16 +713,15 @@ _graph_update(Ui_Data *pd, Proc_Info *proc)
              for (x = 0; x < (w - 1); x++)
                pix[x] = pd->graph.cpu_colormap[0];
           }
-       else
+        else
           {
              pix = &(pixels[y * (stride / 4)]);
-            for (x = 0; x < (w - 1); x++) pix[x] = pix[x + 1];
+             for (x = 0; x < (w - 1); x++) pix[x] = pix[x + 1];
           }
-       unsigned int c1;
-       c1 = pd->graph.cpu_colormap[pd->graph.cores[y] & 0xff];
-       pix = &(pixels[y * (stride / 4)]);
-       pix[x] = c1;
-
+        unsigned int c1;
+        c1 = pd->graph.cpu_colormap[pd->graph.cores[y] & 0xff];
+        pix = &(pixels[y * (stride / 4)]);
+        pix[x] = c1;
      }
 
    evas_object_image_data_set(obj, pixels);
@@ -739,37 +787,6 @@ _proc_gone(Ui_Data *pd)
    pd->thread = NULL;
 }
 
-static void
-_threads_cpu_usage(Ui_Data *pd, Proc_Info *proc)
-{
-   Eina_List *l;
-   Proc_Info *p;
-
-   if (!pd->hash_cpu_times)
-     pd->hash_cpu_times = eina_hash_string_superfast_new(_hash_free_cb);
-
-   EINA_LIST_FOREACH(proc->threads, l, p)
-     {
-        long *cpu_time, *cpu_time_prev;
-        double cpu_usage = 0.0;
-        const char *key = eina_slstr_printf("%s:%d", p->thread_name, p->tid);
-
-        if ((cpu_time_prev = eina_hash_find(pd->hash_cpu_times, key)) == NULL)
-          {
-             cpu_time = malloc(sizeof(long));
-             *cpu_time = p->cpu_time;
-             eina_hash_add(pd->hash_cpu_times, key, cpu_time);
-          }
-        else
-          {
-             cpu_usage = (double) (p->cpu_time - *cpu_time_prev) * 10;
-             *cpu_time_prev = p->cpu_time;
-          }
-       p->cpu_usage = cpu_usage;
-       pd->graph.cores[p->cpu_id] += cpu_usage;
-     }
-}
-
 static void
 _proc_info_feedback_cb(void *data, Ecore_Thread *thread, void *msg)
 {
@@ -793,9 +810,9 @@ _proc_info_feedback_cb(void *data, Ecore_Thread *thread, 
void *msg)
 
    if (pd->poll_count != 0 && (pd->poll_count % 10))
      {
-       _graph_update(pd, proc);
+        _graph_update(pd, proc);
         proc_info_free(proc);
-       pd->poll_count++;
+        pd->poll_count++;
         return;
      }
 

-- 


Reply via email to