X-Git-Url: https://git.libre-soc.org/?p=mesa.git;a=blobdiff_plain;f=src%2Futil%2Fos_misc.c;h=954900e3c5d7dd4ceaf5497c2d7e9eb5c15db755;hp=3a1e7eaddabfbfd81997b8198c6acd2f270e6e66;hb=033dcb2978c6d95d42da944b8147228d239d32f4;hpb=e740e7a6f018738b02ce97db172d6749feeadce1 diff --git a/src/util/os_misc.c b/src/util/os_misc.c index 3a1e7eaddab..954900e3c5d 100644 --- a/src/util/os_misc.c +++ b/src/util/os_misc.c @@ -27,33 +27,41 @@ #include "os_misc.h" +#include "os_file.h" #include -#if defined(PIPE_SUBSYSTEM_WINDOWS_USER) +#if DETECT_OS_WINDOWS #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers #endif #include #include +#include #else #include #include +#include +#include #endif -#if defined(PIPE_OS_LINUX) || defined(PIPE_OS_CYGWIN) || defined(PIPE_OS_SOLARIS) || defined(PIPE_OS_HURD) +#if DETECT_OS_ANDROID +# define LOG_TAG "MESA" +# include +# include +#elif DETECT_OS_LINUX || DETECT_OS_CYGWIN || DETECT_OS_SOLARIS || DETECT_OS_HURD # include -#elif defined(PIPE_OS_APPLE) || defined(PIPE_OS_BSD) +#elif DETECT_OS_APPLE || DETECT_OS_BSD # include -#elif defined(PIPE_OS_HAIKU) +#elif DETECT_OS_HAIKU # include -#elif defined(PIPE_OS_WINDOWS) +#elif DETECT_OS_WINDOWS # include #else #error unexpected platform in os_sysinfo.c @@ -88,7 +96,7 @@ os_log_message(const char *message) fout = stderr; } -#if defined(PIPE_SUBSYSTEM_WINDOWS_USER) +#if DETECT_OS_WINDOWS OutputDebugStringA(message); if(GetConsoleWindow() && !IsDebuggerPresent()) { fflush(stdout); @@ -99,10 +107,13 @@ os_log_message(const char *message) fputs(message, fout); fflush(fout); } -#else /* !PIPE_SUBSYSTEM_WINDOWS_USER */ +#else /* !DETECT_OS_WINDOWS */ fflush(stdout); fputs(message, fout); fflush(fout); +# if DETECT_OS_ANDROID + LOG_PRI(ANDROID_LOG_ERROR, LOG_TAG, "%s", message); +# endif #endif } @@ -124,7 +135,7 @@ os_get_option(const char *name) bool os_get_total_physical_memory(uint64_t *size) { -#if defined(PIPE_OS_LINUX) || defined(PIPE_OS_CYGWIN) || defined(PIPE_OS_SOLARIS) || defined(PIPE_OS_HURD) +#if DETECT_OS_LINUX || DETECT_OS_CYGWIN || DETECT_OS_SOLARIS || DETECT_OS_HURD const long phys_pages = sysconf(_SC_PHYS_PAGES); const long page_size = sysconf(_SC_PAGE_SIZE); @@ -133,25 +144,25 @@ os_get_total_physical_memory(uint64_t *size) *size = (uint64_t)phys_pages * (uint64_t)page_size; return true; -#elif defined(PIPE_OS_APPLE) || defined(PIPE_OS_BSD) +#elif DETECT_OS_APPLE || DETECT_OS_BSD size_t len = sizeof(*size); int mib[2]; mib[0] = CTL_HW; -#if defined(PIPE_OS_APPLE) +#if DETECT_OS_APPLE mib[1] = HW_MEMSIZE; -#elif defined(PIPE_OS_NETBSD) || defined(PIPE_OS_OPENBSD) +#elif DETECT_OS_NETBSD || DETECT_OS_OPENBSD mib[1] = HW_PHYSMEM64; -#elif defined(PIPE_OS_FREEBSD) +#elif DETECT_OS_FREEBSD mib[1] = HW_REALMEM; -#elif defined(PIPE_OS_DRAGONFLY) +#elif DETECT_OS_DRAGONFLY mib[1] = HW_PHYSMEM; #else #error Unsupported *BSD #endif return (sysctl(mib, 2, size, &len, NULL, 0) == 0); -#elif defined(PIPE_OS_HAIKU) +#elif DETECT_OS_HAIKU system_info info; status_t ret; @@ -161,7 +172,7 @@ os_get_total_physical_memory(uint64_t *size) *size = (uint64_t)info.max_pages * (uint64_t)B_PAGE_SIZE; return true; -#elif defined(PIPE_OS_WINDOWS) +#elif DETECT_OS_WINDOWS MEMORYSTATUSEX status; BOOL ret; @@ -174,3 +185,31 @@ os_get_total_physical_memory(uint64_t *size) return false; #endif } + +bool +os_get_available_system_memory(uint64_t *size) +{ +#if DETECT_OS_LINUX + char *meminfo = os_read_file("/proc/meminfo", NULL); + if (!meminfo) + return false; + + char *str = strstr(meminfo, "MemAvailable:"); + if (!str) { + free(meminfo); + return false; + } + + uint64_t kb_mem_available; + if (sscanf(str, "MemAvailable: %" PRIx64, &kb_mem_available) == 1) { + free(meminfo); + *size = kb_mem_available << 10; + return true; + } + + free(meminfo); + return false; +#else + return false; +#endif +}