netstar pushed a commit to branch master.

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

commit ad7ab21ae5e8b47c7edb29ee146e2d22e926ca09
Author: Alastair Poole <nets...@gmail.com>
Date:   Wed Jun 24 13:11:10 2020 +0100

    cpu: update more frequently
---
 src/bin/ui/ui.c     | 10 +++++++--
 src/bin/ui/ui.h     |  1 +
 src/bin/ui/ui_cpu.c | 64 ++++++++++++++++++++++++++++++++++++++---------------
 src/bin/ui/ui_cpu.h |  4 ----
 4 files changed, 55 insertions(+), 24 deletions(-)

diff --git a/src/bin/ui/ui.c b/src/bin/ui/ui.c
index ce62848..0319f4e 100644
--- a/src/bin/ui/ui.c
+++ b/src/bin/ui/ui.c
@@ -1407,6 +1407,9 @@ evisum_ui_shutdown(Ui *ui)
    if (ui->thread_system)
      ecore_thread_cancel(ui->thread_system);
 
+   if (ui->thread_cpu)
+     ecore_thread_cancel(ui->thread_cpu);
+
    if (ui->thread_process)
      ecore_thread_cancel(ui->thread_process);
 
@@ -1416,6 +1419,9 @@ evisum_ui_shutdown(Ui *ui)
    if (ui->thread_process)
      ecore_thread_wait(ui->thread_process, 1.0);
 
+   if (ui->thread_cpu)
+     ecore_thread_wait(ui->thread_cpu, 1.0);
+
    _proc_pid_cpu_times_free(ui);
 
    if (ui->cpu_list)
@@ -1485,7 +1491,6 @@ _system_info_all_poll_feedback_cb(void *data, 
Ecore_Thread *thread, void *msg)
    if (ecore_thread_check(thread))
      goto out;
 
-   ui_tab_cpu_update(ui, info);
    ui_tab_memory_update(ui, info);
    ui_tab_disk_update(ui);
    ui_tab_misc_update(ui, info);
@@ -1547,8 +1552,9 @@ _ui_init(Evas_Object *parent)
    ui->sort_type = SORT_BY_PID;
    ui->selected_pid = -1;
    ui->program_pid = getpid();
-   ui->disk_visible = ui->cpu_visible = EINA_TRUE;
+   ui->disk_visible = EINA_TRUE;
    ui->mem_visible = ui->misc_visible = EINA_TRUE;
+   ui->cpu_visible = EINA_FALSE;
    ui->cpu_times = NULL;
    ui->cpu_list = NULL;
 
diff --git a/src/bin/ui/ui.h b/src/bin/ui/ui.h
index af65ec8..026506d 100644
--- a/src/bin/ui/ui.h
+++ b/src/bin/ui/ui.h
@@ -83,6 +83,7 @@ typedef struct Ui
 
    Ecore_Thread    *thread_system;
    Ecore_Thread    *thread_process;
+   Ecore_Thread    *thread_cpu;
 
    Ecore_Timer     *timer_pid;
    pid_t           selected_pid;
diff --git a/src/bin/ui/ui_cpu.c b/src/bin/ui/ui_cpu.c
index 2db352a..6e938f1 100644
--- a/src/bin/ui/ui_cpu.c
+++ b/src/bin/ui/ui_cpu.c
@@ -8,6 +8,7 @@ typedef struct {
    Evas_Object *line;
    Evas_Object *obj;
    Evas_Object *btn;
+   Ui          *ui;
    Eina_Bool    enabled;
    int          pos;
    int          cpu_id;
@@ -45,6 +46,8 @@ animator(void *data EINA_UNUSED)
    Evas_Coord x, y, w, h;
    Animation *anim = data;
 
+   if (!anim->ui->cpu_visible) return EINA_TRUE;
+
    bg = anim->bg; line = anim->line; obj = anim->obj;
 
    evas_object_geometry_get(bg,  &x, &y, &w, &h);
@@ -110,6 +113,45 @@ _btn_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED,
      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, i;
+
+   ui = data;
+   while (1)
+     {
+        if (ecore_thread_check(thread))
+          break;
+        if (!ui->cpu_visible)
+          {
+             usleep(1000000);
+             continue;
+          }
+        i = 0;
+        cores = system_cpu_usage_get(&ncpu);
+        EINA_LIST_FOREACH(ui->cpu_list, l, progress)
+          {
+             if (!cores || !cores[i])
+               {
+                  ++i;
+                  continue;
+               }
+             *progress->value = cores[i]->percent;
+             ecore_thread_main_loop_begin();
+             elm_progressbar_value_set(progress->pb, cores[i++]->percent / 
100);
+             ecore_thread_main_loop_end();
+          }
+        for (i = 0; i < ncpu; i++)
+          free(cores[i]);
+        free(cores);
+     }
+}
+
 void
 ui_tab_cpu_add(Ui *ui)
 {
@@ -215,6 +257,8 @@ ui_tab_cpu_add(Ui *ui)
         anim->enabled = EINA_TRUE;
         anim->btn = btn;
         anim->cpu_id = i;
+        anim->ui = ui;
+
         progress->value = &anim->value;
         evas_object_smart_callback_add(btn, "clicked", _btn_clicked_cb, anim);
         ecore_animator_add(animator, anim);
@@ -229,24 +273,8 @@ ui_tab_cpu_add(Ui *ui)
         ui->cpu_list = eina_list_append(ui->cpu_list, progress);
      }
 
-   elm_box_pack_end(hbox, box);
-}
+   ui->thread_cpu = ecore_thread_run(_core_times_cb, NULL, NULL, ui);
 
-void
-ui_tab_cpu_update(Ui *ui, Sys_Info *info)
-{
-   Eina_List *l;
-   Progress *progress;
-   int i = 0;
-
-   if (!ui->cpu_visible)
-     return;
-
-   EINA_LIST_FOREACH(ui->cpu_list, l, progress)
-     {
-        *progress->value = info->cores[i]->percent;
-        elm_progressbar_value_set(progress->pb, info->cores[i]->percent / 100);
-        ++i;
-     }
+   elm_box_pack_end(hbox, box);
 }
 
diff --git a/src/bin/ui/ui_cpu.h b/src/bin/ui/ui_cpu.h
index 6a29c9d..e69fe7d 100644
--- a/src/bin/ui/ui_cpu.h
+++ b/src/bin/ui/ui_cpu.h
@@ -7,8 +7,4 @@
 void
 ui_tab_cpu_add(Ui *ui);
 
-void
-ui_tab_cpu_update(Ui *ui, Sys_Info *info);
-
-
 #endif

-- 


Reply via email to