summaryrefslogtreecommitdiffstats
path: root/xbmc/platform/freebsd/MemUtils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/platform/freebsd/MemUtils.cpp')
-rw-r--r--xbmc/platform/freebsd/MemUtils.cpp83
1 files changed, 83 insertions, 0 deletions
diff --git a/xbmc/platform/freebsd/MemUtils.cpp b/xbmc/platform/freebsd/MemUtils.cpp
new file mode 100644
index 0000000..de3e42c
--- /dev/null
+++ b/xbmc/platform/freebsd/MemUtils.cpp
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2005-2018 Team Kodi
+ * This file is part of Kodi - https://kodi.tv
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ * See LICENSES/README.md for more information.
+ */
+
+#include "utils/MemUtils.h"
+
+#include <array>
+#include <cstdlib>
+#include <cstring>
+#include <stdio.h>
+
+#include <unistd.h> /* FreeBSD can't write standalone headers */
+#include <sys/sysctl.h> /* FreeBSD can't write standalone headers */
+#include <sys/types.h>
+
+namespace KODI
+{
+namespace MEMORY
+{
+
+void* AlignedMalloc(size_t s, size_t alignTo)
+{
+ void* p;
+ posix_memalign(&p, alignTo, s);
+
+ return p;
+}
+
+void AlignedFree(void* p)
+{
+ free(p);
+}
+
+void GetMemoryStatus(MemoryStatus* buffer)
+{
+ if (!buffer)
+ return;
+
+ /* sysctl hw.physmem */
+ size_t len = 0;
+
+ /* physmem */
+ size_t physmem = 0;
+ len = sizeof(physmem);
+ if (sysctlbyname("hw.physmem", &physmem, &len, NULL, 0) == 0)
+ {
+ buffer->totalPhys = physmem;
+ }
+
+ /* pagesize */
+ size_t pagesize = 0;
+ len = sizeof(pagesize);
+ if (sysctlbyname("hw.pagesize", &pagesize, &len, NULL, 0) != 0)
+ pagesize = 4096;
+
+ /* mem_inactive */
+ size_t mem_inactive = 0;
+ len = sizeof(mem_inactive);
+ if (sysctlbyname("vm.stats.vm.v_inactive_count", &mem_inactive, &len, NULL, 0) == 0)
+ mem_inactive *= pagesize;
+
+ /* mem_cache */
+ size_t mem_cache = 0;
+ len = sizeof(mem_cache);
+ if (sysctlbyname("vm.stats.vm.v_cache_count", &mem_cache, &len, NULL, 0) == 0)
+ mem_cache *= pagesize;
+
+ /* mem_free */
+ size_t mem_free = 0;
+ len = sizeof(mem_free);
+ if (sysctlbyname("vm.stats.vm.v_free_count", &mem_free, &len, NULL, 0) == 0)
+ mem_free *= pagesize;
+
+ /* mem_avail = mem_inactive + mem_cache + mem_free */
+ buffer->availPhys = mem_inactive + mem_cache + mem_free;
+}
+
+}
+}