netstar pushed a commit to branch master.

http://git.enlightenment.org/apps/evisum.git/commit/?id=f575ded30070376f830ac4c1ad9f1f85b0ffa1c3

commit f575ded30070376f830ac4c1ad9f1f85b0ffa1c3
Author: Alastair Poole <nets...@gmail.com>
Date:   Tue Feb 2 21:33:09 2021 +0000

    process: states.
    
    Untested
---
 src/bin/system/process.c | 129 ++++++++++++++++++-----------------------------
 1 file changed, 49 insertions(+), 80 deletions(-)

diff --git a/src/bin/system/process.c b/src/bin/system/process.c
index e25b888..f9d75fe 100644
--- a/src/bin/system/process.c
+++ b/src/bin/system/process.c
@@ -58,90 +58,47 @@ proc_info_kthreads_show_get(void)
    return _show_kthreads;
 }
 
-static const char *
-_process_state_name(char state)
+typedef struct _States States;
+struct _States
 {
-   const char *statename = NULL;
-#if defined(__linux__)
+   int         id;
+   const char *name;
+};
 
-   switch (state)
-     {
-      case 'D':
-        statename = "dsleep";
-        break;
-
-      case 'I':
-        statename = "idle";
-        break;
-
-      case 'R':
-        statename = "run";
-        break;
-
-      case 'S':
-        statename = "sleep";
-        break;
-
-      case 'T':
-      case 't':
-        statename = "stop";
-        break;
-
-      case 'X':
-        statename = "dead";
-        break;
-
-      case 'Z':
-        statename = "zomb";
-        break;
-     }
+static const States _states[] =
+{
+#if defined(__linux__)
+   { 'd', "dsleep" },
+   { 'i', "idle" },
+   { 'r', "run" },
+   { 's', "sleep" },
+   { 't', "stop" },
+   { 'x', "dead" },
+   { 'z', "zombie" },
 #else
-   switch (state)
-     {
-      case SIDL:
-        statename = "idle";
-        break;
-
-      case SRUN:
-        statename = "run";
-        break;
-
-      case SSLEEP:
-        statename = "sleep";
-        break;
-
-      case SSTOP:
-        statename = "stop";
-        break;
-
+   { SIDL, "idle"},
+   { SRUN,  "run" },
+   { SSLEEP, "sleep" },
+   { SSTOP, "stop" },
 #if !defined(__MacOS__)
 #if !defined(__OpenBSD__)
-      case SWAIT:
-        statename = "wait";
-        break;
-
-      case SLOCK:
-        statename = "lock";
-        break;
-
-#endif
-      case SZOMB:
-        statename = "zomb";
-        break;
-
+   { SWAIT, "wait" },
+   { SLOCK, "lock" },
+   { SZOMB, "zombie" },
 #endif
 #if defined(__OpenBSD__)
-      case SDEAD:
-        statename = "dead";
-        break;
-
-      case SONPROC:
-        statename = "onproc";
-        break;
+   { SDEAD, "dead" },
+   { SONPROC, "onproc"},
+#endif
 #endif
-     }
 #endif
-   return statename;
+};
+
+
+static const char *
+_process_state_name(char state)
+{
+   return _states[tolower(state)].name;
 }
 
 #if defined(__linux__)
@@ -371,7 +328,8 @@ _process_list_linux_get(void)
         p->cpu_id = st.psr;
         p->start = st.start_time;
         p->run_time = st.run_time;
-        p->state = _process_state_name(st.state);
+        state = _process_state_name(kp->ki_stat);
+        snprintf(p->state, sizeof(p->state), "%s", state);
         p->cpu_time = st.utime + st.stime;
         p->nice = st.nice;
         p->priority = st.pri;
@@ -426,6 +384,7 @@ _proc_thread_info(Proc_Info *p)
 Proc_Info *
 proc_info_by_pid(int pid)
 {
+   const char *state;
    Stat st;
    char buf[4096];
 
@@ -442,7 +401,8 @@ proc_info_by_pid(int pid)
    p->cpu_id = st.psr;
    p->start = st.start_time;
    p->run_time = st.run_time;
-   p->state = _process_state_name(st.state);
+   state = _process_state_name(st.state);
+   snprintf(p->state, sizeof(p->state), "%s", state);
    p->cpu_time = st.utime + st.stime;
    p->priority = st.pri;
    p->nice = st.nice;
@@ -726,6 +686,7 @@ _cmd_get(Proc_Info *p, int pid)
 static Proc_Info *
 _proc_pidinfo(size_t pid)
 {
+   const char *state;
    struct proc_taskallinfo taskinfo;
    int size = proc_pidinfo(pid, PROC_PIDTASKALLINFO, 0, &taskinfo, 
sizeof(taskinfo));
    if (size != sizeof(taskinfo)) return NULL;
@@ -741,7 +702,8 @@ _proc_pidinfo(size_t pid)
       taskinfo.ptinfo.pti_total_system;
    p->cpu_time /= 10000000;
    p->start = taskinfo.pbsd.pbi_start_tvsec;
-   p->state = _process_state_name(taskinfo.pbsd.pbi_status);
+   state = _process_state_name(taskinfo.pbsd.pbi_status);
+   snprintf(p->state, sizeof(p->state), "%s", state);
    p->mem_size = p->mem_virt = taskinfo.ptinfo.pti_virtual_size;
    p->mem_rss = taskinfo.ptinfo.pti_resident_size;
    p->priority = taskinfo.ptinfo.pti_priority;
@@ -805,6 +767,7 @@ _process_list_macos_get(void)
 Proc_Info *
 proc_info_by_pid(int pid)
 {
+   const char *state;
    struct proc_taskallinfo taskinfo;
    struct proc_workqueueinfo workqueue;
    size_t size;
@@ -828,7 +791,8 @@ proc_info_by_pid(int pid)
       taskinfo.ptinfo.pti_total_system;
    p->cpu_time /= 10000000;
    p->start = taskinfo.pbsd.pbi_start_tvsec;
-   p->state = _process_state_name(taskinfo.pbsd.pbi_status);
+   state = _process_state_name(taskinfo.pbsd.pbi_status);
+   snprintf(p->state, sizeof(p->state), "%s", state);
    p->mem_size = p->mem_virt = taskinfo.ptinfo.pti_virtual_size;
    p->mem_rss = taskinfo.ptinfo.pti_resident_size;
    p->priority = taskinfo.ptinfo.pti_priority;
@@ -915,6 +879,7 @@ static Proc_Info *
 _proc_thread_info(struct kinfo_proc *kp, Eina_Bool is_thread)
 {
    struct rusage *usage;
+   const char *state;
    Proc_Info *p;
    static int pagesize = 0;
 
@@ -939,7 +904,11 @@ _proc_thread_info(struct kinfo_proc *kp, Eina_Bool 
is_thread)
    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) / 10000;
    p->run_time = (kp->ki_runtime + 500000) / 1000000;
-   p->state = _process_state_name(kp->ki_stat);
+   if (kp->ki_stat == SSLEEP)
+     state = kp->ki_wmesg;
+   else
+     state = _process_state_name(kp->ki_stat);
+   snprintf(p->state, sizeof(p->state), "%s", state);
    p->mem_virt = kp->ki_size;
    p->mem_rss = MEMSZ(kp->ki_rssize) * MEMSZ(pagesize);
    p->start = kp->ki_start.tv_sec;

-- 


Reply via email to