netstar pushed a commit to branch master.

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

commit d2cbe01bba0ba5c6053abf5345cab50af85853df
Author: Alastair Poole <nets...@gmail.com>
Date:   Thu Dec 17 19:20:39 2020 +0000

    proc: feedback do less, use the thread luke.
---
 src/bin/ui/ui_process_list.c | 248 ++++++++++++++++++++++++-------------------
 1 file changed, 136 insertions(+), 112 deletions(-)

diff --git a/src/bin/ui/ui_process_list.c b/src/bin/ui/ui_process_list.c
index 14346bf..23fc3f6 100644
--- a/src/bin/ui/ui_process_list.c
+++ b/src/bin/ui/ui_process_list.c
@@ -193,63 +193,6 @@ _sort_by_state(const void *p1, const void *p2)
    return strcmp(inf1->state, inf2->state);
 }
 
-static Eina_List *
-_list_sort(Ui *ui, Eina_List *list)
-{
-   switch (ui->settings.sort_type)
-     {
-      case SORT_BY_NONE:
-      case SORT_BY_PID:
-        list = eina_list_sort(list, eina_list_count(list), _sort_by_pid);
-        break;
-
-      case SORT_BY_UID:
-        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), _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->settings.sort_reverse)
-     list = eina_list_reverse(list);
-
-   return list;
-}
-
 typedef struct {
    pid_t pid;
    int64_t cpu_time_prev;
@@ -635,49 +578,93 @@ _process_list_cancel_cb(void *data, Ecore_Thread *thread)
    _proc_pid_cpu_times_free(pd);
 }
 
