davemds pushed a commit to branch master.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=6eaefe37fc6e6b9e2631b04d7b9bfd415250631e

commit 6eaefe37fc6e6b9e2631b04d7b9bfd415250631e
Author: Dave Andreoli <[email protected]>
Date:   Sun Jan 29 14:41:38 2017 +0100

    mem gadget: try to improve values calculation
    
    It's hard to mimic "free" output parsing /proc/meminfo... we should really 
use sysinfo.h
    directly (like free does).
    
    btw, on my system now the values are really near the "free" output
---
 src/modules/sysinfo/memusage/memusage.c      | 73 +++++++++++++++++++---------
 src/modules/sysinfo/memusage/memusage.h      |  5 +-
 src/modules/sysinfo/memusage/memusage_proc.c | 35 ++++++++++---
 src/modules/sysinfo/sysinfo.h                |  5 +-
 4 files changed, 83 insertions(+), 35 deletions(-)

diff --git a/src/modules/sysinfo/memusage/memusage.c 
b/src/modules/sysinfo/memusage/memusage.c
index 9576f42..14c6af9 100644
--- a/src/modules/sysinfo/memusage/memusage.c
+++ b/src/modules/sysinfo/memusage/memusage.c
@@ -9,11 +9,12 @@ struct _Thread_Config
    int mem_percent;
    int swp_percent;
    unsigned long mem_total;
-   unsigned long mem_active;
+   unsigned long mem_used;
    unsigned long mem_cached;
    unsigned long mem_buffers;
+   unsigned long mem_shared;
    unsigned long swp_total;
-   unsigned long swp_active;
+   unsigned long swp_used;
 };
 
 static void
