FreeBSD: Fix Memory Display.

Peter2121 is right, this is mostly bogus (depending on who you
speak to).
This commit is contained in:
Alastair Poole 2020-06-05 11:44:54 +01:00
parent 36f16a12f6
commit 2114f5dd21
3 changed files with 37 additions and 58 deletions

View File

@ -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;

View File

@ -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;
}

View File

@ -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,