mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-03-17 06:00:35 +01:00
auxiliary/os: introduce os_get_total_physical_memory helper function
Cc: Alexander von Gluck IV <kallisti5@unixzen.com> Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
This commit is contained in:
parent
139751403c
commit
8d2745703c
2 changed files with 71 additions and 0 deletions
|
|
@ -47,6 +47,19 @@
|
|||
#endif
|
||||
|
||||
|
||||
#if defined(PIPE_OS_LINUX)
|
||||
# include <unistd.h>
|
||||
#elif defined(PIPE_OS_APPLE) || defined(PIPE_OS_BSD)
|
||||
# include <sys/sysctl.h>
|
||||
#elif defined(PIPE_OS_HAIKU)
|
||||
# include <kernel/OS.h>
|
||||
#elif defined(PIPE_OS_WINDOWS)
|
||||
# include <windows.h>
|
||||
#else
|
||||
#error unexpected platform in os_sysinfo.c
|
||||
#endif
|
||||
|
||||
|
||||
void
|
||||
os_log_message(const char *message)
|
||||
{
|
||||
|
|
@ -89,3 +102,54 @@ os_get_option(const char *name)
|
|||
return getenv(name);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return the size of the total physical memory.
|
||||
* \param size returns the size of the total physical memory
|
||||
* \return true for success, or false on failure
|
||||
*/
|
||||
bool
|
||||
os_get_total_physical_memory(uint64_t *size)
|
||||
{
|
||||
#if defined(PIPE_OS_LINUX)
|
||||
const long phys_pages = sysconf(_SC_PHYS_PAGES);
|
||||
const long page_size = sysconf(_SC_PAGE_SIZE);
|
||||
|
||||
*size = phys_pages * page_size;
|
||||
return (phys_pages > 0 && page_size > 0);
|
||||
#elif defined(PIPE_OS_APPLE) || defined(PIPE_OS_BSD)
|
||||
size_t len = sizeof(size);
|
||||
int mib[2];
|
||||
|
||||
mib[0] = CTL_HW;
|
||||
#if defined(PIPE_OS_APPLE)
|
||||
mib[1] = HW_MEMSIZE;
|
||||
#elif defined(PIPE_OS_NETBSD) || defined(PIPE_OS_OPENBSD)
|
||||
mib[1] = HW_PHYSMEM64;
|
||||
#elif defined(PIPE_OS_FREEBSD)
|
||||
mib[1] = HW_REALMEM;
|
||||
#else
|
||||
#error Unsupported *BSD
|
||||
#endif
|
||||
|
||||
return (sysctl(mib, 2, &size, &len, NULL, 0) == 0);
|
||||
#elif defined(PIPE_OS_HAIKU)
|
||||
system_info info;
|
||||
status_t ret;
|
||||
|
||||
ret = get_system_info(&info);
|
||||
*size = info.max_pages * B_PAGE_SIZE;
|
||||
return (ret == B_OK);
|
||||
#elif defined(PIPE_OS_WINDOWS)
|
||||
MEMORYSTATUSEX status;
|
||||
BOOL ret;
|
||||
|
||||
status.dwLength = sizeof(status);
|
||||
ret = GlobalMemoryStatusEx(&status);
|
||||
*size = status.ullTotalPhys;
|
||||
return (ret == TRUE);
|
||||
#else
|
||||
#error unexpected platform in os_sysinfo.c
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
|
|
|||
|
|
@ -87,6 +87,13 @@ const char *
|
|||
os_get_option(const char *name);
|
||||
|
||||
|
||||
/*
|
||||
* Get the total amount of physical memory available on the system.
|
||||
*/
|
||||
bool
|
||||
os_get_total_physical_memory(uint64_t *size);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue