netstar pushed a commit to branch master. http://git.enlightenment.org/apps/evisum.git/commit/?id=226579933b07903b0d4649b31715c9245f4fbae5
commit 226579933b07903b0d4649b31715c9245f4fbae5 Author: Alastair Poole <[email protected]> Date: Sat May 16 11:57:57 2020 +0100 FreeBSD: Don't duplicate code. --- src/bin/system/process.c | 238 +++++++++++++++++------------------------------ 1 file changed, 85 insertions(+), 153 deletions(-) diff --git a/src/bin/system/process.c b/src/bin/system/process.c index 8914b76..409660d 100644 --- a/src/bin/system/process.c +++ b/src/bin/system/process.c @@ -787,69 +787,6 @@ _pid_max(void) return pid_max; } -static Eina_List * -_process_list_freebsd_fallback_get(void) -{ - Eina_List *list; - struct rusage *usage; - struct kinfo_proc kp; - int mib[4]; - size_t len; - static int pid_max, pagesize = 0; - - if (!pagesize) - pagesize = getpagesize(); - - pid_max = _pid_max(); - - list = NULL; - - len = sizeof(int); - if (sysctlnametomib("kern.proc.pid", mib, &len) == -1) - return NULL; - - for (int i = 1; i <= pid_max; i++) - { - mib[3] = i; - len = sizeof(kp); - if (sysctl(mib, 4, &kp, &len, NULL, 0) == -1) - { - continue; - } - - if (kp.ki_flag & P_KPROC) - continue; - - Proc_Info *p = calloc(1, sizeof(Proc_Info)); - if (!p) return NULL; - - p->pid = kp.ki_pid; - p->uid = kp.ki_uid; - p->command = strdup(kp.ki_comm); - p->cpu_id = kp.ki_oncpu; - if (p->cpu_id == -1) - p->cpu_id = kp.ki_lastcpu; - - usage = &kp.ki_rusage; - - p->cpu_time = (usage->ru_utime.tv_sec * 1000000) + - usage->ru_utime.tv_usec + (usage->ru_stime.tv_sec * 1000000) + - usage->ru_stime.tv_usec; - p->cpu_time /= 10000; - p->state = _process_state_name(kp.ki_stat); - p->mem_virt = kp.ki_size; - p->mem_rss = kp.ki_rssize * pagesize; - p->mem_size = p->mem_virt; - p->nice = kp.ki_nice - NZERO; - p->priority = kp.ki_pri.pri_level - PZERO; - p->numthreads = kp.ki_numthreads; - - list = eina_list_append(list, p); - } - - return list; -} - static void _cmd_get(Proc_Info *p, struct kinfo_proc *kp) { @@ -898,6 +835,84 @@ _cmd_get(Proc_Info *p, struct kinfo_proc *kp) p->command = strdup(name); } +static Proc_Info * +_proc_thread_info(struct kinfo_proc *kp, Eina_Bool is_thread) +{ + struct rusage *usage; + Proc_Info *p; + static int pagesize = 0; + + if (!pagesize) pagesize = getpagesize(); + + p = calloc(1, sizeof(Proc_Info)); + if (!p) return NULL; + + p->pid = kp->ki_pid; + p->uid = kp->ki_uid; + + if (!is_thread) + _cmd_get(p, kp); + + p->cpu_id = kp->ki_oncpu; + if (p->cpu_id == -1) + p->cpu_id = kp->ki_lastcpu; + + usage = &kp->ki_rusage; + + p->cpu_time = (usage->ru_utime.tv_sec * 1000000) + usage->ru_utime.tv_usec + + (usage->ru_stime.tv_sec * 1000000) + usage->ru_stime.tv_usec; + p->cpu_time /= 10000; + p->state = _process_state_name(kp->ki_stat); + p->mem_virt = kp->ki_size; + p->mem_rss = kp->ki_rssize * pagesize; + p->mem_size = p->mem_virt; + p->nice = kp->ki_nice - NZERO; + p->priority = kp->ki_pri.pri_level - PZERO; + p->numthreads = kp->ki_numthreads; + + p->tid = kp->ki_tid; + p->thread_name = strdup(kp->ki_tdname); + + return p; +} + +static Eina_List * +_process_list_freebsd_fallback_get(void) +{ + Eina_List *list; + struct kinfo_proc kp; + int mib[4]; + size_t len; + static int pid_max, pagesize = 0; + + if (!pagesize) + pagesize = getpagesize(); + + pid_max = _pid_max(); + + list = NULL; + + len = sizeof(int); + if (sysctlnametomib("kern.proc.pid", mib, &len) == -1) + return NULL; + + for (int i = 1; i <= pid_max; i++) + { + mib[3] = i; + len = sizeof(kp); + if (sysctl(mib, 4, &kp, &len, NULL, 0) == -1) + continue; + + if (kp.ki_flag & P_KPROC) + continue; + + Proc_Info *p = _proc_thread_info(&kp, EINA_FALSE); + if (p) + list = eina_list_append(list, p); + } + + return list; +} static Eina_List * _process_list_freebsd_get(void) @@ -905,7 +920,6 @@ _process_list_freebsd_get(void) kvm_t *kern; Eina_List *list = NULL; struct kinfo_proc *kps, *kp; - struct rusage *usage; char errbuf[_POSIX2_LINE_MAX]; int pid_count; static int pagesize = 0; @@ -930,31 +944,12 @@ _process_list_freebsd_get(void) kp = &kps[i]; - Proc_Info *p = calloc(1, sizeof(Proc_Info)); - if (!p) continue; - p->pid = kp->ki_pid; - p->uid = kp->ki_uid; - - p->cpu_id = kp->ki_oncpu; - if (p->cpu_id == -1) - p->cpu_id = kp->ki_lastcpu; - - _cmd_get(p, kp); - - usage = &kp->ki_rusage; - p->cpu_time = (usage->ru_utime.tv_sec * 1000000) + - usage->ru_utime.tv_usec + (usage->ru_stime.tv_sec * 1000000) + - usage->ru_stime.tv_usec; - p->cpu_time /= 10000; - p->state = _process_state_name(kp->ki_stat); - p->mem_virt = kp->ki_size; - p->mem_rss = kp->ki_rssize * pagesize; - p->mem_size = p->mem_virt; - p->nice = kp->ki_nice - NZERO; - p->priority = kp->ki_pri.pri_level - PZERO; - p->numthreads = kp->ki_numthreads; - - list = eina_list_append(list, p); + Proc_Info *p = _proc_thread_info(kp, EINA_FALSE); + if (p) + { + _cmd_get(p, kp); + list = eina_list_append(list, p); + } } kvm_close(kern); @@ -965,7 +960,6 @@ _process_list_freebsd_get(void) static Proc_Info * _proc_info_by_pid_fallback(int pid) { - struct rusage *usage; struct kinfo_proc kp; int mib[4]; size_t len; @@ -983,69 +977,7 @@ _proc_info_by_pid_fallback(int pid) if (sysctl(mib, 4, &kp, &len, NULL, 0) == -1) return NULL; - Proc_Info *p = calloc(1, sizeof(Proc_Info)); - if (!p) return NULL; - - p->pid = kp.ki_pid; - p->uid = kp.ki_uid; - _cmd_get(p, &kp); - p->cpu_id = kp.ki_oncpu; - if (p->cpu_id == -1) - p->cpu_id = kp.ki_lastcpu; - - usage = &kp.ki_rusage; - - p->cpu_time = (usage->ru_utime.tv_sec * 1000000) + usage->ru_utime.tv_usec + - (usage->ru_stime.tv_sec * 1000000) + usage->ru_stime.tv_usec; - p->cpu_time /= 10000; - p->state = _process_state_name(kp.ki_stat); - p->mem_virt = kp.ki_size; - p->mem_rss = kp.ki_rssize * pagesize; - p->mem_size = p->mem_virt; - p->nice = kp.ki_nice - NZERO; - p->priority = kp.ki_pri.pri_level - PZERO; - p->numthreads = kp.ki_numthreads; - p->tid = kp.ki_tid; - - return p; -} - -static Proc_Info * -_proc_thread_info(struct kinfo_proc *kp, Eina_Bool is_thread) -{ - struct rusage *usage; - Proc_Info *p; - static int pagesize = 0; - - if (!pagesize) pagesize = getpagesize(); - - p = calloc(1, sizeof(Proc_Info)); - - p->pid = kp->ki_pid; - p->uid = kp->ki_uid; - - if (!is_thread) - _cmd_get(p, kp); - - p->cpu_id = kp->ki_oncpu; - if (p->cpu_id == -1) - p->cpu_id = kp->ki_lastcpu; - - usage = &kp->ki_rusage; - - p->cpu_time = (usage->ru_utime.tv_sec * 1000000) + usage->ru_utime.tv_usec + - (usage->ru_stime.tv_sec * 1000000) + usage->ru_stime.tv_usec; - p->cpu_time /= 10000; - p->state = _process_state_name(kp->ki_stat); - p->mem_virt = kp->ki_size; - p->mem_rss = kp->ki_rssize * pagesize; - p->mem_size = p->mem_virt; - p->nice = kp->ki_nice - NZERO; - p->priority = kp->ki_pri.pri_level - PZERO; - p->numthreads = kp->ki_numthreads; - - p->tid = kp->ki_tid; - p->thread_name = strdup(kp->ki_tdname); + Proc_Info *p = _proc_thread_info(&kp, EINA_FALSE); return p; } --
