|
|
|
@ -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("<link>%d</link> <br>", proc->pid), TEXT_FIELD_MAX); |
|
|
|
|
eina_strlcat(ui->fields[PROCESS_INFO_FIELD_UID], eina_slstr_printf("%d <br>", proc->uid), TEXT_FIELD_MAX); |
|
|
|
|
eina_strlcat(ui->fields[PROCESS_INFO_FIELD_SIZE], eina_slstr_printf("%lld K<br>", proc->mem_size >> 10), TEXT_FIELD_MAX); |
|
|
|
|
eina_strlcat(ui->fields[PROCESS_INFO_FIELD_RSS], eina_slstr_printf("%lld K<br>", proc->mem_rss >> 10), TEXT_FIELD_MAX); |
|
|
|
|
eina_strlcat(ui->fields[PROCESS_INFO_FIELD_SIZE], eina_slstr_printf("%lld %c<br>", mem_size, *format), TEXT_FIELD_MAX); |
|
|
|
|
eina_strlcat(ui->fields[PROCESS_INFO_FIELD_RSS], eina_slstr_printf("%lld %c<br>", mem_rss, *format), TEXT_FIELD_MAX); |
|
|
|
|
eina_strlcat(ui->fields[PROCESS_INFO_FIELD_COMMAND], eina_slstr_printf("%s<br>", proc->command), TEXT_FIELD_MAX); |
|
|
|
|
eina_strlcat(ui->fields[PROCESS_INFO_FIELD_STATE], eina_slstr_printf("%s <br>", proc->state), TEXT_FIELD_MAX); |
|
|
|
|
eina_strlcat(ui->fields[PROCESS_INFO_FIELD_CPU_USAGE], eina_slstr_printf("%.1f%% <br>", 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]; |
|
|
|
|
|
|
|
|
|
snprintf(buf, sizeof(buf), "%luM of %luM", _disk_used, _disk_total); |
|
|
|
|
|
|
|
|
|
return strdup(buf); |
|
|
|
|
} |
|
|
|
|
if (unit == DATA_UNIT_KB) |
|
|
|
|
{ |
|
|
|
|
value <<= 10; |
|
|
|
|
} |
|
|
|
|
else if (unit == DATA_UNIT_MB) |
|
|
|
|
{ |
|
|
|
|
} |
|
|
|
|
else if (unit == DATA_UNIT_GB) |
|
|
|
|
{ |
|
|
|
|
value >>= 10; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
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,13 +908,13 @@ _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); |
|
|
|
|
|
|
|
|
|
elm_object_content_set(frame, progress); |
|
|
|
|
format = _data_unit_symbol_get(ui->data_unit); |
|
|
|
|
|
|
|
|
|
_disk_used = used; |
|
|
|
|
_disk_total = total; |
|
|
|
|
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); |
|
|
|
|
|
|
|
|
|
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); |
|
|
|
|