blob: d24acdf6b434eddf991c7787dc4f4e10989e9003 [file] [log] [blame]
khorimoto@chromium.orgc7e4e002012-04-25 10:59:44 +09001// Copyright (c) 2012 The Chromium Authors. All rights reserved.
deanm@chromium.org42a34eb2008-09-17 19:09:39 +09002// 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
stevenjb@chromium.org2f4de042013-09-27 06:51:23 +09008#include <map>
thestig@chromium.orgc9137242012-09-26 11:49:42 +09009#include <string>
10
darin@chromium.orge585bed2011-08-06 00:34:00 +090011#include "base/base_export.h"
deanm@chromium.org319f0442008-09-17 22:10:45 +090012#include "base/basictypes.h"
brettw@chromium.org59eef1f2013-02-24 14:40:52 +090013#include "base/files/file_path.h"
stevenjb@chromium.org2f4de042013-09-27 06:51:23 +090014#include "base/time/time.h"
thestig@chromium.orgc9137242012-09-26 11:49:42 +090015#include "build/build_config.h"
tony@chromium.org1e25e002009-10-14 09:41:56 +090016
deanm@chromium.org42a34eb2008-09-17 19:09:39 +090017namespace base {
18
darin@chromium.orge585bed2011-08-06 00:34:00 +090019class BASE_EXPORT SysInfo {
deanm@chromium.org42a34eb2008-09-17 19:09:39 +090020 public:
21 // Return the number of logical processors/cores on the current machine.
22 static int NumberOfProcessors();
jeremy@chromium.org0da11fa2009-02-11 11:01:51 +090023
deanm@chromium.org319f0442008-09-17 22:10:45 +090024 // Return the number of bytes of physical memory on the current machine.
25 static int64 AmountOfPhysicalMemory();
deanm@chromium.org530ddd92008-09-18 21:18:14 +090026
hongbo.min@intel.comf6312b12012-10-27 15:10:37 +090027 // Return the number of bytes of current available physical memory on the
28 // machine.
29 static int64 AmountOfAvailablePhysicalMemory();
30
jochen@chromium.org5ac0b172014-04-09 08:19:16 +090031 // 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
deanm@chromium.org530ddd92008-09-18 21:18:14 +090036 // Return the number of megabytes of physical memory on the current machine.
37 static int AmountOfPhysicalMemoryMB() {
38 return static_cast<int>(AmountOfPhysicalMemory() / 1024 / 1024);
39 }
deanm@chromium.orgee45e8f2008-09-18 21:34:24 +090040
jochen@chromium.org5ac0b172014-04-09 08:19:16 +090041 // Return the number of megabytes of available virtual memory, or zero if it
42 // is unlimited.
43 static int AmountOfVirtualMemoryMB() {
44 return static_cast<int>(AmountOfVirtualMemory() / 1024 / 1024);
45 }
46
rvargas@google.comaf000292008-09-20 10:16:23 +090047 // Return the available disk space in bytes on the volume containing |path|,
48 // or -1 on failure.
tony@chromium.org1e25e002009-10-14 09:41:56 +090049 static int64 AmountOfFreeDiskSpace(const FilePath& path);
deanm@chromium.orgee45e8f2008-09-18 21:34:24 +090050
jeremy@chromium.orgde658ed2012-10-29 10:04:09 +090051 // Returns system uptime in milliseconds.
52 static int64 Uptime();
53
mark@chromium.orgb93c0542008-09-30 07:18:01 +090054 // 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
jeremy@chromium.org7730edb2009-02-25 01:37:13 +090060 // Retrieves detailed numeric values for the OS version.
jeremy@chromium.org7730edb2009-02-25 01:37:13 +090061 // TODO(port): Implement a Linux version of this method and enable the
62 // corresponding unit test.
mark@chromium.org71cce472011-06-15 03:18:38 +090063 // 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.
pkasting@chromium.org271d9db2011-04-08 07:15:34 +090068 static void OperatingSystemVersionNumbers(int32* major_version,
69 int32* minor_version,
70 int32* bugfix_version);
jeremy@chromium.org7730edb2009-02-25 01:37:13 +090071
thestig@chromium.orgc9137242012-09-26 11:49:42 +090072 // 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"
thestig@chromium.orge1706652012-10-16 10:58:21 +090076 static std::string OperatingSystemArchitecture();
mark@chromium.orgb93c0542008-09-30 07:18:01 +090077
thestig@chromium.orgc9137242012-09-26 11:49:42 +090078 // Avoid using this. Use base/cpu.h to get information about the CPU instead.
79 // http://crbug.com/148884
hongbo.min@intel.com893f7d62012-09-08 18:53:01 +090080 // 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
agl@chromium.org3d71fda2009-01-22 10:42:15 +090084 // Return the smallest amount of memory (in bytes) which the VM system will
85 // allocate.
86 static size_t VMAllocationGranularity();
evan@chromium.org54b72102009-07-22 09:35:18 +090087
evan@chromium.org875bb6e2009-12-29 09:32:52 +090088#if defined(OS_POSIX) && !defined(OS_MACOSX)
rmcilroy@chromium.orge6d35102013-11-05 05:50:14 +090089 // Returns the maximum SysV shared memory segment size, or zero if there is no
90 // limit.
agl@chromium.org3319f0a2009-08-05 02:52:04 +090091 static size_t MaxSharedMemorySize();
thestig@chromium.orgc9137242012-09-26 11:49:42 +090092#endif // defined(OS_POSIX) && !defined(OS_MACOSX)
agl@chromium.org3319f0a2009-08-05 02:52:04 +090093
evan@chromium.org54b72102009-07-22 09:35:18 +090094#if defined(OS_CHROMEOS)
stevenjb@chromium.org2f4de042013-09-27 06:51:23 +090095 typedef std::map<std::string, std::string> LsbReleaseMap;
evan@chromium.org54b72102009-07-22 09:35:18 +090096
stevenjb@chromium.org2f4de042013-09-27 06:51:23 +090097 // Returns the contents of /etc/lsb-release as a map.
98 static const LsbReleaseMap& GetLsbReleaseMap();
khorimoto@chromium.orgc7e4e002012-04-25 10:59:44 +090099
stevenjb@chromium.org2f4de042013-09-27 06:51:23 +0900100 // 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
stevenjb@chromium.org861313b2013-09-28 04:28:24 +0900111 // Returns true when actually running in a Chrome OS environment.
112 static bool IsRunningOnChromeOS();
113
stevenjb@chromium.org2f4de042013-09-27 06:51:23 +0900114 // Test method to force re-parsing of lsb-release.
115 static void SetChromeOSVersionInfoForTest(const std::string& lsb_release,
116 const Time& lsb_release_time);
thestig@chromium.orgc9137242012-09-26 11:49:42 +0900117#endif // defined(OS_CHROMEOS)
ulan@chromium.org8ac7ea02012-05-26 00:31:37 +0900118
119#if defined(OS_ANDROID)
dfalcantara@chromium.org774888d2012-08-22 08:55:52 +0900120 // 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
ulan@chromium.org8ac7ea02012-05-26 00:31:37 +0900129 static int DalvikHeapSizeMB();
epenner@chromium.org066b81b2013-02-17 03:15:50 +0900130 static int DalvikHeapGrowthLimitMB();
thestig@chromium.orgc9137242012-09-26 11:49:42 +0900131#endif // defined(OS_ANDROID)
c.shu@samsung.comda21aff2014-06-27 01:55:27 +0900132
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();
deanm@chromium.org42a34eb2008-09-17 19:09:39 +0900137};
138
139} // namespace base
140
141#endif // BASE_SYS_INFO_H_