sys_info_win.cc revision 3345a6884c488ff3a535c2c9acdd33d74b37e311
1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be 3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file. 4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/sys_info.h" 6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 7c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include <windows.h> 8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/file_path.h" 10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/logging.h" 11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/scoped_ptr.h" 123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/stringprintf.h" 13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace base { 15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// static 17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottint SysInfo::NumberOfProcessors() { 18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott SYSTEM_INFO info; 19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GetSystemInfo(&info); 20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return static_cast<int>(info.dwNumberOfProcessors); 21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// static 24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottint64 SysInfo::AmountOfPhysicalMemory() { 25c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott MEMORYSTATUSEX memory_info; 26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott memory_info.dwLength = sizeof(memory_info); 27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (!GlobalMemoryStatusEx(&memory_info)) { 28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott NOTREACHED(); 29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return 0; 30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int64 rv = static_cast<int64>(memory_info.ullTotalPhys); 33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (rv < 0) 34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott rv = kint64max; 35c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return rv; 36c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 37c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 38c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// static 39c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottint64 SysInfo::AmountOfFreeDiskSpace(const FilePath& path) { 40c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ULARGE_INTEGER available, total, free; 41c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (!GetDiskFreeSpaceExW(path.value().c_str(), &available, &total, &free)) { 42c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return -1; 43c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 44c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int64 rv = static_cast<int64>(available.QuadPart); 45c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (rv < 0) 46c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott rv = kint64max; 47c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return rv; 48c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 49c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 50c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// static 51c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottstd::string SysInfo::OperatingSystemName() { 52c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return "Windows NT"; 53c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 54c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 55c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// static 56c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottstd::string SysInfo::OperatingSystemVersion() { 57c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott OSVERSIONINFO info = {0}; 58c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott info.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 59c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GetVersionEx(&info); 60c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return base::StringPrintf("%lu.%lu", 623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick info.dwMajorVersion, info.dwMinorVersion); 63c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 64c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 65c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// TODO: Implement OperatingSystemVersionComplete, which would include 66c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// patchlevel/service pack number. See chrome/browser/views/bug_report_view.cc, 67c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// BugReportView::SetOSVersion. 68c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 69c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// static 70c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottstd::string SysInfo::CPUArchitecture() { 71c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // TODO: Make this vary when we support any other architectures. 72c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return "x86"; 73c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 74c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 75c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// static 76c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid SysInfo::GetPrimaryDisplayDimensions(int* width, int* height) { 77c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (width) 78c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott *width = GetSystemMetrics(SM_CXSCREEN); 79c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 80c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (height) 81c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott *height = GetSystemMetrics(SM_CYSCREEN); 82c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 83c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 84c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// static 85c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottint SysInfo::DisplayCount() { 86c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return GetSystemMetrics(SM_CMONITORS); 87c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 88c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 89c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// static 90c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottsize_t SysInfo::VMAllocationGranularity() { 91c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott SYSTEM_INFO sysinfo; 92c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GetSystemInfo(&sysinfo); 93c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 94c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return sysinfo.dwAllocationGranularity; 95c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 96c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 97c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// static 98c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid SysInfo::OperatingSystemVersionNumbers(int32 *major_version, 99c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int32 *minor_version, 100c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int32 *bugfix_version) { 101c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott OSVERSIONINFO info = {0}; 102c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott info.dwOSVersionInfoSize = sizeof(info); 103c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GetVersionEx(&info); 104c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott *major_version = info.dwMajorVersion; 105c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott *minor_version = info.dwMinorVersion; 106c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott *bugfix_version = 0; 107c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 108c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 109c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} // namespace base 110