blob: 38462ed11105c655bd3797ec4485bb59ee69dc0e [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
thestig@chromium.orgc9137242012-09-26 11:49:42 +09008#include <string>
9
darin@chromium.orge585bed2011-08-06 00:34:00 +090010#include "base/base_export.h"
deanm@chromium.org319f0442008-09-17 22:10:45 +090011#include "base/basictypes.h"
brettw@chromium.org59eef1f2013-02-24 14:40:52 +090012#include "base/files/file_path.h"
thestig@chromium.orgc9137242012-09-26 11:49:42 +090013#include "build/build_config.h"
tony@chromium.org1e25e002009-10-14 09:41:56 +090014
deanm@chromium.org42a34eb2008-09-17 19:09:39 +090015namespace base {
16
darin@chromium.orge585bed2011-08-06 00:34:00 +090017class BASE_EXPORT SysInfo {
deanm@chromium.org42a34eb2008-09-17 19:09:39 +090018 public:
19 // Return the number of logical processors/cores on the current machine.
20 static int NumberOfProcessors();
jeremy@chromium.org0da11fa2009-02-11 11:01:51 +090021
deanm@chromium.org319f0442008-09-17 22:10:45 +090022 // Return the number of bytes of physical memory on the current machine.
23 static int64 AmountOfPhysicalMemory();
deanm@chromium.org530ddd92008-09-18 21:18:14 +090024
hongbo.min@intel.comf6312b12012-10-27 15:10:37 +090025 // Return the number of bytes of current available physical memory on the
26 // machine.
27 static int64 AmountOfAvailablePhysicalMemory();
28
deanm@chromium.org530ddd92008-09-18 21:18:14 +090029 // Return the number of megabytes of physical memory on the current machine.
30 static int AmountOfPhysicalMemoryMB() {
31 return static_cast<int>(AmountOfPhysicalMemory() / 1024 / 1024);
32 }
deanm@chromium.orgee45e8f2008-09-18 21:34:24 +090033
rvargas@google.comaf000292008-09-20 10:16:23 +090034 // Return the available disk space in bytes on the volume containing |path|,
35 // or -1 on failure.
tony@chromium.org1e25e002009-10-14 09:41:56 +090036 static int64 AmountOfFreeDiskSpace(const FilePath& path);
deanm@chromium.orgee45e8f2008-09-18 21:34:24 +090037
jeremy@chromium.orgde658ed2012-10-29 10:04:09 +090038 // Returns system uptime in milliseconds.
39 static int64 Uptime();
40
mark@chromium.orgb93c0542008-09-30 07:18:01 +090041 // Returns the name of the host operating system.
42 static std::string OperatingSystemName();
43
44 // Returns the version of the host operating system.
45 static std::string OperatingSystemVersion();
46
jeremy@chromium.org7730edb2009-02-25 01:37:13 +090047 // Retrieves detailed numeric values for the OS version.
jeremy@chromium.org7730edb2009-02-25 01:37:13 +090048 // TODO(port): Implement a Linux version of this method and enable the
49 // corresponding unit test.
mark@chromium.org71cce472011-06-15 03:18:38 +090050 // DON'T USE THIS ON THE MAC OR WINDOWS to determine the current OS release
51 // for OS version-specific feature checks and workarounds. If you must use
52 // an OS version check instead of a feature check, use the base::mac::IsOS*
53 // family from base/mac/mac_util.h, or base::win::GetVersion from
54 // base/win/windows_version.h.
pkasting@chromium.org271d9db2011-04-08 07:15:34 +090055 static void OperatingSystemVersionNumbers(int32* major_version,
56 int32* minor_version,
57 int32* bugfix_version);
jeremy@chromium.org7730edb2009-02-25 01:37:13 +090058
thestig@chromium.orgc9137242012-09-26 11:49:42 +090059 // Returns the architecture of the running operating system.
60 // Exact return value may differ across platforms.
61 // e.g. a 32-bit x86 kernel on a 64-bit capable CPU will return "x86",
62 // whereas a x86-64 kernel on the same CPU will return "x86_64"
thestig@chromium.orge1706652012-10-16 10:58:21 +090063 static std::string OperatingSystemArchitecture();
mark@chromium.orgb93c0542008-09-30 07:18:01 +090064
thestig@chromium.orgc9137242012-09-26 11:49:42 +090065 // Avoid using this. Use base/cpu.h to get information about the CPU instead.
66 // http://crbug.com/148884
hongbo.min@intel.com893f7d62012-09-08 18:53:01 +090067 // Returns the CPU model name of the system. If it can not be figured out,
68 // an empty string is returned.
69 static std::string CPUModelName();
70
agl@chromium.org3d71fda2009-01-22 10:42:15 +090071 // Return the smallest amount of memory (in bytes) which the VM system will
72 // allocate.
73 static size_t VMAllocationGranularity();
evan@chromium.org54b72102009-07-22 09:35:18 +090074
evan@chromium.org875bb6e2009-12-29 09:32:52 +090075#if defined(OS_POSIX) && !defined(OS_MACOSX)
agl@chromium.org3319f0a2009-08-05 02:52:04 +090076 // Returns the maximum SysV shared memory segment size.
77 static size_t MaxSharedMemorySize();
thestig@chromium.orgc9137242012-09-26 11:49:42 +090078#endif // defined(OS_POSIX) && !defined(OS_MACOSX)
agl@chromium.org3319f0a2009-08-05 02:52:04 +090079
evan@chromium.org54b72102009-07-22 09:35:18 +090080#if defined(OS_CHROMEOS)
81 // Returns the name of the version entry we wish to look up in the
82 // Linux Standard Base release information file.
83 static std::string GetLinuxStandardBaseVersionKey();
84
85 // Parses /etc/lsb-release to get version information for Google Chrome OS.
86 // Declared here so it can be exposed for unit testing.
87 static void ParseLsbRelease(const std::string& lsb_release,
pkasting@chromium.org271d9db2011-04-08 07:15:34 +090088 int32* major_version,
89 int32* minor_version,
90 int32* bugfix_version);
khorimoto@chromium.orgc7e4e002012-04-25 10:59:44 +090091
92 // Returns the path to the lsb-release file.
93 static FilePath GetLsbReleaseFilePath();
thestig@chromium.orgc9137242012-09-26 11:49:42 +090094#endif // defined(OS_CHROMEOS)
ulan@chromium.org8ac7ea02012-05-26 00:31:37 +090095
96#if defined(OS_ANDROID)
dfalcantara@chromium.org774888d2012-08-22 08:55:52 +090097 // Returns the Android build's codename.
98 static std::string GetAndroidBuildCodename();
99
100 // Returns the Android build ID.
101 static std::string GetAndroidBuildID();
102
103 // Returns the device's name.
104 static std::string GetDeviceName();
105
ulan@chromium.org8ac7ea02012-05-26 00:31:37 +0900106 static int DalvikHeapSizeMB();
epenner@chromium.org066b81b2013-02-17 03:15:50 +0900107 static int DalvikHeapGrowthLimitMB();
thestig@chromium.orgc9137242012-09-26 11:49:42 +0900108#endif // defined(OS_ANDROID)
deanm@chromium.org42a34eb2008-09-17 19:09:39 +0900109};
110
111} // namespace base
112
113#endif // BASE_SYS_INFO_H_