1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "base/sys_info.h" 6 7 #include <sys/param.h> 8 #include <sys/shm.h> 9 #include <sys/sysctl.h> 10 11 #include "base/logging.h" 12 13 namespace { 14 15 int64 AmountOfMemory(int pages_name) { 16 long pages = sysconf(pages_name); 17 long page_size = sysconf(_SC_PAGESIZE); 18 if (pages == -1 || page_size == -1) { 19 NOTREACHED(); 20 return 0; 21 } 22 return static_cast<int64>(pages) * page_size; 23 } 24 25 } // namespace 26 27 namespace base { 28 29 // static 30 int SysInfo::NumberOfProcessors() { 31 int mib[] = { CTL_HW, HW_NCPU }; 32 int ncpu; 33 size_t size = sizeof(ncpu); 34 if (sysctl(mib, arraysize(mib), &ncpu, &size, NULL, 0) < 0) { 35 NOTREACHED(); 36 return 1; 37 } 38 return ncpu; 39 } 40 41 // static 42 int64 SysInfo::AmountOfPhysicalMemory() { 43 return AmountOfMemory(_SC_PHYS_PAGES); 44 } 45 46 // static 47 int64 SysInfo::AmountOfAvailablePhysicalMemory() { 48 return AmountOfMemory(_SC_AVPHYS_PAGES); 49 } 50 51 // static 52 size_t SysInfo::MaxSharedMemorySize() { 53 int mib[] = { CTL_KERN, KERN_SHMINFO, KERN_SHMINFO_SHMMAX }; 54 size_t limit; 55 size_t size = sizeof(limit); 56 if (sysctl(mib, arraysize(mib), &limit, &size, NULL, 0) < 0) { 57 NOTREACHED(); 58 return 0; 59 } 60 return limit; 61 } 62 63 // static 64 std::string SysInfo::CPUModelName() { 65 int mib[] = { CTL_HW, HW_MODEL }; 66 char name[256]; 67 size_t len = arraysize(name); 68 if (sysctl(mib, arraysize(mib), name, &len, NULL, 0) < 0) { 69 NOTREACHED(); 70 return std::string(); 71 } 72 return name; 73 } 74 75 } // namespace base 76