process_list: Use a table.
We know the number of elements.
This commit is contained in:
parent
2d9ca2dc37
commit
110d772fd5
|
@ -14,6 +14,12 @@
|
||||||
|
|
||||||
extern int EVISUM_EVENT_CONFIG_CHANGED;
|
extern int EVISUM_EVENT_CONFIG_CHANGED;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
Sort_Type type;
|
||||||
|
int (*sort_cb)(const void *p1, const void *p2);
|
||||||
|
} Sorter;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
Ecore_Thread *thread;
|
Ecore_Thread *thread;
|
||||||
|
@ -21,6 +27,7 @@ typedef struct
|
||||||
Ecore_Event_Handler *handler[2];
|
Ecore_Event_Handler *handler[2];
|
||||||
Eina_Bool skip_wait;
|
Eina_Bool skip_wait;
|
||||||
|
|
||||||
|
Sorter sorters[SORT_BY_MAX - 1];
|
||||||
Eina_Hash *cpu_times;
|
Eina_Hash *cpu_times;
|
||||||
Ecore_Timer *resize_timer;
|
Ecore_Timer *resize_timer;
|
||||||
|
|
||||||
|
@ -563,63 +570,23 @@ _process_list_cancel_cb(void *data, Ecore_Thread *thread)
|
||||||
(void) pd;
|
(void) pd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static Eina_List *
|
static Eina_List *
|
||||||
_process_list_sort(Ui *ui, Eina_List *list)
|
_process_list_sort(Eina_List *list, Ui_Data *pd)
|
||||||
{
|
{
|
||||||
switch (ui->proc.sort_type)
|
Ui *ui;
|
||||||
{
|
Sorter s;
|
||||||
case SORT_BY_NONE:
|
ui = pd->ui;
|
||||||
case SORT_BY_PID:
|
|
||||||
list = eina_list_sort(list, eina_list_count(list), _sort_by_pid);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SORT_BY_UID:
|
s = pd->sorters[ui->proc.sort_type];
|
||||||
list = eina_list_sort(list, eina_list_count(list), _sort_by_uid);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SORT_BY_NICE:
|
list = eina_list_sort(list, eina_list_count(list), s.sort_cb);
|
||||||
list = eina_list_sort(list, eina_list_count(list), _sort_by_nice);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SORT_BY_PRI:
|
|
||||||
list = eina_list_sort(list, eina_list_count(list), _sort_by_pri);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SORT_BY_CPU:
|
|
||||||
list = eina_list_sort(list, eina_list_count(list), _sort_by_cpu);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SORT_BY_THREADS:
|
|
||||||
list = eina_list_sort(list, eina_list_count(list), _sort_by_threads);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SORT_BY_SIZE:
|
|
||||||
list = eina_list_sort(list, eina_list_count(list), _sort_by_size);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SORT_BY_RSS:
|
|
||||||
list = eina_list_sort(list, eina_list_count(list), _sort_by_rss);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SORT_BY_CMD:
|
|
||||||
list = eina_list_sort(list, eina_list_count(list), _sort_by_cmd);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SORT_BY_STATE:
|
|
||||||
list = eina_list_sort(list, eina_list_count(list), _sort_by_state);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SORT_BY_CPU_USAGE:
|
|
||||||
list = eina_list_sort(list, eina_list_count(list), _sort_by_cpu_usage);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ui->proc.sort_reverse)
|
if (ui->proc.sort_reverse)
|
||||||
list = eina_list_reverse(list);
|
list = eina_list_reverse(list);
|
||||||
|
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Eina_List *
|
static Eina_List *
|
||||||
_process_list_uid_trim(Eina_List *list, uid_t uid)
|
_process_list_uid_trim(Eina_List *list, uid_t uid)
|
||||||
{
|
{
|
||||||
|
@ -701,7 +668,7 @@ _process_list_get(Ui_Data *pd)
|
||||||
list = _process_list_uid_trim(list, getuid());
|
list = _process_list_uid_trim(list, getuid());
|
||||||
|
|
||||||
list = _process_list_search_trim(list, pd);
|
list = _process_list_search_trim(list, pd);
|
||||||
list = _process_list_sort(ui, list);
|
list = _process_list_sort(list, pd);
|
||||||
|
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
@ -907,7 +874,7 @@ _btn_cmd_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED,
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_btn_cpu_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED,
|
_btn_cpu_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED,
|
||||||
void *event_info EINA_UNUSED)
|
void *event_info EINA_UNUSED)
|
||||||
{
|
{
|
||||||
Ui_Data *pd = data;
|
Ui_Data *pd = data;
|
||||||
Ui *ui = pd->ui;
|
Ui *ui = pd->ui;
|
||||||
|
@ -920,7 +887,7 @@ _btn_cpu_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED,
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_btn_threads_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED,
|
_btn_threads_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED,
|
||||||
void *event_info EINA_UNUSED)
|
void *event_info EINA_UNUSED)
|
||||||
{
|
{
|
||||||
Ui_Data *pd = data;
|
Ui_Data *pd = data;
|
||||||
Ui *ui = pd->ui;
|
Ui *ui = pd->ui;
|
||||||
|
@ -990,7 +957,7 @@ _item_menu_cancel_cb(void *data, Evas_Object *obj EINA_UNUSED,
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_item_menu_debug_cb(void *data, Evas_Object *obj EINA_UNUSED,
|
_item_menu_debug_cb(void *data, Evas_Object *obj EINA_UNUSED,
|
||||||
void *event_info EINA_UNUSED)
|
void *event_info EINA_UNUSED)
|
||||||
{
|
{
|
||||||
Proc_Info *proc;
|
Proc_Info *proc;
|
||||||
const char *terminal = "xterm";
|
const char *terminal = "xterm";
|
||||||
|
@ -1306,7 +1273,6 @@ _ui_content_system_add(Ui_Data *pd, Evas_Object *parent)
|
||||||
evas_object_smart_callback_add(btn, "clicked",
|
evas_object_smart_callback_add(btn, "clicked",
|
||||||
_btn_cpu_clicked_cb, pd);
|
_btn_cpu_clicked_cb, pd);
|
||||||
|
|
||||||
|
|
||||||
pd->btn_state = btn = elm_button_add(parent);
|
pd->btn_state = btn = elm_button_add(parent);
|
||||||
_btn_icon_state_init(btn,
|
_btn_icon_state_init(btn,
|
||||||
(ui->proc.sort_type == SORT_BY_STATE ?
|
(ui->proc.sort_type == SORT_BY_STATE ?
|
||||||
|
@ -1356,7 +1322,7 @@ _ui_content_system_add(Ui_Data *pd, Evas_Object *parent)
|
||||||
evas_object_event_callback_add(pd->genlist, EVAS_CALLBACK_MOUSE_UP,
|
evas_object_event_callback_add(pd->genlist, EVAS_CALLBACK_MOUSE_UP,
|
||||||
_item_pid_secondary_clicked_cb, pd);
|
_item_pid_secondary_clicked_cb, pd);
|
||||||
evas_object_smart_callback_add(pd->genlist, "unrealized",
|
evas_object_smart_callback_add(pd->genlist, "unrealized",
|
||||||
_item_unrealized_cb, pd);
|
_item_unrealized_cb, pd);
|
||||||
elm_box_pack_end(bx, tbl);
|
elm_box_pack_end(bx, tbl);
|
||||||
|
|
||||||
fr = elm_frame_add(parent);
|
fr = elm_frame_add(parent);
|
||||||
|
@ -1581,7 +1547,7 @@ _win_del_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_U
|
||||||
ecore_thread_cancel(pd->thread);
|
ecore_thread_cancel(pd->thread);
|
||||||
|
|
||||||
if (pd->thread)
|
if (pd->thread)
|
||||||
ecore_thread_wait(pd->thread, 0.2);
|
ecore_thread_wait(pd->thread, 0.5);
|
||||||
|
|
||||||
if (pd->resize_timer)
|
if (pd->resize_timer)
|
||||||
ecore_timer_del(pd->resize_timer);
|
ecore_timer_del(pd->resize_timer);
|
||||||
|
@ -1599,6 +1565,23 @@ _win_del_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_U
|
||||||
free(pd);
|
free(pd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_init(Ui_Data *pd)
|
||||||
|
{
|
||||||
|
pd->sorters[SORT_BY_NONE].sort_cb = _sort_by_pid;
|
||||||
|
pd->sorters[SORT_BY_PID].sort_cb = _sort_by_pid;
|
||||||
|
pd->sorters[SORT_BY_UID].sort_cb = _sort_by_uid;
|
||||||
|
pd->sorters[SORT_BY_NICE].sort_cb = _sort_by_nice;
|
||||||
|
pd->sorters[SORT_BY_PRI].sort_cb = _sort_by_pri;
|
||||||
|
pd->sorters[SORT_BY_CPU].sort_cb = _sort_by_cpu;
|
||||||
|
pd->sorters[SORT_BY_THREADS].sort_cb = _sort_by_threads;
|
||||||
|
pd->sorters[SORT_BY_SIZE].sort_cb = _sort_by_size;
|
||||||
|
pd->sorters[SORT_BY_RSS].sort_cb = _sort_by_rss;
|
||||||
|
pd->sorters[SORT_BY_CMD].sort_cb = _sort_by_cmd;
|
||||||
|
pd->sorters[SORT_BY_STATE].sort_cb = _sort_by_state;
|
||||||
|
pd->sorters[SORT_BY_CPU_USAGE].sort_cb = _sort_by_cpu_usage;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ui_process_list_win_add(Ui *ui)
|
ui_process_list_win_add(Ui *ui)
|
||||||
{
|
{
|
||||||
|
@ -1618,6 +1601,7 @@ ui_process_list_win_add(Ui *ui)
|
||||||
pd->ui = ui;
|
pd->ui = ui;
|
||||||
pd->handler[0] = ecore_event_handler_add(EVISUM_EVENT_CONFIG_CHANGED,
|
pd->handler[0] = ecore_event_handler_add(EVISUM_EVENT_CONFIG_CHANGED,
|
||||||
_evisum_config_changed_cb, pd);
|
_evisum_config_changed_cb, pd);
|
||||||
|
_init(pd);
|
||||||
|
|
||||||
ui->proc.win = pd->win = win = elm_win_util_standard_add("evisum", "evisum");
|
ui->proc.win = pd->win = win = elm_win_util_standard_add("evisum", "evisum");
|
||||||
elm_win_autodel_set(win, EINA_TRUE);
|
elm_win_autodel_set(win, EINA_TRUE);
|
||||||
|
|
|
@ -17,6 +17,8 @@ typedef enum
|
||||||
SORT_BY_CMD,
|
SORT_BY_CMD,
|
||||||
SORT_BY_STATE,
|
SORT_BY_STATE,
|
||||||
SORT_BY_CPU_USAGE,
|
SORT_BY_CPU_USAGE,
|
||||||
|
|
||||||
|
SORT_BY_MAX,
|
||||||
} Sort_Type;
|
} Sort_Type;
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
Loading…
Reference in New Issue