bg_poll: use existing api...

This commit is contained in:
Alastair Poole 2021-03-31 15:05:07 +01:00
parent 30468c030a
commit a6694b4c9a
6 changed files with 19 additions and 30 deletions

View File

@ -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();

View File

@ -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"

View File

@ -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;

View File

@ -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);
}

View File

@ -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;

View File

@ -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);