forked from enlightenment/evisum
proc: files
This commit is contained in:
parent
8fbf26f0ff
commit
ceeb71c90a
|
@ -299,6 +299,19 @@ _stat(const char *path, Stat *st)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
_n_files(Proc_Info *p)
|
||||
{
|
||||
char buf[4096];
|
||||
|
||||
snprintf(buf, sizeof(buf), "/proc/%d/fd", p->pid);
|
||||
p->fds = ecore_file_ls(buf);
|
||||
if (p->fds)
|
||||
p->numfiles = eina_list_count(p->fds);
|
||||
|
||||
return p->numfiles;
|
||||
}
|
||||
|
||||
static Eina_List *
|
||||
_process_list_linux_get(void)
|
||||
{
|
||||
|
@ -334,13 +347,14 @@ _process_list_linux_get(void)
|
|||
p->cpu_id = st.psr;
|
||||
p->start = st.start_time;
|
||||
p->run_time = st.run_time;
|
||||
if (toupper(st.state) == 'S') p->ssleep = 1;
|
||||
if (toupper(st.state) == 'S') p->ssleep = 1;
|
||||
state = _process_state_name(st.state);
|
||||
snprintf(p->state, sizeof(p->state), "%s", state);
|
||||
p->cpu_time = st.utime + st.stime;
|
||||
p->nice = st.nice;
|
||||
p->priority = st.pri;
|
||||
p->numthreads = st.numthreads;
|
||||
p->numfiles = _n_files(p);
|
||||
if (st.flags & PF_KTHREAD)
|
||||
p->is_kernel = 1;
|
||||
_mem_size(p);
|
||||
|
@ -374,7 +388,7 @@ _proc_thread_info(Proc_Info *p)
|
|||
Proc_Info *t = calloc(1, sizeof(Proc_Info));
|
||||
if (!t) continue;
|
||||
t->cpu_id = st.psr;
|
||||
if (toupper(st.state) == 'S') p->ssleep = 1;
|
||||
if (toupper(st.state) == 'S') p->ssleep = 1;
|
||||
state = _process_state_name(st.state);
|
||||
snprintf(t->state, sizeof(t->state), "%s", state);
|
||||
t->cpu_time = st.utime + st.stime;
|
||||
|
@ -418,6 +432,7 @@ proc_info_by_pid(int pid)
|
|||
p->priority = st.pri;
|
||||
p->nice = st.nice;
|
||||
p->numthreads = st.numthreads;
|
||||
p->numfiles = _n_files(p);
|
||||
if (st.flags & PF_KTHREAD) p->is_kernel = 1;
|
||||
_mem_size(p);
|
||||
_cmd_args(p, st.name, sizeof(st.name));
|
||||
|
@ -1089,13 +1104,12 @@ void
|
|||
proc_info_free(Proc_Info *proc)
|
||||
{
|
||||
Proc_Info *t;
|
||||
char *s;
|
||||
|
||||
if (!proc) return;
|
||||
|
||||
EINA_LIST_FREE(proc->threads, t)
|
||||
{
|
||||
proc_info_free(t);
|
||||
}
|
||||
proc_info_free(t);
|
||||
|
||||
if (proc->command)
|
||||
free(proc->command);
|
||||
|
@ -1104,6 +1118,9 @@ proc_info_free(Proc_Info *proc)
|
|||
if (proc->thread_name)
|
||||
free(proc->thread_name);
|
||||
|
||||
EINA_LIST_FREE(proc->fds, s)
|
||||
free(s);
|
||||
|
||||
free(proc);
|
||||
}
|
||||
|
||||
|
@ -1291,6 +1308,16 @@ proc_sort_by_threads(const void *p1, const void *p2)
|
|||
return inf1->numthreads - inf2->numthreads;
|
||||
}
|
||||
|
||||
int
|
||||
proc_sort_by_files(const void *p1, const void *p2)
|
||||
{
|
||||
const Proc_Info *inf1, *inf2;
|
||||
|
||||
inf1 = p1; inf2 = p2;
|
||||
|
||||
return inf1->numfiles - inf2->numfiles;
|
||||
}
|
||||
|
||||
int
|
||||
proc_sort_by_size(const void *p1, const void *p2)
|
||||
{
|
||||
|
|
|
@ -33,6 +33,9 @@ typedef struct _Proc_Info
|
|||
int ssleep;
|
||||
char state[32];
|
||||
|
||||
Eina_List *fds;
|
||||
int numfiles;
|
||||
|
||||
short is_kernel;
|
||||
int tid;
|
||||
char *thread_name;
|
||||
|
@ -83,6 +86,9 @@ proc_sort_by_cpu(const void *p1, const void *p2);
|
|||
int
|
||||
proc_sort_by_threads(const void *p1, const void *p2);
|
||||
|
||||
int
|
||||
proc_sort_by_files(const void *p1, const void *p2);
|
||||
|
||||
int
|
||||
proc_sort_by_size(const void *p1, const void *p2);
|
||||
|
||||
|
|
|
@ -66,6 +66,7 @@ typedef struct
|
|||
Evas_Object *btn_cpu;
|
||||
Evas_Object *btn_pri;
|
||||
Evas_Object *btn_nice;
|
||||
Evas_Object *btn_files;
|
||||
Evas_Object *btn_size;
|
||||
Evas_Object *btn_virt;
|
||||
Evas_Object *btn_rss;
|
||||
|
@ -122,14 +123,16 @@ _field_name(Proc_Field id)
|
|||
return _("Priority");
|
||||
case PROC_FIELD_NICE:
|
||||
return _("Nice");
|
||||
case PROC_FIELD_FILES:
|
||||
return _("Open files");
|
||||
case PROC_FIELD_SIZE:
|
||||
return _("Size");
|
||||
return _("Memory Size");
|
||||
case PROC_FIELD_VIRT:
|
||||
return _("Virtual");
|
||||
return _("Memory Virtual");
|
||||
case PROC_FIELD_RSS:
|
||||
return _("Reserved");
|
||||
return _("Memory Reserved");
|
||||
case PROC_FIELD_SHARED:
|
||||
return _("Shared");
|
||||
return _("Memory Shared");
|
||||
case PROC_FIELD_STATE:
|
||||
return _("State");
|
||||
case PROC_FIELD_TIME:
|
||||
|
@ -390,6 +393,11 @@ _item_create(Evas_Object *obj)
|
|||
lb = _item_column_add(tb, "proc_nice", i++);
|
||||
evas_object_size_hint_align_set(lb, 1.0, FILL);
|
||||
}
|
||||
if (_field_enabled(PROC_FIELD_FILES))
|
||||
{
|
||||
lb = _item_column_add(tb, "proc_files", i++);
|
||||
evas_object_size_hint_align_set(lb, 1.0, FILL);
|
||||
}
|
||||
if (_field_enabled(PROC_FIELD_SIZE))
|
||||
{
|
||||
lb = _item_column_add(tb, "proc_size", i++);
|
||||
|
@ -583,6 +591,18 @@ _content_get(void *data, Evas_Object *obj, const char *source)
|
|||
evas_object_show(lb);
|
||||
}
|
||||
|
||||
if (_field_enabled(PROC_FIELD_FILES))
|
||||
{
|
||||
evas_object_geometry_get(pd->btn_nice, NULL, NULL, &w, NULL);
|
||||
lb = evas_object_data_get(it->obj, "proc_files");
|
||||
snprintf(buf, sizeof(buf), "%d", proc->numfiles);
|
||||
if (strcmp(buf, elm_object_text_get(lb)))
|
||||
elm_object_text_set(lb, buf);
|
||||
rec = evas_object_data_get(lb, "rec");
|
||||
evas_object_size_hint_min_set(rec, w, 1);
|
||||
evas_object_show(lb);
|
||||
}
|
||||
|
||||
if (_field_enabled(PROC_FIELD_SIZE))
|
||||
{
|
||||
evas_object_geometry_get(pd->btn_size, NULL, NULL, &w, NULL);
|
||||
|
@ -1122,6 +1142,19 @@ _btn_nice_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED,
|
|||
_btn_clicked_state_save(pd, pd->btn_nice);
|
||||
}
|
||||
|
||||
static void
|
||||
_btn_files_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED,
|
||||
void *event_info EINA_UNUSED)
|
||||
{
|
||||
Ui_Data *pd = data;
|
||||
Ui *ui = pd->ui;
|
||||
|
||||
if (ui->proc.sort_type == PROC_SORT_BY_FILES)
|
||||
ui->proc.sort_reverse = !ui->proc.sort_reverse;
|
||||
ui->proc.sort_type = PROC_SORT_BY_FILES;
|
||||
_btn_clicked_state_save(pd, pd->btn_files);
|
||||
}
|
||||
|
||||
static void
|
||||
_btn_size_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED,
|
||||
void *event_info EINA_UNUSED)
|
||||
|
@ -1608,6 +1641,19 @@ _content_add(Ui_Data *pd, Evas_Object *parent)
|
|||
_btn_nice_clicked_cb, pd);
|
||||
_fields[PROC_FIELD_NICE].btn = btn;
|
||||
|
||||
pd->btn_files = btn = elm_button_add(parent);
|
||||
_btn_icon_state_init(btn,
|
||||
(ui->proc.sort_type == PROC_SORT_BY_FILES ?
|
||||
ui->proc.sort_reverse : 0),
|
||||
ui->proc.sort_type == PROC_SORT_BY_FILES);
|
||||
evas_object_size_hint_weight_set(btn, 1.0, 0);
|
||||
evas_object_size_hint_align_set(btn, FILL, FILL);
|
||||
elm_object_text_set(btn, _("files"));
|
||||
evas_object_show(btn);
|
||||
evas_object_smart_callback_add(btn, "clicked",
|
||||
_btn_files_clicked_cb, pd);
|
||||
_fields[PROC_FIELD_FILES].btn = btn;
|
||||
|
||||
pd->btn_size = btn = elm_button_add(parent);
|
||||
_btn_icon_state_init(btn,
|
||||
(ui->proc.sort_type == PROC_SORT_BY_SIZE ?
|
||||
|
@ -2064,12 +2110,13 @@ static void
|
|||
_init(Ui_Data *pd)
|
||||
{
|
||||
pd->sorters[PROC_SORT_BY_NONE].sort_cb = proc_sort_by_pid;
|
||||
pd->sorters[PROC_SORT_BY_PID].sort_cb = proc_sort_by_pid;
|
||||
pd->sorters[PROC_SORT_BY_UID].sort_cb = proc_sort_by_uid;
|
||||
pd->sorters[PROC_SORT_BY_NICE].sort_cb = proc_sort_by_nice;
|
||||
pd->sorters[PROC_SORT_BY_PRI].sort_cb = proc_sort_by_pri;
|
||||
pd->sorters[PROC_SORT_BY_CPU].sort_cb = proc_sort_by_cpu;
|
||||
pd->sorters[PROC_SORT_BY_PID].sort_cb = proc_sort_by_pid;
|
||||
pd->sorters[PROC_SORT_BY_THREADS].sort_cb = proc_sort_by_threads;
|
||||
pd->sorters[PROC_SORT_BY_CPU].sort_cb = proc_sort_by_cpu;
|
||||
pd->sorters[PROC_SORT_BY_PRI].sort_cb = proc_sort_by_pri;
|
||||
pd->sorters[PROC_SORT_BY_NICE].sort_cb = proc_sort_by_nice;
|
||||
pd->sorters[PROC_SORT_BY_FILES].sort_cb = proc_sort_by_files;
|
||||
pd->sorters[PROC_SORT_BY_SIZE].sort_cb = proc_sort_by_size;
|
||||
pd->sorters[PROC_SORT_BY_VIRT].sort_cb = proc_sort_by_virt;
|
||||
pd->sorters[PROC_SORT_BY_RSS].sort_cb = proc_sort_by_rss;
|
||||
|
|
|
@ -13,6 +13,7 @@ typedef enum
|
|||
PROC_SORT_BY_CPU,
|
||||
PROC_SORT_BY_PRI,
|
||||
PROC_SORT_BY_NICE,
|
||||
PROC_SORT_BY_FILES,
|
||||
PROC_SORT_BY_SIZE,
|
||||
PROC_SORT_BY_VIRT,
|
||||
PROC_SORT_BY_RSS,
|
||||
|
@ -32,14 +33,15 @@ typedef enum
|
|||
PROC_FIELD_CPU = 5,
|
||||
PROC_FIELD_PRI = 6,
|
||||
PROC_FIELD_NICE = 7,
|
||||
PROC_FIELD_SIZE = 8,
|
||||
PROC_FIELD_VIRT = 9,
|
||||
PROC_FIELD_RSS = 10,
|
||||
PROC_FIELD_SHARED = 11,
|
||||
PROC_FIELD_STATE = 12,
|
||||
PROC_FIELD_TIME = 13,
|
||||
PROC_FIELD_CPU_USAGE = 14,
|
||||
PROC_FIELD_MAX = 15,
|
||||
PROC_FIELD_FILES = 8,
|
||||
PROC_FIELD_SIZE = 9,
|
||||
PROC_FIELD_VIRT = 10,
|
||||
PROC_FIELD_RSS = 11,
|
||||
PROC_FIELD_SHARED = 12,
|
||||
PROC_FIELD_STATE = 13,
|
||||
PROC_FIELD_TIME = 14,
|
||||
PROC_FIELD_CPU_USAGE = 15,
|
||||
PROC_FIELD_MAX = 16,
|
||||
} Proc_Field;
|
||||
|
||||
void
|
||||
|
|
|
@ -39,6 +39,7 @@ typedef struct
|
|||
Evas_Object *entry_uid;
|
||||
Evas_Object *entry_cpu;
|
||||
Evas_Object *entry_threads;
|
||||
Evas_Object *entry_files;
|
||||
Evas_Object *entry_virt;
|
||||
Evas_Object *entry_rss;
|
||||
Evas_Object *entry_shared;
|
||||
|
@ -838,6 +839,8 @@ static void
|
|||
_general_view_update(Ui_Data *pd, Proc_Info *proc)
|
||||
{
|
||||
struct passwd *pwd_entry;
|
||||
Eina_List *l;
|
||||
char *s;
|
||||
|
||||
if (!strcmp(proc->state, "stop"))
|
||||
{
|
||||
|
@ -869,6 +872,13 @@ _general_view_update(Ui_Data *pd, Proc_Info *proc)
|
|||
elm_object_text_set(pd->general.entry_ppid, eina_slstr_printf("%d", proc->ppid));
|
||||
elm_object_text_set(pd->general.entry_threads,
|
||||
eina_slstr_printf("%d", proc->numthreads));
|
||||
Eina_Strbuf *b = eina_strbuf_new();
|
||||
EINA_LIST_FOREACH(proc->fds, l, s)
|
||||
eina_strbuf_append_printf(b, "%s ", s);
|
||||
if (eina_strbuf_length_get(b))
|
||||
elm_object_text_set(pd->general.entry_files, eina_strbuf_string_get(b));
|
||||
eina_strbuf_free(b);
|
||||
|
||||
elm_object_text_set(pd->general.entry_virt, evisum_size_format(proc->mem_virt));
|
||||
elm_object_text_set(pd->general.entry_rss, evisum_size_format(proc->mem_rss));
|
||||
#if !defined(__linux__)
|
||||
|
@ -1117,6 +1127,11 @@ _general_tab_add(Evas_Object *parent, Ui_Data *pd)
|
|||
pd->general.entry_threads = entry = _entry_add(parent);
|
||||
elm_table_pack(tb, entry, 1, i++, 1, 1);
|
||||
|
||||
lb = _lb_add(parent, _("Files:"));
|
||||
elm_table_pack(tb, lb, 0, i, 1, 1);
|
||||
pd->general.entry_files = entry = _entry_add(parent);
|
||||
elm_table_pack(tb, entry, 1, i++, 1, 1);
|
||||
|
||||
lb = _lb_add(parent, _(" Memory :"));
|
||||
elm_table_pack(tb, lb, 0, i, 1, 1);
|
||||
pd->general.entry_size = entry = _entry_add(parent);
|
||||
|
|
Loading…
Reference in New Issue