@@ -28,9 +29,9 @@ _memusage_popup_update(Instance *inst)
 
    if (inst->cfg->memusage.mem_total)
      {
-        pbar = evas_object_data_get(inst->cfg->memusage.popup, 
"mem_active_pbar");
-        val_mb = inst->cfg->memusage.mem_active / 1024;
-        val_perc = 100 * ((float)inst->cfg->memusage.mem_active /
+        pbar = evas_object_data_get(inst->cfg->memusage.popup, 
"mem_used_pbar");
+        val_mb = inst->cfg->memusage.mem_used / 1024;
+        val_perc = 100 * ((float)inst->cfg->memusage.mem_used /
                           (float)inst->cfg->memusage.mem_total);
         snprintf(buf, sizeof(buf), "%d MB (%d %%)", val_mb, val_perc);
         elm_progressbar_value_set(pbar, (float)val_perc / 100);
@@ -51,13 +52,21 @@ _memusage_popup_update(Instance *inst)
         snprintf(buf, sizeof(buf), "%d MB (%d %%)", val_mb, val_perc);
         elm_progressbar_value_set(pbar, (float)val_perc / 100);
         elm_progressbar_unit_format_set(pbar, buf);
+
+        pbar = evas_object_data_get(inst->cfg->memusage.popup, 
"mem_shared_pbar");
+        val_mb = inst->cfg->memusage.mem_shared / 1024;
+        val_perc = 100 * ((float)inst->cfg->memusage.mem_shared /
+                          (float)inst->cfg->memusage.mem_total);
+        snprintf(buf, sizeof(buf), "%d MB (%d %%)", val_mb, val_perc);
+        elm_progressbar_value_set(pbar, (float)val_perc / 100);
+        elm_progressbar_unit_format_set(pbar, buf);
      }
 
    if (inst->cfg->memusage.swp_total)
      {
         pbar = evas_object_data_get(inst->cfg->memusage.popup, "swap_pbar");
-        val_mb = inst->cfg->memusage.swp_active / 1024;
-        val_perc = 100 * ((float)inst->cfg->memusage.swp_active /
+        val_mb = inst->cfg->memusage.swp_used / 1024;
+        val_perc = 100 * ((float)inst->cfg->memusage.swp_used /
                           (float)inst->cfg->memusage.swp_total);
         snprintf(buf, sizeof(buf), "%d MB (%d %%)", val_mb, val_perc);
         elm_progressbar_value_set(pbar, (float)val_perc / 100);
@@ -70,17 +79,18 @@ _memusage_face_update(Instance *inst)
 {
    Edje_Message_Int_Set *msg;
 
-   msg = malloc(sizeof(Edje_Message_Int_Set) + 8 * sizeof(int));
+   msg = malloc(sizeof(Edje_Message_Int_Set) + 9 * sizeof(int));
    EINA_SAFETY_ON_NULL_RETURN(msg);
    msg->count = 2;
    msg->val[0] = inst->cfg->memusage.mem_percent;
    msg->val[1] = inst->cfg->memusage.swp_percent;
    msg->val[2] = inst->cfg->memusage.mem_total;
-   msg->val[3] = inst->cfg->memusage.mem_active;
+   msg->val[3] = inst->cfg->memusage.mem_used;
    msg->val[4] = inst->cfg->memusage.mem_cached;
    msg->val[5] = inst->cfg->memusage.mem_buffers;
-   msg->val[6] = inst->cfg->memusage.swp_total;
-   msg->val[7] = inst->cfg->memusage.swp_active;
+   msg->val[6] = inst->cfg->memusage.mem_cached;
+   msg->val[7] = inst->cfg->memusage.swp_total;
+   msg->val[8] = inst->cfg->memusage.swp_used;
    edje_object_message_send(elm_layout_edje_get(inst->cfg->memusage.o_gadget),
                             EDJE_MESSAGE_INT_SET, 1, msg);
    free(msg);
@@ -150,7 +160,7 @@ _memusage_popup_create(Instance *inst)
 
    label = elm_label_add(table);
    E_EXPAND(label); E_ALIGN(label, 0.0, 0.5);
-   elm_object_text_set(label, _("Active"));
+   elm_object_text_set(label, _("Used"));
    elm_table_pack(table, label, 0, 1, 1, 1);
    evas_object_show(label);
    pbar = elm_progressbar_add(table);
@@ -158,7 +168,7 @@ _memusage_popup_create(Instance *inst)
    elm_progressbar_span_size_set(pbar, 200 * e_scale);
    elm_table_pack(table, pbar, 1, 1, 1, 1);
    evas_object_show(pbar);
-   evas_object_data_set(popup, "mem_active_pbar", pbar);
+   evas_object_data_set(popup, "mem_used_pbar", pbar);
 
    label = elm_label_add(table);
    E_EXPAND(label); E_ALIGN(label, 0.0, 0.5);
@@ -184,6 +194,18 @@ _memusage_popup_create(Instance *inst)
    evas_object_show(pbar);
    evas_object_data_set(popup, "mem_cached_pbar", pbar);
 
+   label = elm_label_add(table);
+   E_EXPAND(label); E_ALIGN(label, 0.0, 0.5);
+   elm_object_text_set(label, _("Shared"));
+   elm_table_pack(table, label, 0, 4, 1, 1);
+   evas_object_show(label);
+   pbar = elm_progressbar_add(table);
+   E_EXPAND(pbar); E_FILL(pbar);
+   elm_progressbar_span_size_set(pbar, 200 * e_scale);
+   elm_table_pack(table, pbar, 1, 4, 1, 1);
+   evas_object_show(pbar);
+   evas_object_data_set(popup, "mem_shared_pbar", pbar);
+
    // swp frame
    frame = elm_frame_add(popup);
    E_EXPAND(frame); E_FILL(frame);
@@ -267,13 +289,13 @@ _memusage_cb_usage_check_main(void *data, Ecore_Thread 
*th)
    for (;;)
      {
         if (ecore_thread_check(th)) break;
-        _memusage_proc_getusage(&thc->mem_total, &thc->mem_active,
-                                &thc->mem_cached, &thc->mem_buffers,
-                                &thc->swp_total, &thc->swp_active);
+        _memusage_proc_getusage(&thc->mem_total, &thc->mem_used,
+                         &thc->mem_cached, &thc->mem_buffers, &thc->mem_shared,
+                         &thc->swp_total, &thc->swp_used);
         if (thc->mem_total > 0)
-          thc->mem_percent = 100 * ((float)thc->mem_active / 
(float)thc->mem_total);
+          thc->mem_percent = 100 * ((float)thc->mem_used / 
(float)thc->mem_total);
         if (thc->swp_total > 0)
-          thc->swp_percent = 100 * ((float)thc->swp_active / 
(float)thc->swp_total);
+          thc->swp_percent = 100 * ((float)thc->swp_used / 
(float)thc->swp_total);
 
         ecore_thread_feedback(th, NULL);
         if (ecore_thread_check(th)) break;
@@ -297,11 +319,12 @@ _memusage_cb_usage_check_notify(void *data,
    inst->cfg->memusage.mem_percent = thc->mem_percent;
    inst->cfg->memusage.swp_percent = thc->swp_percent;
    inst->cfg->memusage.mem_total = thc->mem_total;
-   inst->cfg->memusage.mem_active = thc->mem_active;
+   inst->cfg->memusage.mem_used = thc->mem_used;
    inst->cfg->memusage.mem_cached = thc->mem_cached;
    inst->cfg->memusage.mem_buffers = thc->mem_buffers;
+   inst->cfg->memusage.mem_shared = thc->mem_shared;
    inst->cfg->memusage.swp_total = thc->swp_total;
-   inst->cfg->memusage.swp_active = thc->swp_active;
+   inst->cfg->memusage.swp_used = thc->swp_used;
    _memusage_face_update(inst);
 }
 
@@ -447,11 +470,12 @@ _conf_item_get(int *id)
    ci->memusage.mem_percent = 0;
    ci->memusage.swp_percent = 0;
    ci->memusage.mem_total = 0;
-   ci->memusage.mem_active = 0;
+   ci->memusage.mem_used = 0;
    ci->memusage.mem_cached = 0;
    ci->memusage.mem_buffers = 0;
+   ci->memusage.mem_shared = 0;
    ci->memusage.swp_total = 0;
-   ci->memusage.swp_active = 0;
+   ci->memusage.swp_used = 0;
    ci->memusage.popup = NULL;
    ci->memusage.configure = NULL;
 
@@ -471,11 +495,12 @@ memusage_create(Evas_Object *parent, int *id, 
E_Gadget_Site_Orient orient EINA_U
    inst->cfg->memusage.mem_percent = 0;
    inst->cfg->memusage.swp_percent = 0;
    inst->cfg->memusage.mem_total = 0;
-   inst->cfg->memusage.mem_active = 0;
+   inst->cfg->memusage.mem_used = 0;
    inst->cfg->memusage.mem_cached = 0;
    inst->cfg->memusage.mem_buffers = 0;
+   inst->cfg->memusage.mem_shared = 0;
    inst->cfg->memusage.swp_total = 0;
-   inst->cfg->memusage.swp_active = 0;
+   inst->cfg->memusage.swp_used = 0;
    inst->cfg->memusage.popup = NULL;
    inst->cfg->memusage.configure = NULL;
    inst->o_main = elm_box_add(parent);
diff --git a/src/modules/sysinfo/memusage/memusage.h 
b/src/modules/sysinfo/memusage/memusage.h
index c07736f..7788cf2 100644
--- a/src/modules/sysinfo/memusage/memusage.h
+++ b/src/modules/sysinfo/memusage/memusage.h
@@ -7,10 +7,11 @@ void _memusage_config_updated(Instance *inst);
 Evas_Object *memusage_configure(Instance *inst);
 
 void _memusage_proc_getusage(unsigned long *mem_total,
-                             unsigned long *mem_active,
+                             unsigned long *mem_used,
                              unsigned long *mem_cached,
                              unsigned long *mem_buffers,
+                             unsigned long *mem_shared,
                              unsigned long *swp_total,
-                             unsigned long *swp_active);
+                             unsigned long *swp_used);
 
 #endif
diff --git a/src/modules/sysinfo/memusage/memusage_proc.c 
b/src/modules/sysinfo/memusage/memusage_proc.c
index 49f2bc2..1c4257c 100644
--- a/src/modules/sysinfo/memusage/memusage_proc.c
+++ b/src/modules/sysinfo/memusage/memusage_proc.c
@@ -12,18 +12,28 @@ unsigned long _line_parse(const char *line)
 }
 
 void _memusage_proc_getusage(unsigned long *mem_total,
-                             unsigned long *mem_active,
+                             unsigned long *mem_used,
                              unsigned long *mem_cached,
                              unsigned long *mem_buffers,
+                             unsigned long *mem_shared,
                              unsigned long *swp_total,
-                             unsigned long *swp_active)
+                             unsigned long *swp_used)
 {
    char line[256];
    int found = 0;
    long tmp_swp_total = -1;
    long tmp_swp_free = -1;
+   long tmp_mem_free = -1;
    FILE *f;
 
+   *mem_total = 0;
+   *mem_used = 0;
+   *mem_cached = 0;
+   *mem_buffers = 0;
+   *mem_shared = 0;
+   *swp_total = 0;
+   *swp_used = 0;
+
    f = fopen("/proc/meminfo", "r");
    if (!f) return;
 
@@ -34,9 +44,9 @@ void _memusage_proc_getusage(unsigned long *mem_total,
              *mem_total = _line_parse(line);
              found++;
           }
-        else if (!strncmp("Active:", line, 7))
+        else if (!strncmp("MemFree:", line, 8))
           {
-             *mem_active = _line_parse(line);
+             tmp_mem_free = _line_parse(line);
              found++;
           }
         else if (!strncmp("Cached:", line, 7))
@@ -49,6 +59,11 @@ void _memusage_proc_getusage(unsigned long *mem_total,
              *mem_buffers = _line_parse(line);
              found++;
           }
+        else if (!strncmp("Shmem:", line, 6))
+          {
+             *mem_shared = _line_parse(line);
+             found++;
+          }
         else if (!strncmp("SwapTotal:", line, 10))
           {
              tmp_swp_total = _line_parse(line);
@@ -60,14 +75,20 @@ void _memusage_proc_getusage(unsigned long *mem_total,
              found++;
           }
 
-         if (found >= 6)
-           break;
+        if (found >= 7)
+          break;
      }
    fclose(f);
 
+   if ((tmp_mem_free != -1) && (*mem_total))
+     {
+        *mem_used = *mem_total - tmp_mem_free -
+                    *mem_cached - *mem_buffers - *mem_shared;
+     }
+
    if ((tmp_swp_total != -1) && (tmp_swp_free != -1))
      {
         *swp_total = tmp_swp_total;
-        *swp_active = tmp_swp_total - tmp_swp_free;
+        *swp_used = tmp_swp_total - tmp_swp_free;
      }
 }
diff --git a/src/modules/sysinfo/sysinfo.h b/src/modules/sysinfo/sysinfo.h
index e91ca67..f035132 100644
--- a/src/modules/sysinfo/sysinfo.h
+++ b/src/modules/sysinfo/sysinfo.h
@@ -208,11 +208,12 @@ struct _Config_Item
       int                  mem_percent;
       int                  swp_percent;
       unsigned long        mem_total;
-      unsigned long        mem_active;
+      unsigned long        mem_used;
       unsigned long        mem_cached;
       unsigned long        mem_buffers;
+      unsigned long        mem_shared;
       unsigned long        swp_total;
-      unsigned long        swp_active;
+      unsigned long        swp_used;
       Ecore_Thread        *usage_check_thread;
    } memusage;
    struct

-- 


Reply via email to