diff options
author | rmcilroy@chromium.org <rmcilroy@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-29 19:32:45 +0000 |
---|---|---|
committer | rmcilroy@chromium.org <rmcilroy@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-29 19:32:45 +0000 |
commit | f6eb4ec6fe4c958d615b4d17bdee2d0c576ad502 (patch) | |
tree | a80f016a68e9e4b27134e236db37e40a25ab3dcd /base/sys_info_linux.cc | |
parent | 97c72f5cd4d7ff5e906d946c6b48b95104dd0349 (diff) | |
download | chromium_src-f6eb4ec6fe4c958d615b4d17bdee2d0c576ad502.zip chromium_src-f6eb4ec6fe4c958d615b4d17bdee2d0c576ad502.tar.gz chromium_src-f6eb4ec6fe4c958d615b4d17bdee2d0c576ad502.tar.bz2 |
Enable SysInfo::AmountOfPhysicalMemory to be called from within the Linux sandbox.
Trigger caching of SysInfo::AmountOfPhysicalMemory in PreSandboxInit() to enable
it to be called by the renderer process after the sandbox is sealed.
BUG=312241
Review URL: https://codereview.chromium.org/28833002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@231613 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/sys_info_linux.cc')
-rw-r--r-- | base/sys_info_linux.cc | 101 |
1 files changed, 66 insertions, 35 deletions
diff --git a/base/sys_info_linux.cc b/base/sys_info_linux.cc index acc4771..c862145 100644 --- a/base/sys_info_linux.cc +++ b/base/sys_info_linux.cc @@ -7,6 +7,7 @@ #include <limits> #include "base/file_util.h" +#include "base/lazy_instance.h" #include "base/logging.h" #include "base/strings/string_number_conversions.h" @@ -22,52 +23,34 @@ int64 AmountOfMemory(int pages_name) { return static_cast<int64>(pages) * page_size; } -} // namespace - -namespace base { - -// static -int64 SysInfo::AmountOfPhysicalMemory() { - return AmountOfMemory(_SC_PHYS_PAGES); -} - -// static -int64 SysInfo::AmountOfAvailablePhysicalMemory() { - return AmountOfMemory(_SC_AVPHYS_PAGES); -} +size_t MaxSharedMemorySize() { + std::string contents; + base::ReadFileToString(base::FilePath("/proc/sys/kernel/shmmax"), &contents); + DCHECK(!contents.empty()); + if (!contents.empty() && contents[contents.length() - 1] == '\n') { + contents.erase(contents.length() - 1); + } -// static -size_t SysInfo::MaxSharedMemorySize() { - static int64 limit; - static bool limit_valid = false; - if (!limit_valid) { - std::string contents; - ReadFileToString(FilePath("/proc/sys/kernel/shmmax"), &contents); - DCHECK(!contents.empty()); - if (!contents.empty() && contents[contents.length() - 1] == '\n') { - contents.erase(contents.length() - 1); - } - if (base::StringToInt64(contents, &limit)) { - DCHECK(limit >= 0); - DCHECK(static_cast<uint64>(limit) <= std::numeric_limits<size_t>::max()); - limit_valid = true; - } else { - NOTREACHED(); - return 0; - } + int64 limit; + if (!base::StringToInt64(contents, &limit)) { + limit = 0; } + if (limit < 0 || + static_cast<uint64>(limit) > std::numeric_limits<size_t>::max()) { + limit = 0; + } + DCHECK(limit > 0); return static_cast<size_t>(limit); } -// static -std::string SysInfo::CPUModelName() { +std::string CPUModelName() { #if defined(OS_CHROMEOS) && defined(ARCH_CPU_ARMEL) const char kCpuModelPrefix[] = "Hardware"; #else const char kCpuModelPrefix[] = "model name"; #endif std::string contents; - ReadFileToString(FilePath("/proc/cpuinfo"), &contents); + base::ReadFileToString(base::FilePath("/proc/cpuinfo"), &contents); DCHECK(!contents.empty()); if (!contents.empty()) { std::istringstream iss(contents); @@ -82,4 +65,52 @@ std::string SysInfo::CPUModelName() { return std::string(); } +class LazySysInfo { + public: + LazySysInfo() + : kPhysicalMemory_(AmountOfMemory(_SC_PHYS_PAGES)), + kMaxSharedMemorySize_(MaxSharedMemorySize()), + kCpuModelName_(CPUModelName()) { } + + ~LazySysInfo() { } + + int64 physical_memory() { return kPhysicalMemory_; } + size_t max_shared_memory_size() { return kMaxSharedMemorySize_; } + std::string cpu_model_name() { return kCpuModelName_; } + + private: + const int64 kPhysicalMemory_; + const size_t kMaxSharedMemorySize_; + const std::string kCpuModelName_; + + DISALLOW_COPY_AND_ASSIGN(LazySysInfo); +}; + +base::LazyInstance<LazySysInfo>::Leaky + g_lazy_sys_info = LAZY_INSTANCE_INITIALIZER; + +} // namespace + +namespace base { + +// static +int64 SysInfo::AmountOfAvailablePhysicalMemory() { + return AmountOfMemory(_SC_AVPHYS_PAGES); +} + +// static +int64 SysInfo::AmountOfPhysicalMemory() { + return g_lazy_sys_info.Get().physical_memory(); +} + +// static +size_t SysInfo::MaxSharedMemorySize() { + return g_lazy_sys_info.Get().max_shared_memory_size(); +} + +// static +std::string SysInfo::CPUModelName() { + return g_lazy_sys_info.Get().cpu_model_name(); +} + } // namespace base |