sys_info.h revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef BASE_SYS_INFO_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define BASE_SYS_INFO_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/base_export.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "build/build_config.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BASE_EXPORT SysInfo { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return the number of logical processors/cores on the current machine. 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static int NumberOfProcessors(); 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return the number of bytes of physical memory on the current machine. 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static int64 AmountOfPhysicalMemory(); 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return the number of bytes of current available physical memory on the 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // machine. 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static int64 AmountOfAvailablePhysicalMemory(); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return the number of megabytes of physical memory on the current machine. 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static int AmountOfPhysicalMemoryMB() { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return static_cast<int>(AmountOfPhysicalMemory() / 1024 / 1024); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return the available disk space in bytes on the volume containing |path|, 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // or -1 on failure. 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static int64 AmountOfFreeDiskSpace(const FilePath& path); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns system uptime in milliseconds. 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static int64 Uptime(); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the name of the host operating system. 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static std::string OperatingSystemName(); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the version of the host operating system. 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static std::string OperatingSystemVersion(); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Retrieves detailed numeric values for the OS version. 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(port): Implement a Linux version of this method and enable the 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // corresponding unit test. 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // DON'T USE THIS ON THE MAC OR WINDOWS to determine the current OS release 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for OS version-specific feature checks and workarounds. If you must use 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // an OS version check instead of a feature check, use the base::mac::IsOS* 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // family from base/mac/mac_util.h, or base::win::GetVersion from 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // base/win/windows_version.h. 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void OperatingSystemVersionNumbers(int32* major_version, 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32* minor_version, 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32* bugfix_version); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the architecture of the running operating system. 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Exact return value may differ across platforms. 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // e.g. a 32-bit x86 kernel on a 64-bit capable CPU will return "x86", 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // whereas a x86-64 kernel on the same CPU will return "x86_64" 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static std::string OperatingSystemArchitecture(); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Avoid using this. Use base/cpu.h to get information about the CPU instead. 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // http://crbug.com/148884 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the CPU model name of the system. If it can not be figured out, 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // an empty string is returned. 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static std::string CPUModelName(); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return the smallest amount of memory (in bytes) which the VM system will 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // allocate. 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static size_t VMAllocationGranularity(); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_POSIX) && !defined(OS_MACOSX) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the maximum SysV shared memory segment size. 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static size_t MaxSharedMemorySize(); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_POSIX) && !defined(OS_MACOSX) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the name of the version entry we wish to look up in the 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Linux Standard Base release information file. 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static std::string GetLinuxStandardBaseVersionKey(); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Parses /etc/lsb-release to get version information for Google Chrome OS. 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Declared here so it can be exposed for unit testing. 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void ParseLsbRelease(const std::string& lsb_release, 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32* major_version, 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32* minor_version, 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32* bugfix_version); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the path to the lsb-release file. 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static FilePath GetLsbReleaseFilePath(); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_CHROMEOS) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the Android build's codename. 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static std::string GetAndroidBuildCodename(); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the Android build ID. 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static std::string GetAndroidBuildID(); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the device's name. 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static std::string GetDeviceName(); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static int DalvikHeapSizeMB(); 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static int DalvikHeapGrowthLimitMB(); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_ANDROID) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace base 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // BASE_SYS_INFO_H_ 114