LCOV - code coverage report
Current view: top level - src/base - sys-info.cc (source / functions) Hit Total Coverage
Test: app.info Lines: 13 13 100.0 %
Date: 2019-04-17 Functions: 3 3 100.0 %

          Line data    Source code
       1             : // Copyright 2014 the V8 project authors. All rights reserved.
       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 "src/base/sys-info.h"
       6             : 
       7             : #if V8_OS_POSIX
       8             : #include <sys/stat.h>
       9             : #include <sys/time.h>
      10             : #include <sys/types.h>
      11             : #include <unistd.h>
      12             : #if !V8_OS_FUCHSIA
      13             : #include <sys/resource.h>
      14             : #endif
      15             : #endif
      16             : 
      17             : #if V8_OS_BSD
      18             : #include <sys/sysctl.h>
      19             : #endif
      20             : 
      21             : #include <limits>
      22             : 
      23             : #include "src/base/logging.h"
      24             : #include "src/base/macros.h"
      25             : #if V8_OS_WIN
      26             : #include "src/base/win32-headers.h"
      27             : #endif
      28             : 
      29             : namespace v8 {
      30             : namespace base {
      31             : 
      32             : // static
      33       61019 : int SysInfo::NumberOfProcessors() {
      34             : #if V8_OS_OPENBSD
      35             :   int mib[2] = {CTL_HW, HW_NCPU};
      36             :   int ncpu = 0;
      37             :   size_t len = sizeof(ncpu);
      38             :   if (sysctl(mib, arraysize(mib), &ncpu, &len, nullptr, 0) != 0) {
      39             :     return 1;
      40             :   }
      41             :   return ncpu;
      42             : #elif V8_OS_POSIX
      43       61019 :   long result = sysconf(_SC_NPROCESSORS_ONLN);  // NOLINT(runtime/int)
      44       61019 :   if (result == -1) {
      45             :     return 1;
      46             :   }
      47       61019 :   return static_cast<int>(result);
      48             : #elif V8_OS_WIN
      49             :   SYSTEM_INFO system_info = {};
      50             :   ::GetNativeSystemInfo(&system_info);
      51             :   return static_cast<int>(system_info.dwNumberOfProcessors);
      52             : #endif
      53             : }
      54             : 
      55             : 
      56             : // static
      57       30099 : int64_t SysInfo::AmountOfPhysicalMemory() {
      58             : #if V8_OS_MACOSX
      59             :   int mib[2] = {CTL_HW, HW_MEMSIZE};
      60             :   int64_t memsize = 0;
      61             :   size_t len = sizeof(memsize);
      62             :   if (sysctl(mib, arraysize(mib), &memsize, &len, nullptr, 0) != 0) {
      63             :     return 0;
      64             :   }
      65             :   return memsize;
      66             : #elif V8_OS_FREEBSD
      67             :   int pages, page_size;
      68             :   size_t size = sizeof(pages);
      69             :   sysctlbyname("vm.stats.vm.v_page_count", &pages, &size, nullptr, 0);
      70             :   sysctlbyname("vm.stats.vm.v_page_size", &page_size, &size, nullptr, 0);
      71             :   if (pages == -1 || page_size == -1) {
      72             :     return 0;
      73             :   }
      74             :   return static_cast<int64_t>(pages) * page_size;
      75             : #elif V8_OS_CYGWIN || V8_OS_WIN
      76             :   MEMORYSTATUSEX memory_info;
      77             :   memory_info.dwLength = sizeof(memory_info);
      78             :   if (!GlobalMemoryStatusEx(&memory_info)) {
      79             :     return 0;
      80             :   }
      81             :   int64_t result = static_cast<int64_t>(memory_info.ullTotalPhys);
      82             :   if (result < 0) result = std::numeric_limits<int64_t>::max();
      83             :   return result;
      84             : #elif V8_OS_QNX
      85             :   struct stat stat_buf;
      86             :   if (stat("/proc", &stat_buf) != 0) {
      87             :     return 0;
      88             :   }
      89             :   return static_cast<int64_t>(stat_buf.st_size);
      90             : #elif V8_OS_AIX
      91             :   int64_t result = sysconf(_SC_AIX_REALMEM);
      92             :   return static_cast<int64_t>(result) * 1024L;
      93             : #elif V8_OS_POSIX
      94       30099 :   long pages = sysconf(_SC_PHYS_PAGES);    // NOLINT(runtime/int)
      95       30099 :   long page_size = sysconf(_SC_PAGESIZE);  // NOLINT(runtime/int)
      96       30099 :   if (pages == -1 || page_size == -1) {
      97             :     return 0;
      98             :   }
      99       30099 :   return static_cast<int64_t>(pages) * page_size;
     100             : #endif
     101             : }
     102             : 
     103             : 
     104             : // static
     105       30099 : int64_t SysInfo::AmountOfVirtualMemory() {
     106             : #if V8_OS_WIN || V8_OS_FUCHSIA
     107             :   return 0;
     108             : #elif V8_OS_POSIX
     109             :   struct rlimit rlim;
     110       30099 :   int result = getrlimit(RLIMIT_DATA, &rlim);
     111       30099 :   if (result != 0) {
     112             :     return 0;
     113             :   }
     114       30099 :   return (rlim.rlim_cur == RLIM_INFINITY) ? 0 : rlim.rlim_cur;
     115             : #endif
     116             : }
     117             : 
     118             : }  // namespace base
     119             : }  // namespace v8

Generated by: LCOV version 1.10