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