This is an automated email from the git hooks/post-receive script.
git pushed a commit to branch master
in repository evisum.
View the commit online.
commit b407008d4c7cac91180a29b39a516daed5c6018e
Author: Alastair Poole <[email protected]>
AuthorDate: Thu Apr 30 11:53:22 2026 +0100
process_view: fix flickering and add pb
---
src/bin/ui/evisum_ui_process_view.c | 170 +++++++++++++++++++++++++++---------
1 file changed, 131 insertions(+), 39 deletions(-)
diff --git a/src/bin/ui/evisum_ui_process_view.c b/src/bin/ui/evisum_ui_process_view.c
index 06b1b8f..69d35ae 100644
--- a/src/bin/ui/evisum_ui_process_view.c
+++ b/src/bin/ui/evisum_ui_process_view.c
@@ -79,14 +79,25 @@ typedef struct {
int64_t start;
uint32_t sample_time;
int64_t cpu_time;
+ double cpu_usage;
#if defined(__linux__)
uint64_t net_in;
uint64_t net_out;
uint64_t disk_read;
uint64_t disk_write;
+ uint64_t net_in_rate;
+ uint64_t net_out_rate;
+ uint64_t disk_read_rate;
+ uint64_t disk_write_rate;
#endif
} Proc_Usage_Cache;
+static uint64_t _evisum_ui_process_view_mem_total_get(Evisum_Ui_Process_View *view);
+static void _evisum_ui_process_view_progressbar_unset(Evas_Object *pb);
+static void _evisum_ui_process_view_progressbar_mem_set(Evas_Object *pb, uint64_t used,
+ uint64_t total);
+static void _evisum_ui_process_view_progressbar_percent_set(Evas_Object *pb, double percent);
+
Eina_List *
_evisum_ui_process_view_exe_response(const char *command) {
FILE *p;
@@ -377,6 +388,7 @@ _evisum_ui_process_view_manual_init(Evisum_Ui_Process_View *view) {
static void
_evisum_ui_process_view_general_view_update(Evisum_Ui_Process_View *view, Proc_Info *proc) {
struct passwd *pwd_entry;
+ uint64_t mem_total;
char *s;
if (!strcmp(proc->state, _("stopped"))) {
@@ -400,18 +412,23 @@ _evisum_ui_process_view_general_view_update(Evisum_Ui_Process_View *view, Proc_I
elm_object_text_set(view->general.entry_ppid, eina_slstr_printf("%d", proc->ppid));
elm_object_text_set(view->general.entry_threads, eina_slstr_printf("%d", proc->numthreads));
elm_object_text_set(view->general.entry_files, eina_slstr_printf("%d", proc->numfiles));
- if (!proc->is_kernel) elm_object_text_set(view->general.entry_virt, evisum_size_format(proc->mem_virt, 0));
- else elm_object_text_set(view->general.entry_virt, _("-"));
+ mem_total = _evisum_ui_process_view_mem_total_get(view);
+
+ if (!proc->is_kernel)
+ _evisum_ui_process_view_progressbar_mem_set(view->general.entry_virt, proc->mem_virt, mem_total);
+ else _evisum_ui_process_view_progressbar_unset(view->general.entry_virt);
if ((!proc->is_kernel) || (view->kthreads_has_rss))
- elm_object_text_set(view->general.entry_rss, evisum_size_format(proc->mem_rss, 0));
- else elm_object_text_set(view->general.entry_rss, _("-"));
+ _evisum_ui_process_view_progressbar_mem_set(view->general.entry_rss, proc->mem_rss, mem_total);
+ else _evisum_ui_process_view_progressbar_unset(view->general.entry_rss);
- if (!proc->is_kernel) elm_object_text_set(view->general.entry_shared, evisum_size_format(proc->mem_shared, 0));
- else elm_object_text_set(view->general.entry_shared, _("-"));
+ if (!proc->is_kernel)
+ _evisum_ui_process_view_progressbar_mem_set(view->general.entry_shared, proc->mem_shared, mem_total);
+ else _evisum_ui_process_view_progressbar_unset(view->general.entry_shared);
- if (!proc->is_kernel) elm_object_text_set(view->general.entry_size, evisum_size_format(proc->mem_size, 0));
- else elm_object_text_set(view->general.entry_size, _("-"));
+ if (!proc->is_kernel)
+ _evisum_ui_process_view_progressbar_mem_set(view->general.entry_size, proc->mem_size, mem_total);
+ else _evisum_ui_process_view_progressbar_unset(view->general.entry_size);
s = _evisum_ui_process_view_run_time_string(proc->run_time);
if (s) {
@@ -428,7 +445,7 @@ _evisum_ui_process_view_general_view_update(Evisum_Ui_Process_View *view, Proc_I
if (proc->wchan[0] && ((proc->state[0] == 's' && proc->state[1] == 'l')))
elm_object_text_set(view->general.entry_state, proc->wchan);
else elm_object_text_set(view->general.entry_state, proc->state);
- elm_object_text_set(view->general.entry_cpu_usage, eina_slstr_printf("%.0f%%", proc->cpu_usage));
+ _evisum_ui_process_view_progressbar_percent_set(view->general.entry_cpu_usage, proc->cpu_usage);
#if defined(__linux__)
if (!proc->is_kernel) {
@@ -563,30 +580,43 @@ _evisum_ui_process_view_proc_info_feedback_cb(void *data, Ecore_Thread *thread,
proc->disk_write = 0;
#endif
proc->cpu_usage = 0.0;
+ } else if (sample_time <= cache->sample_time) {
+ proc->cpu_usage = cache->cpu_usage;
+#if defined(__linux__)
+ proc->net_in = cache->net_in_rate;
+ proc->net_out = cache->net_out_rate;
+ proc->disk_read = cache->disk_read_rate;
+ proc->disk_write = cache->disk_write_rate;
+#endif
} else {
if (sample_time && cache->sample_time && (sample_time > cache->sample_time))
elapsed = sample_time - cache->sample_time;
- if (cache->cpu_time && (proc->cpu_time >= cache->cpu_time))
+ if (proc->cpu_time >= cache->cpu_time)
proc->cpu_usage = (double) (proc->cpu_time - cache->cpu_time) / elapsed;
else proc->cpu_usage = 0.0;
+ cache->cpu_usage = proc->cpu_usage;
cache->cpu_time = proc->cpu_time;
cache->sample_time = sample_time;
#if defined(__linux__)
- if (cache->net_in && (net_in_abs >= cache->net_in)) proc->net_in = (net_in_abs - cache->net_in) / elapsed;
+ if (net_in_abs >= cache->net_in) proc->net_in = (net_in_abs - cache->net_in) / elapsed;
else proc->net_in = 0;
- if (cache->net_out && (net_out_abs >= cache->net_out)) proc->net_out = (net_out_abs - cache->net_out) / elapsed;
+ if (net_out_abs >= cache->net_out) proc->net_out = (net_out_abs - cache->net_out) / elapsed;
else proc->net_out = 0;
- if (cache->disk_read && (disk_read_abs >= cache->disk_read))
+ if (disk_read_abs >= cache->disk_read)
proc->disk_read = (disk_read_abs - cache->disk_read) / elapsed;
else proc->disk_read = 0;
- if (cache->disk_write && (disk_write_abs >= cache->disk_write))
+ if (disk_write_abs >= cache->disk_write)
proc->disk_write = (disk_write_abs - cache->disk_write) / elapsed;
else proc->disk_write = 0;
+ cache->net_in_rate = proc->net_in;
+ cache->net_out_rate = proc->net_out;
+ cache->disk_read_rate = proc->disk_read;
+ cache->disk_write_rate = proc->disk_write;
cache->net_in = net_in_abs;
cache->net_out = net_out_abs;
cache->disk_read = disk_read_abs;
@@ -640,6 +670,68 @@ _evisum_ui_process_view_entry_add(Evas_Object *parent) {
return entry;
}
+static Evas_Object *
+_evisum_ui_process_view_progressbar_add(Evas_Object *parent) {
+ Evas_Object *pb = elm_progressbar_add(parent);
+
+ elm_object_text_set(pb, NULL);
+ elm_progressbar_span_size_set(pb, ELM_SCALE_SIZE(220));
+ elm_progressbar_unit_format_set(pb, _("0 B / 0 B"));
+ evas_object_size_hint_weight_set(pb, EXPAND, 0.0);
+ evas_object_size_hint_align_set(pb, FILL, 0.5);
+ evas_object_show(pb);
+
+ return pb;
+}
+
+static double
+_evisum_ui_process_view_progress_ratio_get(uint64_t used, uint64_t total) {
+ double value = 0.0;
+
+ if (total) value = (double) used / (double) total;
+ if (value < 0.0) value = 0.0;
+ if (value > 1.0) value = 1.0;
+
+ return value;
+}
+
+static uint64_t
+_evisum_ui_process_view_mem_total_get(Evisum_Ui_Process_View *view) {
+ Evisum_Engine_Status status = {0};
+
+ if (evisum_engine_status_get(&status) && status.memory.total)
+ return status.memory.total;
+
+ return view->ui->mem_total;
+}
+
+static void
+_evisum_ui_process_view_progressbar_unset(Evas_Object *pb) {
+ elm_progressbar_value_set(pb, 0.0);
+ elm_progressbar_unit_format_set(pb, _("-"));
+ elm_object_disabled_set(pb, EINA_TRUE);
+}
+
+static void
+_evisum_ui_process_view_progressbar_mem_set(Evas_Object *pb, uint64_t used, uint64_t total) {
+ elm_object_disabled_set(pb, EINA_FALSE);
+ elm_progressbar_value_set(pb, _evisum_ui_process_view_progress_ratio_get(used, total));
+ elm_progressbar_unit_format_set(pb, eina_slstr_printf("%s / %s", evisum_size_format(used, 0),
+ evisum_size_format(total, 0)));
+}
+
+static void
+_evisum_ui_process_view_progressbar_percent_set(Evas_Object *pb, double percent) {
+ double value = percent / 100.0;
+
+ if (value < 0.0) value = 0.0;
+ if (value > 1.0) value = 1.0;
+
+ elm_object_disabled_set(pb, EINA_FALSE);
+ elm_progressbar_value_set(pb, value);
+ elm_progressbar_unit_format_set(pb, eina_slstr_printf("%.0f%%", percent));
+}
+
static Evas_Object *
_evisum_ui_process_view_lb_add(Evas_Object *parent, const char *text) {
Evas_Object *lb = elm_label_add(parent);
@@ -708,6 +800,31 @@ _evisum_ui_process_view_general_tab_add(Evas_Object *parent, Evisum_Ui_Process_V
view->general.entry_cmd_args = entry = _evisum_ui_process_view_entry_add(parent);
elm_table_pack(tb, entry, 1, i++, 1, 1);
+ lb = _evisum_ui_process_view_lb_add(parent, _(" Memory :"));
+ elm_table_pack(tb, lb, 0, i, 1, 1);
+ view->general.entry_size = entry = _evisum_ui_process_view_progressbar_add(parent);
+ elm_table_pack(tb, entry, 1, i++, 1, 1);
+
+ lb = _evisum_ui_process_view_lb_add(parent, _(" Shared memory:"));
+ elm_table_pack(tb, lb, 0, i, 1, 1);
+ view->general.entry_shared = entry = _evisum_ui_process_view_progressbar_add(parent);
+ elm_table_pack(tb, entry, 1, i++, 1, 1);
+
+ lb = _evisum_ui_process_view_lb_add(parent, _(" Resident memory:"));
+ elm_table_pack(tb, lb, 0, i, 1, 1);
+ view->general.entry_rss = entry = _evisum_ui_process_view_progressbar_add(parent);
+ elm_table_pack(tb, entry, 1, i++, 1, 1);
+
+ lb = _evisum_ui_process_view_lb_add(parent, _(" Virtual memory:"));
+ elm_table_pack(tb, lb, 0, i, 1, 1);
+ view->general.entry_virt = entry = _evisum_ui_process_view_progressbar_add(parent);
+ elm_table_pack(tb, entry, 1, i++, 1, 1);
+
+ lb = _evisum_ui_process_view_lb_add(parent, _("CPU %:"));
+ elm_table_pack(tb, lb, 0, i, 1, 1);
+ view->general.entry_cpu_usage = entry = _evisum_ui_process_view_progressbar_add(parent);
+ elm_table_pack(tb, entry, 1, i++, 1, 1);
+
lb = _evisum_ui_process_view_lb_add(parent, _("PID:"));
elm_table_pack(tb, lb, 0, i, 1, 1);
view->general.entry_pid = entry = _evisum_ui_process_view_entry_add(parent);
@@ -753,26 +870,6 @@ _evisum_ui_process_view_general_tab_add(Evas_Object *parent, Evisum_Ui_Process_V
view->general.entry_files = entry = _evisum_ui_process_view_entry_add(parent);
elm_table_pack(tb, entry, 1, i++, 1, 1);
- lb = _evisum_ui_process_view_lb_add(parent, _(" Memory :"));
- elm_table_pack(tb, lb, 0, i, 1, 1);
- view->general.entry_size = entry = _evisum_ui_process_view_entry_add(parent);
- elm_table_pack(tb, entry, 1, i++, 1, 1);
-
- lb = _evisum_ui_process_view_lb_add(parent, _(" Shared memory:"));
- elm_table_pack(tb, lb, 0, i, 1, 1);
- view->general.entry_shared = entry = _evisum_ui_process_view_entry_add(parent);
- elm_table_pack(tb, entry, 1, i++, 1, 1);
-
- lb = _evisum_ui_process_view_lb_add(parent, _(" Resident memory:"));
- elm_table_pack(tb, lb, 0, i, 1, 1);
- view->general.entry_rss = entry = _evisum_ui_process_view_entry_add(parent);
- elm_table_pack(tb, entry, 1, i++, 1, 1);
-
- lb = _evisum_ui_process_view_lb_add(parent, _(" Virtual memory:"));
- elm_table_pack(tb, lb, 0, i, 1, 1);
- view->general.entry_virt = entry = _evisum_ui_process_view_entry_add(parent);
- elm_table_pack(tb, entry, 1, i++, 1, 1);
-
#if defined(__linux__)
lb = _evisum_ui_process_view_lb_add(parent, _(" Disk Read:"));
elm_table_pack(tb, lb, 0, i, 1, 1);
@@ -820,11 +917,6 @@ _evisum_ui_process_view_general_tab_add(Evas_Object *parent, Evisum_Ui_Process_V
view->general.entry_state = entry = _evisum_ui_process_view_entry_add(parent);
elm_table_pack(tb, entry, 1, i++, 1, 1);
- lb = _evisum_ui_process_view_lb_add(parent, _("CPU %:"));
- elm_table_pack(tb, lb, 0, i, 1, 1);
- view->general.entry_cpu_usage = entry = _evisum_ui_process_view_entry_add(parent);
- elm_table_pack(tb, entry, 1, i++, 1, 1);
-
hbx = elm_box_add(parent);
evas_object_size_hint_weight_set(hbx, EXPAND, 0);
evas_object_size_hint_align_set(hbx, 1.0, FILL);
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.