| #include <stdio.h> |
| #include <stdlib.h> |
| |
| #if defined (__NetBSD__) || defined(__OpenBSD__) || defined (__FreeBSD__) || defined (__FreeBSD_kernel__) || defined (__APPLE__) |
| #include <sys/param.h> |
| #include <sys/sysctl.h> |
| #elif defined(__linux__) || defined(__CYGWIN__) || defined(sun) || defined(__NETWARE__) |
| #include <unistd.h> |
| #elif defined(hpux) || defined(__hpux) |
| #include <sys/param.h> |
| #include <sys/pstat.h> |
| #endif |
| |
| #if defined(__NETWARE__) |
| #include <sys/sysinfo.h> |
| #endif |
| |
| #if defined(ENV_BEOS) |
| #include <be/kernel/OS.h> |
| #endif |
| |
| |
| #include "Common/Types.h" |
| |
| namespace NWindows |
| { |
| namespace NSystem |
| { |
| /************************ GetNumberOfProcessors ************************/ |
| |
| #if 1 |
| UInt32 GetNumberOfProcessors() { return 1; } |
| #else |
| #if defined (__NetBSD__) || defined(__OpenBSD__) |
| UInt32 GetNumberOfProcessors() { |
| int mib[2], value; |
| int nbcpu = 1; |
| |
| mib[0] = CTL_HW; |
| mib[1] = HW_NCPU; |
| size_t len = sizeof(size_t); |
| if (sysctl(mib, 2, &value, &len, NULL, 0) >= 0) |
| if (value > nbcpu) |
| nbcpu = value; |
| return nbcpu; |
| } |
| #elif defined (__FreeBSD__) || defined (__FreeBSD_kernel__) |
| UInt32 GetNumberOfProcessors() { |
| int nbcpu = 1; |
| size_t value; |
| size_t len = sizeof(value); |
| if (sysctlbyname("hw.ncpu", &value, &len, NULL, 0) == 0) |
| nbcpu = value; |
| return nbcpu; |
| } |
| #elif defined (__APPLE__) |
| UInt32 GetNumberOfProcessors() { |
| int nbcpu = 1,value; |
| size_t valSize = sizeof(value); |
| if (sysctlbyname ("hw.ncpu", &value, &valSize, NULL, 0) == 0) |
| nbcpu = value; |
| return nbcpu; |
| } |
| |
| #elif defined(__linux__) || defined(__CYGWIN__) || defined(sun) |
| UInt32 GetNumberOfProcessors() { |
| int nbcpu = sysconf (_SC_NPROCESSORS_CONF); |
| if (nbcpu < 1) nbcpu = 1; |
| return nbcpu; |
| } |
| #elif defined(hpux) || defined(__hpux) |
| UInt32 GetNumberOfProcessors() { |
| struct pst_dynamic psd; |
| if (pstat_getdynamic(&psd, sizeof(psd), (size_t)1, 0) != -1) |
| return (UInt32)psd.psd_proc_cnt; |
| return 1; |
| } |
| #elif defined(__NETWARE__) |
| UInt32 GetNumberOfProcessors() { |
| // int nbcpu = get_nprocs_conf(); |
| int nbcpu = get_nprocs(); |
| if (nbcpu < 1) nbcpu = 1; |
| return nbcpu; |
| } |
| #elif defined(ENV_BEOS) |
| UInt32 GetNumberOfProcessors() { |
| system_info info; |
| get_system_info(&info); |
| int nbcpu = info.cpu_count; |
| if (nbcpu < 1) nbcpu = 1; |
| return nbcpu; |
| } |
| #else |
| #warning Generic GetNumberOfProcessors |
| UInt32 GetNumberOfProcessors() { |
| return 1; |
| } |
| #endif |
| #endif |
| |
| /************************ GetRamSize ************************/ |
| UInt64 GetRamSize() { |
| UInt64 ullTotalPhys = 128 * 1024 * 1024; // default : 128MB |
| |
| #if 0 |
| #ifdef linux |
| FILE * f = fopen( "/proc/meminfo", "r" ); |
| if (f) |
| { |
| char buffer[256]; |
| unsigned long total; |
| |
| ullTotalPhys = 0; |
| |
| while (fgets( buffer, sizeof(buffer), f )) |
| { |
| /* old style /proc/meminfo ... */ |
| if (sscanf( buffer, "Mem: %lu", &total)) |
| { |
| ullTotalPhys += total; |
| } |
| |
| /* new style /proc/meminfo ... */ |
| if (sscanf(buffer, "MemTotal: %lu", &total)) |
| ullTotalPhys = ((UInt64)total)*1024; |
| } |
| fclose( f ); |
| } |
| #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__APPLE__) |
| #ifdef HW_MEMSIZE |
| uint64_t val = 0; // support 2Gb+ RAM |
| int mib[2] = { CTL_HW, HW_MEMSIZE }; |
| #else // HW_MEMSIZE |
| unsigned int val = 0; // For old system |
| int mib[2] = { CTL_HW, HW_PHYSMEM }; |
| #endif // HW_MEMSIZE |
| size_t size_sys = sizeof(val); |
| |
| sysctl(mib, 2, &val, &size_sys, NULL, 0); |
| if (val) ullTotalPhys = val; |
| #elif defined(__CYGWIN__) |
| unsigned long pagesize=4096; // FIXME - sysconf(_SC_PAGESIZE) returns 65536 !? |
| // see http://readlist.com/lists/cygwin.com/cygwin/0/3313.html |
| unsigned long maxpages=sysconf(_SC_PHYS_PAGES); |
| ullTotalPhys = ((UInt64)pagesize)*maxpages; |
| #elif defined ( sun ) || defined(__NETWARE__) |
| unsigned long pagesize=sysconf(_SC_PAGESIZE); |
| unsigned long maxpages=sysconf(_SC_PHYS_PAGES); |
| ullTotalPhys = ((UInt64)pagesize)*maxpages; |
| #elif defined(hpux) || defined(__hpux) |
| struct pst_static pst; |
| union pstun pu; |
| |
| pu.pst_static = &pst; |
| if ( pstat( PSTAT_STATIC, pu, (size_t)sizeof(pst), (size_t)0, 0 ) != -1 ) { |
| ullTotalPhys = ((UInt64)pst.physical_memory)*pst.page_size; |
| } |
| #elif defined(ENV_BEOS) |
| system_info info; |
| get_system_info(&info); |
| ullTotalPhys = info.max_pages; |
| ullTotalPhys *= 4096; |
| #else |
| #warning Generic GetRamSize |
| #endif |
| #endif |
| return ullTotalPhys; |
| } |
| |
| } |
| } |
| |