1 // Copyright (c) 2012 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 #ifndef BASE_SYS_INFO_H_ 6 #define BASE_SYS_INFO_H_ 7 8 #include <map> 9 #include <string> 10 11 #include "base/base_export.h" 12 #include "base/basictypes.h" 13 #include "base/files/file_path.h" 14 #include "base/time/time.h" 15 #include "build/build_config.h" 16 17 namespace base { 18 19 class BASE_EXPORT SysInfo { 20 public: 21 // Return the number of logical processors/cores on the current machine. 22 static int NumberOfProcessors(); 23 24 // Return the number of bytes of physical memory on the current machine. 25 static int64 AmountOfPhysicalMemory(); 26 27 // Return the number of bytes of current available physical memory on the 28 // machine. 29 static int64 AmountOfAvailablePhysicalMemory(); 30 31 // Return the number of bytes of virtual memory of this process. A return 32 // value of zero means that there is no limit on the available virtual 33 // memory. 34 static int64 AmountOfVirtualMemory(); 35 36 // Return the number of megabytes of physical memory on the current machine. AmountOfPhysicalMemoryMB()37 static int AmountOfPhysicalMemoryMB() { 38 return static_cast<int>(AmountOfPhysicalMemory() / 1024 / 1024); 39 } 40 41 // Return the number of megabytes of available virtual memory, or zero if it 42 // is unlimited. AmountOfVirtualMemoryMB()43 static int AmountOfVirtualMemoryMB() { 44 return static_cast<int>(AmountOfVirtualMemory() / 1024 / 1024); 45 } 46 47 // Return the available disk space in bytes on the volume containing |path|, 48 // or -1 on failure. 49 static int64 AmountOfFreeDiskSpace(const FilePath& path); 50 51 // Returns system uptime in milliseconds. 52 static int64 Uptime(); 53 54 // Returns the name of the host operating system. 55 static std::string OperatingSystemName(); 56 57 // Returns the version of the host operating system. 58 static std::string OperatingSystemVersion(); 59 60 // Retrieves detailed numeric values for the OS version. 61 // TODO(port): Implement a Linux version of this method and enable the 62 // corresponding unit test. 63 // DON'T USE THIS ON THE MAC OR WINDOWS to determine the current OS release 64 // for OS version-specific feature checks and workarounds. If you must use 65 // an OS version check instead of a feature check, use the base::mac::IsOS* 66 // family from base/mac/mac_util.h, or base::win::GetVersion from 67 // base/win/windows_version.h. 68 static void OperatingSystemVersionNumbers(int32* major_version, 69 int32* minor_version, 70 int32* bugfix_version); 71 72 // Returns the architecture of the running operating system. 73 // Exact return value may differ across platforms. 74 // e.g. a 32-bit x86 kernel on a 64-bit capable CPU will return "x86", 75 // whereas a x86-64 kernel on the same CPU will return "x86_64" 76 static std::string OperatingSystemArchitecture(); 77 78 // Avoid using this. Use base/cpu.h to get information about the CPU instead. 79 // http://crbug.com/148884 80 // Returns the CPU model name of the system. If it can not be figured out, 81 // an empty string is returned. 82 static std::string CPUModelName(); 83 84 // Return the smallest amount of memory (in bytes) which the VM system will 85 // allocate. 86 static size_t VMAllocationGranularity(); 87 88 #if defined(OS_POSIX) && !defined(OS_MACOSX) 89 // Returns the maximum SysV shared memory segment size, or zero if there is no 90 // limit. 91 static size_t MaxSharedMemorySize(); 92 #endif // defined(OS_POSIX) && !defined(OS_MACOSX) 93 94 #if defined(OS_CHROMEOS) 95 typedef std::map<std::string, std::string> LsbReleaseMap; 96 97 // Returns the contents of /etc/lsb-release as a map. 98 static const LsbReleaseMap& GetLsbReleaseMap(); 99 100 // If |key| is present in the LsbReleaseMap, sets |value| and returns true. 101 static bool GetLsbReleaseValue(const std::string& key, std::string* value); 102 103 // Convenience function for GetLsbReleaseValue("CHROMEOS_RELEASE_BOARD",...). 104 // Returns "unknown" if CHROMEOS_RELEASE_BOARD is not set. 105 static std::string GetLsbReleaseBoard(); 106 107 // Returns the creation time of /etc/lsb-release. (Used to get the date and 108 // time of the Chrome OS build). 109 static Time GetLsbReleaseTime(); 110 111 // Returns true when actually running in a Chrome OS environment. 112 static bool IsRunningOnChromeOS(); 113 114 // Test method to force re-parsing of lsb-release. 115 static void SetChromeOSVersionInfoForTest(const std::string& lsb_release, 116 const Time& lsb_release_time); 117 #endif // defined(OS_CHROMEOS) 118 119 #if defined(OS_ANDROID) 120 // Returns the Android build's codename. 121 static std::string GetAndroidBuildCodename(); 122 123 // Returns the Android build ID. 124 static std::string GetAndroidBuildID(); 125 126 // Returns the device's name. 127 static std::string GetDeviceName(); 128 129 static int DalvikHeapSizeMB(); 130 static int DalvikHeapGrowthLimitMB(); 131 #endif // defined(OS_ANDROID) 132 133 // Returns true if this is a low-end device. 134 // Low-end device refers to devices having less than 512M memory in the 135 // current implementation. 136 static bool IsLowEndDevice(); 137 }; 138 139 } // namespace base 140 141 #endif // BASE_SYS_INFO_H_ 142