netstar pushed a commit to branch master.

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

commit 2114f5dd217a710dc630424f51ed7139f2a1939d
Author: Alastair Poole <[email protected]>
Date:   Fri Jun 5 11:44:54 2020 +0100

    FreeBSD: Fix Memory Display.
    
    Peter2121 is right, this is mostly bogus (depending on who you
    speak to).
---
 src/bin/system/machine.c | 48 +++++++++++++++++-------------------------------
 src/bin/ui/ui.c          | 35 ++++++++++++++++++-----------------
 src/bin/ui/ui.h          |  8 --------
 3 files changed, 35 insertions(+), 56 deletions(-)

diff --git a/src/bin/system/machine.c b/src/bin/system/machine.c
index 45228ff..25d00cc 100644
--- a/src/bin/system/machine.c
+++ b/src/bin/system/machine.c
@@ -97,7 +97,7 @@
 static void
 _memsize_bytes_to_kb(unsigned long *bytes)
 {
-   *bytes = (unsigned int)*bytes >> 10;
+   *bytes /= 1024;
 }
 #endif
 
@@ -492,7 +492,8 @@ _memory_usage_get(meminfo_t *memory)
 
    fclose(f);
 #elif defined(__FreeBSD__) || defined(__DragonFly__)
-   int total_pages = 0, free_pages = 0, inactive_pages = 0;
+   unsigned int free = 0, active = 0, inactive = 0, wired = 0;
+   unsigned int cached = 0, buffered = 0;
    long int result = 0;
    int page_size = getpagesize();
    int mib[4] = { CTL_HW, HW_PHYSMEM, 0, 0 };
@@ -500,46 +501,31 @@ _memory_usage_get(meminfo_t *memory)
    len = sizeof(memory->total);
    if (sysctl(mib, 2, &memory->total, &len, NULL, 0) == -1)
      return;
-   memory->total /= 1024;
-
-   total_pages =
-     _sysctlfromname("vm.stats.vm.v_page_count", mib, 4, &len);
-   if (total_pages < 0)
+   if ((active = _sysctlfromname("vm.stats.vm.v_active_count", mib, 4, &len)) 
< 0)
      return;
-
-   free_pages = _sysctlfromname("vm.stats.vm.v_free_count", mib, 4, &len);
-   if (free_pages < 0)
+   if ((inactive = _sysctlfromname("vm.stats.vm.v_inactive_count", mib, 4, 
&len)) < 0)
      return;
-
-   inactive_pages =
-     _sysctlfromname("vm.stats.vm.v_inactive_count", mib, 4, &len);
-   if (inactive_pages < 0)
+   if ((wired = _sysctlfromname("vm.stats.vm.v_wire_count", mib, 4, &len)) < 0)
+     return;
+   if ((cached = _sysctlfromname("vm.stats.vm.v_cache_count", mib, 4, &len)) < 
0)
+     return;
+   if ((free = _sysctlfromname("vm.stats.vm.v_free_count", mib, 4, &len)) < 0)
+     return;
+   if ((buffered = _sysctlfromname("vfs.bufspace", mib, 2, &len)) < 0)
      return;
 
-   memory->used = (total_pages - free_pages - inactive_pages) * page_size;
+   _memsize_bytes_to_kb(&memory->total);
+   memory->used = ((active + wired + cached) * page_size);
    _memsize_bytes_to_kb(&memory->used);
-
-   result = _sysctlfromname("vfs.bufspace", mib, 2, &len);
-   if (result < 0)
-     return;
-   memory->buffered = (result);
+   memory->buffered = buffered;
    _memsize_bytes_to_kb(&memory->buffered);
-
-   result = _sysctlfromname("vm.stats.vm.v_active_count", mib, 4, &len);
-   if (result < 0)
-     return;
-   memory->cached = (result * page_size);
+   memory->cached = (cached * page_size);
    _memsize_bytes_to_kb(&memory->cached);
 
-   result = _sysctlfromname("vm.stats.vm.v_cache_count", mib, 4, &len);
-   if (result < 0)
-     return;
-   memory->shared = (result * page_size);
-   _memsize_bytes_to_kb(&memory->shared);
-
    result = _sysctlfromname("vm.swap_total", mib, 2, &len);
    if (result < 0)
      return;
+
    memory->swap_total = (result / 1024);
 
    miblen = 3;
diff --git a/src/bin/ui/ui.c b/src/bin/ui/ui.c
index f1aa3bf..8349933 100644
--- a/src/bin/ui/ui.c
+++ b/src/bin/ui/ui.c
@@ -1466,28 +1466,29 @@ _evisum_resize_cb(void *data, Evas *e, Evas_Object 
*obj, void *event_info)
 const char *
 evisum_size_format(unsigned long value)
 {
-   const char *s;
-   double res = value;
+   const char *s, *unit = "BKMGTPEZY";
+   unsigned long int powi = 1;
+   unsigned int precision = 2, powj = 1;
 
-   if (value > (1024 * 1024 * 1024))
+   while (value > 1024)
      {
-        res /= (1024 * 1024 * 1024);
-        s = eina_slstr_printf("%1.1f %c", res, DATA_UNIT_GB);
+       if ((value / 1024) < powi) break;
+       if (unit[1] == '\0') break;
+       powi *= 1024;
+       ++unit;
      }
-   else if (value > (1024 * 1024))
-     {
-        res /= (1024 * 1024);
-        s = eina_slstr_printf("%1.1f %c", res, DATA_UNIT_MB);
-     }
-   else if (value > (1024))
-     {
-        res /= (1024);
-        s = eina_slstr_printf("%1.1f %c", res, DATA_UNIT_KB);
-     }
-   else
+
+   if (*unit == 'B') precision = 0;
+
+   while (precision > 0)
      {
-        s = eina_slstr_printf("%1.0f %c", res, DATA_UNIT_B);
+        powj *= 10;
+        if ((value / powi) < powj) break;
+       --precision;
      }
+
+   s = eina_slstr_printf("%1.*f %c", precision, (double) value / powi, *unit);
+
    return s;
 }
 
diff --git a/src/bin/ui/ui.h b/src/bin/ui/ui.h
index 513a746..86b8928 100644
--- a/src/bin/ui/ui.h
+++ b/src/bin/ui/ui.h
@@ -15,14 +15,6 @@
 #define FILL EVAS_HINT_FILL
 #define EXPAND EVAS_HINT_EXPAND
 
-typedef enum
-{
-   DATA_UNIT_B  = 'B',
-   DATA_UNIT_KB = 'K',
-   DATA_UNIT_MB = 'M',
-   DATA_UNIT_GB = 'G',
-} Data_Unit;
-
 typedef enum
 {
    SORT_BY_NONE,

-- 


Reply via email to