netstar pushed a commit to branch master. http://git.enlightenment.org/apps/evisum.git/commit/?id=a6694b4c9ac4bd98175a7c7b14c44f6fd9d0198d
commit a6694b4c9ac4bd98175a7c7b14c44f6fd9d0198d Author: Alastair Poole <nets...@gmail.com> Date: Wed Mar 31 15:05:07 2021 +0100 bg_poll: use existing api... --- src/bin/main.c | 35 +++++++++++------------------------ src/bin/system/machine.c | 1 + src/bin/system/machine/cpu.bogox | 4 ++-- src/bin/ui/evisum_ui.c | 3 +++ src/bin/ui/evisum_ui.h | 1 + src/bin/ui/ui_process_list.c | 5 +---- 6 files changed, 19 insertions(+), 30 deletions(-) diff --git a/src/bin/main.c b/src/bin/main.c index d808592..3608add 100644 --- a/src/bin/main.c +++ b/src/bin/main.c @@ -34,44 +34,31 @@ _signals(Evisum_Ui *ui) static void _background_poller_cb(void *data, Ecore_Thread *thread) { + meminfo_t memory; Evisum_Ui *ui = data; - double max = system_cpu_online_count_get() * 100.0; + + system_memory_usage_get(&memory); + ui->mem_total = memory.total; 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++) + int ncpu; + double percent = 0.0; + cpu_core_t **cores = system_cpu_usage_delayed_get(&ncpu, 250000); + for (int i = 0; i < ncpu; i++) { - cpu_time += cores[i]->total - cores[i]->idle; + percent += cores[i]->percent; 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; if (file_system_in_use("ZFS")) ui->mem_used += memory.zfs_arc_used; - for (int i = 0; i < 16; i++) - { - if (ecore_thread_check(thread)) - break; - usleep(62500); - } - - 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; + ui->cpu_usage = percent / ncpu; } } @@ -154,7 +141,7 @@ 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); + ui->background_poll_thread = ecore_thread_run(_background_poller_cb, NULL, NULL, ui); ecore_main_loop_begin(); diff --git a/src/bin/system/machine.c b/src/bin/system/machine.c index 866d21c..6db8349 100644 --- a/src/bin/system/machine.c +++ b/src/bin/system/machine.c @@ -60,6 +60,7 @@ # include <net/if_mib.h> # include <vm/vm_param.h> # include <dev/acpica/acpiio.h> +# include <sys/resource.h> #endif #include "macros.h" diff --git a/src/bin/system/machine/cpu.bogox b/src/bin/system/machine/cpu.bogox index eff7440..8478168 100644 --- a/src/bin/system/machine/cpu.bogox +++ b/src/bin/system/machine/cpu.bogox @@ -111,10 +111,10 @@ _cpu_state_get(cpu_core_t **cores, int ncpu) unsigned long *cpu = cpu_times[i]; total = 0; - for (j = 0; j < CPU_STATES; j++) + for (j = CP_USER; j <= CP_IDLE; j++) total += cpu[j]; - idle = cpu[4]; + idle = cpu[CP_IDLE]; diff_total = total - core->total; diff_idle = idle - core->idle; diff --git a/src/bin/ui/evisum_ui.c b/src/bin/ui/evisum_ui.c index 63047f4..2eae800 100644 --- a/src/bin/ui/evisum_ui.c +++ b/src/bin/ui/evisum_ui.c @@ -744,6 +744,9 @@ evisum_ui_shutdown(Evisum_Ui *ui) evisum_icon_cache_shutdown(); evisum_ui_config_save(ui); + ecore_thread_cancel(ui->background_poll_thread); + ecore_thread_wait(ui->background_poll_thread, 0.5); + free(ui); } diff --git a/src/bin/ui/evisum_ui.h b/src/bin/ui/evisum_ui.h index 938d756..f763725 100644 --- a/src/bin/ui/evisum_ui.h +++ b/src/bin/ui/evisum_ui.h @@ -20,6 +20,7 @@ typedef struct _Evisum_Ui { pid_t program_pid; Ecore_Event_Handler *handler_sig; + Ecore_Thread *background_poll_thread; Eina_Bool effects; diff --git a/src/bin/ui/ui_process_list.c b/src/bin/ui/ui_process_list.c index 1f114fb..cd2d3b8 100644 --- a/src/bin/ui/ui_process_list.c +++ b/src/bin/ui/ui_process_list.c @@ -910,7 +910,6 @@ _summary_update(Win_Data *wd) { Evisum_Ui *ui; Eina_Strbuf *buf; - unsigned int online = system_cpu_online_count_get(); buf = eina_strbuf_new(); @@ -936,9 +935,7 @@ _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.0f %%", ui->cpu_usage)); + elm_progressbar_value_set(wd->summary.pb_cpu, ui->cpu_usage / 100.0); eina_strbuf_reset(buf); --