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 13namespace { 14 15int64 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 27namespace base { 28 29// static 30int 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 42int64 SysInfo::AmountOfPhysicalMemory() { 43 return AmountOfMemory(_SC_PHYS_PAGES); 44} 45 46// static 47int64 SysInfo::AmountOfAvailablePhysicalMemory() { 48 return AmountOfMemory(_SC_AVPHYS_PAGES); 49} 50 51// static 52size_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 64std::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