From f5a1292c399ded58b664d9ef5d84935628b507f5 Mon Sep 17 00:00:00 2001 From: Alastair Poole Date: Tue, 2 Oct 2018 14:56:25 +0100 Subject: [PATCH] format: allow some key presses. This is totally bogus. Need to reboot into linux and sort out the horrible formatting and spacing etc etc etc. --- src/ui.c | 155 +++++++++++++++++++++++++++++++++++++++++++++---------- src/ui.h | 9 ++++ 2 files changed, 138 insertions(+), 26 deletions(-) diff --git a/src/ui.c b/src/ui.c index 7d49036..144a4b3 100644 --- a/src/ui.c +++ b/src/ui.c @@ -241,16 +241,61 @@ _sort_by_state(const void *p1, const void *p2) return strcmp(inf1->state, inf2->state); } +const char * +_data_unit_symbol_get(Data_Unit unit) +{ + const char *symbol; + + switch (unit) + { + case DATA_UNIT_KB: + symbol = "K"; + break; + case DATA_UNIT_MB: + symbol = "M"; + break; + case DATA_UNIT_GB: + symbol = "G"; + break; + } + + return symbol; +} + static void _fields_append(Ui *ui, Proc_Stats *proc) { + const char *format; + int64_t mem_size, mem_rss; + if (ui->program_pid == proc->pid) return; + format = _data_unit_symbol_get(ui->data_unit); + + mem_size = proc->mem_size; + mem_rss = proc->mem_rss; + + if (ui->data_unit == DATA_UNIT_KB) + { + mem_size >>= 10; + mem_rss >>= 10; + } + else if (ui->data_unit == DATA_UNIT_MB) + { + mem_size >>= 20; + mem_rss >>= 10; + } + else + { + mem_size >>= 30; + mem_rss >>= 30; + } + eina_strlcat(ui->fields[PROCESS_INFO_FIELD_PID], eina_slstr_printf("%d
", proc->pid), TEXT_FIELD_MAX); eina_strlcat(ui->fields[PROCESS_INFO_FIELD_UID], eina_slstr_printf("%d
", proc->uid), TEXT_FIELD_MAX); - eina_strlcat(ui->fields[PROCESS_INFO_FIELD_SIZE], eina_slstr_printf("%lld K
", proc->mem_size >> 10), TEXT_FIELD_MAX); - eina_strlcat(ui->fields[PROCESS_INFO_FIELD_RSS], eina_slstr_printf("%lld K
", proc->mem_rss >> 10), TEXT_FIELD_MAX); + eina_strlcat(ui->fields[PROCESS_INFO_FIELD_SIZE], eina_slstr_printf("%lld %c
", mem_size, *format), TEXT_FIELD_MAX); + eina_strlcat(ui->fields[PROCESS_INFO_FIELD_RSS], eina_slstr_printf("%lld %c
", mem_rss, *format), TEXT_FIELD_MAX); eina_strlcat(ui->fields[PROCESS_INFO_FIELD_COMMAND], eina_slstr_printf("%s
", proc->command), TEXT_FIELD_MAX); eina_strlcat(ui->fields[PROCESS_INFO_FIELD_STATE], eina_slstr_printf("%s
", proc->state), TEXT_FIELD_MAX); eina_strlcat(ui->fields[PROCESS_INFO_FIELD_CPU_USAGE], eina_slstr_printf("%.1f%%
", proc->cpu_usage), TEXT_FIELD_MAX); @@ -828,29 +873,29 @@ _entry_pid_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info ui->panel_visible = EINA_TRUE; } -static unsigned long _disk_used = 0, _disk_total = 0; - -static char * -_progress_disk_format_cb(double val) +static unsigned long +_disk_adjust(Data_Unit unit, unsigned long value) { - char buf[1024]; + if (unit == DATA_UNIT_KB) + { + value <<= 10; + } + else if (unit == DATA_UNIT_MB) + { + } + else if (unit == DATA_UNIT_GB) + { + value >>= 10; + } - snprintf(buf, sizeof(buf), "%luM of %luM", _disk_used, _disk_total); - - return strdup(buf); -} - -static void -_progress_disk_format_free_cb(char *str) -{ - if (str) - free(str); + return value; } static void _ui_disk_add(Ui *ui, const char *path, const char *mount, unsigned long total, unsigned long used) { Evas_Object *frame, *progress; + const char *format; double ratio, value; frame = elm_frame_add(ui->disk_activity); @@ -863,14 +908,14 @@ _ui_disk_add(Ui *ui, const char *path, const char *mount, unsigned long total, u evas_object_size_hint_align_set(progress, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_weight_set(progress, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_progressbar_span_size_set(progress, 1.0); - elm_progressbar_unit_format_set(progress, ""); - elm_progressbar_unit_format_function_set(progress, _progress_disk_format_cb, _progress_disk_format_free_cb); + + format = _data_unit_symbol_get(ui->data_unit); + + elm_progressbar_unit_format_set(progress, + eina_slstr_printf("%lu%c of %lu%c", _disk_adjust(ui->data_unit, used), *format, _disk_adjust(ui->data_unit, total), *format)); elm_object_content_set(frame, progress); - _disk_used = used; - _disk_total = total; - ratio = total / 100.0; value = used / ratio; @@ -1021,10 +1066,29 @@ _cpu_view_update(Ui *ui, results_t *results) elm_box_pack_end(ui->cpu_activity, box); } +static unsigned long +_mem_adjust(Data_Unit unit, unsigned long value) +{ + if (unit == DATA_UNIT_KB) + { + } + else if (unit == DATA_UNIT_MB) + { + value >>= 10; + } + else if (unit == DATA_UNIT_GB) + { + value >>= 20; + } + + return value; +} + static void _memory_view_update(Ui *ui, results_t *results) { Evas_Object *box, *frame, *progress; + const char *format; double ratio, value; if (!ui->mem_visible) @@ -1032,6 +1096,8 @@ _memory_view_update(Ui *ui, results_t *results) elm_box_clear(ui->mem_activity); + format = _data_unit_symbol_get(ui->data_unit); + box = elm_box_add(ui->content); evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); @@ -1046,7 +1112,8 @@ _memory_view_update(Ui *ui, results_t *results) evas_object_size_hint_align_set(progress, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_weight_set(progress, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_progressbar_span_size_set(progress, 1.0); - elm_progressbar_unit_format_set(progress, eina_slstr_printf("%lu M / %lu M", results->memory.used, results->memory.total)); + elm_progressbar_unit_format_set(progress, + eina_slstr_printf("%lu %c / %lu %c", _mem_adjust(ui->data_unit, results->memory.used), *format, _mem_adjust(ui->data_unit, results->memory.total), *format)); ratio = results->memory.total / 100.0; value = results->memory.used / ratio; elm_progressbar_value_set(progress, value / 100); @@ -1063,7 +1130,8 @@ _memory_view_update(Ui *ui, results_t *results) evas_object_size_hint_align_set(progress, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_weight_set(progress, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_progressbar_span_size_set(progress, 1.0); - elm_progressbar_unit_format_set(progress, eina_slstr_printf("%lu M / %lu M", results->memory.cached, results->memory.total)); + elm_progressbar_unit_format_set(progress, + eina_slstr_printf("%lu %c / %lu %c", _mem_adjust(ui->data_unit, results->memory.cached), *format, _mem_adjust(ui->data_unit, results->memory.total), *format)); ratio = results->memory.total / 100.0; value = results->memory.cached / ratio; elm_progressbar_value_set(progress, value / 100); @@ -1080,7 +1148,8 @@ _memory_view_update(Ui *ui, results_t *results) evas_object_size_hint_align_set(progress, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_weight_set(progress, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_progressbar_span_size_set(progress, 1.0); - elm_progressbar_unit_format_set(progress, eina_slstr_printf("%lu M / %lu M", results->memory.buffered, results->memory.total)); + elm_progressbar_unit_format_set(progress, + eina_slstr_printf("%lu %c / %lu %c", _mem_adjust(ui->data_unit, results->memory.buffered), *format, _mem_adjust(ui->data_unit, results->memory.total), *format)); ratio = results->memory.total / 100.0; value = results->memory.buffered / ratio; elm_progressbar_value_set(progress, value / 100); @@ -1097,7 +1166,8 @@ _memory_view_update(Ui *ui, results_t *results) evas_object_size_hint_align_set(progress, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_weight_set(progress, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_progressbar_span_size_set(progress, 1.0); - elm_progressbar_unit_format_set(progress, eina_slstr_printf("%lu M / %lu M", results->memory.shared, results->memory.total)); + elm_progressbar_unit_format_set(progress, + eina_slstr_printf("%lu %c / %lu %c", _mem_adjust(ui->data_unit, results->memory.shared), *format, _mem_adjust(ui->data_unit, results->memory.total), *format)); ratio = results->memory.total / 100.0; value = results->memory.shared / ratio; elm_progressbar_value_set(progress, value / 100); @@ -2076,6 +2146,36 @@ _ui_tabs_add(Evas_Object *parent, Ui *ui) return table; } +static void +_evisum_key_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Event_Key_Down *ev; + Ui *ui; + + ev = event_info; + ui = data; + + if (!ev || !ev->keyname) + return; + + if (!strcasecmp(ev->keyname, "K")) + { + ui->data_unit = DATA_UNIT_KB; + } + else if (!strcasecmp(ev->keyname, "M")) + { + ui->data_unit = DATA_UNIT_MB; + } + else if (!strcasecmp(ev->keyname, "G")) + { + ui->data_unit = DATA_UNIT_GB; + } + else if (!strcmp(ev->keyname, "Escape")) + { + ui_shutdown(ui); + } +} + Ui * ui_add(Evas_Object *parent) { @@ -2092,6 +2192,7 @@ ui_add(Evas_Object *parent) ui->program_pid = getpid(); ui->panel_visible = EINA_TRUE; ui->disk_visible = ui->cpu_visible = ui->mem_visible = ui->extra_visible = EINA_TRUE; + ui->data_unit = DATA_UNIT_MB; memset(ui->cpu_times, 0, PID_MAX * sizeof(int64_t)); @@ -2114,6 +2215,8 @@ ui_add(Evas_Object *parent) _ui_disk_view_add(ui); _ui_extra_view_add(ui); + evas_object_event_callback_add(ui->content, EVAS_CALLBACK_KEY_DOWN, _evisum_key_down_cb, ui); + /* Start polling the data */ _disk_view_update(ui); _process_panel_update(ui); diff --git a/src/ui.h b/src/ui.h index c2bc5e6..0824d5c 100644 --- a/src/ui.h +++ b/src/ui.h @@ -24,6 +24,13 @@ typedef enum #define PROCESS_INFO_FIELDS 7 +typedef enum +{ + DATA_UNIT_KB, + DATA_UNIT_MB, + DATA_UNIT_GB, +} Data_Unit; + typedef enum { SORT_BY_NONE, @@ -102,6 +109,8 @@ typedef struct Ui pid_t selected_pid; pid_t program_pid; + Data_Unit data_unit; + #define TEXT_FIELD_MAX 65535 char *fields[PROCESS_INFO_FIELDS];