robert.nagy@gmail.com | ea54e46 | 2011-10-25 07:05:27 +0900 | [diff] [blame] | 1 | // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
evan@chromium.org | fae7268 | 2009-11-24 06:57:11 +0900 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | #include "base/sys_info.h" |
| 6 | |
robert.nagy@gmail.com | ea54e46 | 2011-10-25 07:05:27 +0900 | [diff] [blame] | 7 | #include <limits> |
| 8 | |
evan@chromium.org | fae7268 | 2009-11-24 06:57:11 +0900 | [diff] [blame] | 9 | #include "base/file_util.h" |
| 10 | #include "base/logging.h" |
robert.nagy@gmail.com | ea54e46 | 2011-10-25 07:05:27 +0900 | [diff] [blame] | 11 | #include "base/string_number_conversions.h" |
evan@chromium.org | fae7268 | 2009-11-24 06:57:11 +0900 | [diff] [blame] | 12 | |
| 13 | namespace base { |
| 14 | |
| 15 | int64 SysInfo::AmountOfPhysicalMemory() { |
| 16 | long pages = sysconf(_SC_PHYS_PAGES); |
| 17 | long page_size = sysconf(_SC_PAGE_SIZE); |
| 18 | if (pages == -1 || page_size == -1) { |
| 19 | NOTREACHED(); |
| 20 | return 0; |
| 21 | } |
| 22 | |
| 23 | return static_cast<int64>(pages) * page_size; |
| 24 | } |
| 25 | |
| 26 | // static |
| 27 | size_t SysInfo::MaxSharedMemorySize() { |
robert.nagy@gmail.com | ea54e46 | 2011-10-25 07:05:27 +0900 | [diff] [blame] | 28 | static int64 limit; |
evan@chromium.org | fae7268 | 2009-11-24 06:57:11 +0900 | [diff] [blame] | 29 | static bool limit_valid = false; |
| 30 | if (!limit_valid) { |
| 31 | std::string contents; |
| 32 | file_util::ReadFileToString(FilePath("/proc/sys/kernel/shmmax"), &contents); |
robert.nagy@gmail.com | ea54e46 | 2011-10-25 07:05:27 +0900 | [diff] [blame] | 33 | DCHECK(!contents.empty()); |
| 34 | if (!contents.empty() && contents[contents.length() - 1] == '\n') { |
| 35 | contents.erase(contents.length() - 1); |
| 36 | } |
| 37 | if (base::StringToInt64(contents, &limit)) { |
| 38 | DCHECK(limit >= 0); |
| 39 | DCHECK(static_cast<uint64>(limit) <= std::numeric_limits<size_t>::max()); |
| 40 | limit_valid = true; |
| 41 | } else { |
| 42 | NOTREACHED(); |
| 43 | return 0; |
| 44 | } |
evan@chromium.org | fae7268 | 2009-11-24 06:57:11 +0900 | [diff] [blame] | 45 | } |
robert.nagy@gmail.com | ea54e46 | 2011-10-25 07:05:27 +0900 | [diff] [blame] | 46 | return static_cast<size_t>(limit); |
evan@chromium.org | fae7268 | 2009-11-24 06:57:11 +0900 | [diff] [blame] | 47 | } |
| 48 | |
| 49 | } // namespace base |