netstar pushed a commit to branch master.

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

commit 4b98c92f40698d76b7913a9a7a99079371974d59
Author: Alastair Poole <nets...@gmail.com>
Date:   Wed Mar 31 11:35:07 2021 +0100

    ui: moans regardless...
    
    can always remove this.
---
 src/bin/main.c               | 45 +++++++++++++++++++++++++++++++
 src/bin/ui/evisum_ui.c       |  2 +-
 src/bin/ui/evisum_ui.h       |  4 +++
 src/bin/ui/ui_process_list.c | 63 +++++++++++++++++++++++++++++++++++++++-----
 4 files changed, 106 insertions(+), 8 deletions(-)

diff --git a/src/bin/main.c b/src/bin/main.c
index 7906f59..4296fa9 100644
--- a/src/bin/main.c
+++ b/src/bin/main.c
@@ -29,6 +29,49 @@ _signals(Evisum_Ui *ui)
    ui->handler_sig = ecore_event_handler_add(ECORE_EVENT_SIGNAL_EXIT, 
_shutdown_cb, ui);
 }
 
+// XXX!!!
+static void
+_background_poller_cb(void *data, Ecore_Thread *thread)
+{
+   Evisum_Ui *ui = data;
+   double max = system_cpu_online_count_get() * 100.0;
+
+   while (!ecore_thread_check(thread))
+     {
+        meminfo_t memory;
+        static uint64_t cpu_time_prev = 0;
+        uint64_t cpu_time = 0;
+        int n_cpu;
+
+        cpu_core_t **cores = system_cpu_state_get(&n_cpu);
+        for (int i = 0; i < n_cpu; i++)
+          {
+             cpu_time += cores[i]->total - cores[i]->idle;
+             free(cores[i]);
+          }
+        free(cores);
+
+        memset(&memory, 0, sizeof(meminfo_t));
+        system_memory_usage_get(&memory);
+        ui->mem_total = memory.total;
+        ui->mem_used = memory.used;
+
+        for (int i = 0; i < 8; i++)
+          {
+             if (ecore_thread_check(thread))
+               break;
+             usleep(125000);
+          }
+
+       if (cpu_time_prev)
+         {
+            ui->cpu_usage = (double) (cpu_time - cpu_time_prev);
+            if (ui->cpu_usage > max) ui->cpu_usage = max;
+         }
+       cpu_time_prev = cpu_time;
+     }
+}
+
 int
 elm_main(int argc, char **argv)
 {
@@ -108,6 +151,8 @@ elm_main(int argc, char **argv)
    evisum_server_init(ui);
    evisum_ui_activate(ui, action, pid);
 
+   ecore_thread_run(_background_poller_cb, NULL, NULL, ui);
+
    ecore_main_loop_begin();
 
    ecore_event_handler_del(ui->handler_sig);
diff --git a/src/bin/ui/evisum_ui.c b/src/bin/ui/evisum_ui.c
index 45a8611..63047f4 100644
--- a/src/bin/ui/evisum_ui.c
+++ b/src/bin/ui/evisum_ui.c
@@ -535,7 +535,7 @@ evisum_ui_main_menu_create(Evisum_Ui *ui, Evas_Object 
*parent, Evas_Object *obj)
    sli = elm_slider_add(o);
    evas_object_size_hint_weight_set(sli, EXPAND, EXPAND);
    elm_slider_min_max_set(sli, 1.0, 10.0);
-   elm_slider_span_size_set(sli, 10.0);
+   elm_slider_span_size_set(sli, 10.0 - 1.0);
    elm_slider_step_set(sli, 1 / 10.0);
    elm_slider_indicator_show_set(sli, 0);
    elm_slider_unit_format_set(sli, _("%1.0f secs"));
diff --git a/src/bin/ui/evisum_ui.h b/src/bin/ui/evisum_ui.h
index 26c23da..938d756 100644
--- a/src/bin/ui/evisum_ui.h
+++ b/src/bin/ui/evisum_ui.h
@@ -23,6 +23,10 @@ typedef struct _Evisum_Ui
 
    Eina_Bool            effects;
 
+   double               cpu_usage;
+   uint64_t             mem_total;
+   uint64_t             mem_used;
+
    Eina_Bool            kthreads_has_rss;
    struct
    {
diff --git a/src/bin/ui/ui_process_list.c b/src/bin/ui/ui_process_list.c
index f58df2b..4dff7f9 100644
--- a/src/bin/ui/ui_process_list.c
+++ b/src/bin/ui/ui_process_list.c
@@ -32,6 +32,7 @@ typedef struct
    Eina_Bool              skip_wait;
    Eina_Bool              skip_update;
    Eina_Bool              update_every_item;
+   Eina_Bool              first_run;
    Sorter                 sorters[PROC_SORT_BY_MAX];
    pid_t                  selected_pid;
    int                    poll_count;
@@ -84,6 +85,8 @@ typedef struct
    struct
    {
       Evas_Object         *fr;
+      Evas_Object         *pb_cpu;
+      Evas_Object         *pb_mem;
       Evas_Object         *lb;
       int                  total;
       int                  running;
@@ -905,7 +908,13 @@ _summary_reset(Win_Data *wd)
 static void
 _summary_update(Win_Data *wd)
 {
-   Eina_Strbuf *buf = eina_strbuf_new();
+   Evisum_Ui *ui;
+   Eina_Strbuf *buf;
+   unsigned int online = system_cpu_online_count_get();
+
+   buf = eina_strbuf_new();
+
+   ui = wd->ui;
 
    eina_strbuf_append_printf(buf, _("%i processes: "), wd->summary.total);
    if (wd->summary.running)
@@ -927,6 +936,16 @@ _summary_update(Win_Data *wd)
 
    elm_object_text_set(wd->summary.lb, eina_strbuf_string_get(buf));
 
+   elm_progressbar_value_set(wd->summary.pb_cpu, (ui->cpu_usage / 100.0) / 
online);
+   elm_object_part_text_set(wd->summary.pb_cpu, "elm.text.status",
+                            eina_slstr_printf("%1.2f %%", ui->cpu_usage));
+
+   eina_strbuf_reset(buf);
+
+   elm_progressbar_value_set(wd->summary.pb_mem, (ui->mem_total / 100) / 
ui->mem_total);
+   eina_strbuf_append_printf(buf, "%s / %s ", 
evisum_size_format(ui->mem_used), evisum_size_format(ui->mem_total));
+   elm_object_part_text_set(wd->summary.pb_mem, "elm.text.status", 
eina_strbuf_string_get(buf));
+
    eina_strbuf_free(buf);
 }
 
@@ -1171,8 +1190,12 @@ _process_list_feedback_cb(void *data, Ecore_Thread 
*thread EINA_UNUSED,
            eina_list_count(wd->cache->active),
            eina_list_count(wd->cache->inactive), n);
 #endif
-   if (!wd->poll_count)
-     ecore_timer_add(2.0, _bring_in, wd);
+   if (wd->first_run)
+     {
+        wd->first_run = 0;
+        ecore_timer_add(2.0, _bring_in, wd);
+     }
+
    wd->poll_count++;
 
    if (evisum_ui_effects_enabled_get(wd->ui))
@@ -1583,7 +1606,7 @@ static Evas_Object *
 _content_add(Win_Data *wd, Evas_Object *parent)
 {
    Evas_Object *tb, *btn, *glist;
-   Evas_Object *fr, *lb;
+   Evas_Object *fr, *hbx, *bx, *pb, *lb;
    Evisum_Ui *ui = wd->ui;
 
    tb = elm_table_add(parent);
@@ -1810,13 +1833,38 @@ _content_add(Win_Data *wd, Evas_Object *parent)
    wd->summary.fr = fr = elm_frame_add(parent);
    elm_object_style_set(fr, "pad_small");
    evas_object_size_hint_weight_set(fr, EXPAND, 0);
-   evas_object_size_hint_align_set(fr, 0, FILL);
+   evas_object_size_hint_align_set(fr, FILL, FILL);
 
-   wd->summary.lb = lb = elm_label_add(fr);
+   hbx = elm_box_add(parent);
+   elm_box_horizontal_set(hbx, 1);
+   evas_object_size_hint_weight_set(hbx, 1.0, 0);
+   evas_object_size_hint_align_set(hbx, FILL, FILL);
+   evas_object_show(hbx);
+
+   wd->summary.lb = lb = elm_label_add(parent);
    evas_object_size_hint_weight_set(lb, EXPAND, 0);
    evas_object_size_hint_align_set(lb, 0.0, FILL);
+   elm_box_pack_end(hbx, lb);
    evas_object_show(lb);
-   elm_object_content_set(fr, lb);
+
+   bx = elm_box_add(parent);
+   evas_object_size_hint_weight_set(bx, EXPAND, EXPAND);
+   evas_object_size_hint_align_set(bx, FILL, FILL);
+   evas_object_show(bx);
+   elm_box_pack_end(hbx, bx);
+
+   wd->summary.pb_cpu = pb = elm_progressbar_add(parent);
+   elm_progressbar_unit_format_set(pb, "%1.2f %%");
+   elm_progressbar_span_size_set(pb, 140);
+   evas_object_show(pb);
+   elm_box_pack_end(hbx, pb);
+
+   wd->summary.pb_mem = pb= elm_progressbar_add(parent);
+   elm_progressbar_span_size_set(pb, 140);
+   evas_object_show(pb);
+   elm_box_pack_end(hbx, pb);
+
+   elm_object_content_set(fr, hbx);
 
    _fields_init(wd);
 
@@ -2211,6 +2259,7 @@ ui_process_list_win_add(Evisum_Ui *ui)
    if (!wd) return;
 
    wd->selected_pid = -1;
+   wd->first_run = 1;
    wd->ui = ui;
    wd->handler = ecore_event_handler_add(EVISUM_EVENT_CONFIG_CHANGED,
                                          _evisum_config_changed_cb, wd);

-- 


Reply via email to