1c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Copyright (c) 2009 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 "base/file_util.h"
8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/logging.h"
9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace base {
11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottint64 SysInfo::AmountOfPhysicalMemory() {
13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  long pages = sysconf(_SC_PHYS_PAGES);
14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  long page_size = sysconf(_SC_PAGE_SIZE);
15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  if (pages == -1 || page_size == -1) {
16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    NOTREACHED();
17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    return 0;
18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  }
19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  return static_cast<int64>(pages) * page_size;
21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// static
24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottsize_t SysInfo::MaxSharedMemorySize() {
25c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  static size_t limit;
26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  static bool limit_valid = false;
27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  if (!limit_valid) {
28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    std::string contents;
29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    file_util::ReadFileToString(FilePath("/proc/sys/kernel/shmmax"), &contents);
30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    limit = strtoul(contents.c_str(), NULL, 0);
31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    limit_valid = true;
32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  }
33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  return limit;
34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
35c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
36c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}  // namespace base
37