-static void
-_process_list_feedback_cb(void *data, Ecore_Thread *thread EINA_UNUSED,
-                          void *msg EINA_UNUSED)
+
+static Eina_List *
+_process_list_sort(Ui *ui, Eina_List *list)
 {
-   Ui *ui;
-   Ui_Data *pd;
-   Eina_List *list, *l, *l_next;
-   Proc_Info *proc;
-   Elm_Object_Item *it;
-   int len = 0;
-   list = NULL;
+   switch (ui->settings.sort_type)
+     {
+      case SORT_BY_NONE:
+      case SORT_BY_PID:
+        list = eina_list_sort(list, eina_list_count(list), _sort_by_pid);
+        break;
 
-   pd = data;
-   ui = pd->ui;
+      case SORT_BY_UID:
+        list = eina_list_sort(list, eina_list_count(list), _sort_by_uid);
+        break;
 
-   if (!eina_lock_take_try(&_lock))
-     return;
+      case SORT_BY_NICE:
+        list = eina_list_sort(list, eina_list_count(list), _sort_by_nice);
+        break;
 
-   if (!list)
-     list = proc_info_all_get();
+      case SORT_BY_PRI:
+        list = eina_list_sort(list, eina_list_count(list), _sort_by_pri);
+        break;
 
-   if (pd->search[0])
-     len = strlen(pd->search);
+      case SORT_BY_CPU:
+        list = eina_list_sort(list, eina_list_count(list), _sort_by_cpu);
+        break;
 
-   if (ui->settings.show_user)
-     {
-        static uid_t uid = 0;
+      case SORT_BY_THREADS:
+        list = eina_list_sort(list, eina_list_count(list), _sort_by_threads);
+        break;
 
-        if (!uid) uid = getuid();
+      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;
 
-        EINA_LIST_FOREACH_SAFE(list, l, l_next, proc)
+      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->settings.sort_reverse)
+     list = eina_list_reverse(list);
+
+   return list;
+}
+static Eina_List *
+_process_list_uid_trim(Eina_List *list, uid_t uid)
+{
+   Proc_Info *proc;
+   Eina_List *l, *l_next;
+
+   EINA_LIST_FOREACH_SAFE(list, l, l_next, proc)
+     {
+        if (proc->uid != uid)
           {
-             if (proc->uid != uid)
-               {
-                  proc_info_free(proc);
-                  list = eina_list_remove_list(list, l);
-               }
+             proc_info_free(proc);
+             list = eina_list_remove_list(list, l);
           }
      }
 
+   return list;
+}
+
+static Eina_List *
+_process_list_search_trim(Eina_List *list, Ui_Data *pd)
+{
+   Ui *ui;
+   Eina_List *l, *l_next;
+   Proc_Info *proc;
+
+   ui = pd->ui;
+
    EINA_LIST_FOREACH_SAFE(list, l, l_next, proc)
      {
-        if ((len && (strncasecmp(proc->command, pd->search, len))) ||
+        if ((pd->search_len && (strncasecmp(proc->command, pd->search, 
pd->search_len))) ||
             (proc->pid == ui->program_pid))
          {
             proc_info_free(proc);
@@ -689,43 +676,33 @@ _process_list_feedback_cb(void *data, Ecore_Thread 
*thread EINA_UNUSED,
          }
      }
 
-   list = _list_sort(ui, list);
-
-   _genlist_ensure_n_items(pd->genlist, eina_list_count(list));
-
-   it = elm_genlist_first_item_get(pd->genlist);
+    return list;
+}
 
-   EINA_LIST_FREE(list, proc)
-     {
-        if (!it)
-          proc_info_free(proc);
-        else
-          {
-             Proc_Info *prev = elm_object_item_data_get(it);
-             if (prev)
-               proc_info_free(prev);
+static Eina_List *
+_process_list_get(Ui_Data *pd)
+{
+   Eina_List *list;
+   Ui *ui;
 
-             elm_object_item_data_set(it, proc);
+   ui = pd->ui;
 
-             it = elm_genlist_item_next_get(it);
-          }
-     }
+   list = proc_info_all_get();
 
-   elm_genlist_realized_items_update(pd->genlist);
+   if (ui->settings.show_user)
+     list = _process_list_uid_trim(list, getuid());
 
-   eina_lock_release(&_lock);
-}
+   list = _process_list_search_trim(list, pd);
+   list = _process_list_sort(ui, list);
 
-static void
-_process_list_update(Ui_Data *pd)
-{
-   _process_list_feedback_cb(pd, NULL, NULL);
+   return list;
 }
 
 static void
 _process_list(void *data, Ecore_Thread *thread)
 {
    Ui_Data *pd;
+   Eina_List *list;
    Ui *ui;
    int delay = 1;
 
@@ -734,7 +711,8 @@ _process_list(void *data, Ecore_Thread *thread)
 
    while (!ecore_thread_check(thread))
      {
-        ecore_thread_feedback(thread, ui);
+        list = _process_list_get(pd);
+        ecore_thread_feedback(thread, list);
         for (int i = 0; i < delay * 4; i++)
           {
              if (ecore_thread_check(thread)) return;
@@ -751,6 +729,52 @@ _process_list(void *data, Ecore_Thread *thread)
      }
 }
 
+static void
+_process_list_feedback_cb(void *data, Ecore_Thread *thread EINA_UNUSED,
+                          void *msg EINA_UNUSED)
+{
+   Ui_Data *pd;
+   Eina_List *list;
+   Proc_Info *proc;
+   Elm_Object_Item *it;
+
+   pd = data;
+   list = msg;
+
+   eina_lock_take(&_lock);
+
+   _genlist_ensure_n_items(pd->genlist, eina_list_count(list));
+
+   it = elm_genlist_first_item_get(pd->genlist);
+
+   EINA_LIST_FREE(list, proc)
+     {
+        if (!it)
+          proc_info_free(proc);
+        else
+          {
+             Proc_Info *prev = elm_object_item_data_get(it);
+             if (prev)
+               proc_info_free(prev);
+
+             elm_object_item_data_set(it, proc);
+
+             it = elm_genlist_item_next_get(it);
+          }
+     }
+
+   elm_genlist_realized_items_update(pd->genlist);
+
+   eina_lock_release(&_lock);
+}
+
+static void
+_process_list_update(Ui_Data *pd)
+{
+   Eina_List *list = _process_list_get(pd);
+   _process_list_feedback_cb(pd, NULL, list);
+}
+
 static void
 _btn_icon_state_update(Evas_Object *button, Eina_Bool reverse)
 {

-- 


Reply via email to