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; + if ((inactive = _sysctlfromname("vm.stats.vm.v_inactive_count", mib, 4, &len)) < 0) + return; + 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; - free_pages = _sysctlfromname("vm.stats.vm.v_free_count", mib, 4, &len); - if (free_pages < 0) - return; - - inactive_pages = - _sysctlfromname("vm.stats.vm.v_inactive_count", mib, 4, &len); - if (inactive_pages < 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)) + + if (*unit == 'B') precision = 0; + + while (precision > 0) { - 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 - { - 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,