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)
84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include <map>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/base_export.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h"
144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/time/time.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "build/build_config.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BASE_EXPORT SysInfo {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Return the number of logical processors/cores on the current machine.
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static int NumberOfProcessors();
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Return the number of bytes of physical memory on the current machine.
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static int64 AmountOfPhysicalMemory();
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Return the number of bytes of current available physical memory on the
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // machine.
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static int64 AmountOfAvailablePhysicalMemory();
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Return the number of megabytes of physical memory on the current machine.
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static int AmountOfPhysicalMemoryMB() {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return static_cast<int>(AmountOfPhysicalMemory() / 1024 / 1024);
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Return the available disk space in bytes on the volume containing |path|,
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // or -1 on failure.
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static int64 AmountOfFreeDiskSpace(const FilePath& path);
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns system uptime in milliseconds.
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static int64 Uptime();
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the name of the host operating system.
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static std::string OperatingSystemName();
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the version of the host operating system.
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static std::string OperatingSystemVersion();
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Retrieves detailed numeric values for the OS version.
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(port): Implement a Linux version of this method and enable the
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // corresponding unit test.
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // DON'T USE THIS ON THE MAC OR WINDOWS to determine the current OS release
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // for OS version-specific feature checks and workarounds. If you must use
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // an OS version check instead of a feature check, use the base::mac::IsOS*
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // family from base/mac/mac_util.h, or base::win::GetVersion from
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // base/win/windows_version.h.
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void OperatingSystemVersionNumbers(int32* major_version,
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                            int32* minor_version,
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                            int32* bugfix_version);
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the architecture of the running operating system.
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Exact return value may differ across platforms.
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // e.g. a 32-bit x86 kernel on a 64-bit capable CPU will return "x86",
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //      whereas a x86-64 kernel on the same CPU will return "x86_64"
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static std::string OperatingSystemArchitecture();
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Avoid using this. Use base/cpu.h to get information about the CPU instead.
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // http://crbug.com/148884
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the CPU model name of the system. If it can not be figured out,
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // an empty string is returned.
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static std::string CPUModelName();
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Return the smallest amount of memory (in bytes) which the VM system will
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // allocate.
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static size_t VMAllocationGranularity();
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_POSIX) && !defined(OS_MACOSX)
780f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  // Returns the maximum SysV shared memory segment size, or zero if there is no
790f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  // limit.
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static size_t MaxSharedMemorySize();
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // defined(OS_POSIX) && !defined(OS_MACOSX)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  typedef std::map<std::string, std::string> LsbReleaseMap;
854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Returns the contents of /etc/lsb-release as a map.
874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  static const LsbReleaseMap& GetLsbReleaseMap();
884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // If |key| is present in the LsbReleaseMap, sets |value| and returns true.
904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  static bool GetLsbReleaseValue(const std::string& key, std::string* value);
914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Convenience function for GetLsbReleaseValue("CHROMEOS_RELEASE_BOARD",...).
934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Returns "unknown" if CHROMEOS_RELEASE_BOARD is not set.
944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  static std::string GetLsbReleaseBoard();
954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Returns the creation time of /etc/lsb-release. (Used to get the date and
974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // time of the Chrome OS build).
984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  static Time GetLsbReleaseTime();
994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Returns true when actually running in a Chrome OS environment.
1014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  static bool IsRunningOnChromeOS();
1024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Test method to force re-parsing of lsb-release.
1044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  static void SetChromeOSVersionInfoForTest(const std::string& lsb_release,
1054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                            const Time& lsb_release_time);
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // defined(OS_CHROMEOS)
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID)
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the Android build's codename.
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static std::string GetAndroidBuildCodename();
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the Android build ID.
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static std::string GetAndroidBuildID();
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the device's name.
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static std::string GetDeviceName();
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static int DalvikHeapSizeMB();
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static int DalvikHeapGrowthLimitMB();
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // defined(OS_ANDROID)
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace base
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // BASE_SYS_INFO_H_
126