Home | History | Annotate | Download | only in source
      1 /*
      2  *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
      3  *
      4  *  Use of this source code is governed by a BSD-style license
      5  *  that can be found in the LICENSE file in the root of the source
      6  *  tree. An additional intellectual property rights grant can be found
      7  *  in the file PATENTS.  All contributing project authors may
      8  *  be found in the AUTHORS file in the root of the source tree.
      9  */
     10 
     11 #include "cpu_info.h"
     12 
     13 #if defined(_WIN32)
     14 #include <Windows.h>
     15 #elif defined(WEBRTC_MAC)
     16 #include <sys/types.h>
     17 #include <sys/sysctl.h>
     18 #elif defined(WEBRTC_MAC_INTEL)
     19 // Intentionally empty
     20 #elif defined(WEBRTC_ANDROID)
     21 // Not implemented yet, might be possible to use Linux implementation
     22 #else // defined(WEBRTC_LINUX)
     23 #include <sys/sysinfo.h>
     24 #endif
     25 
     26 #include "trace.h"
     27 
     28 namespace webrtc {
     29 
     30 WebRtc_UWord32 CpuInfo::_numberOfCores = 0;
     31 
     32 WebRtc_UWord32 CpuInfo::DetectNumberOfCores()
     33 {
     34     if (!_numberOfCores)
     35     {
     36 #if defined(_WIN32)
     37         SYSTEM_INFO si;
     38         GetSystemInfo(&si);
     39         _numberOfCores = static_cast<WebRtc_UWord32>(si.dwNumberOfProcessors);
     40         WEBRTC_TRACE(kTraceStateInfo, kTraceUtility, -1,
     41                      "Available number of cores:%d", _numberOfCores);
     42 
     43 #elif defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID)
     44         _numberOfCores = get_nprocs();
     45         WEBRTC_TRACE(kTraceStateInfo, kTraceUtility, -1,
     46                      "Available number of cores:%d", _numberOfCores);
     47 
     48 #elif (defined(WEBRTC_MAC) || defined(WEBRTC_MAC_INTEL))
     49         int name[] = {CTL_HW, HW_AVAILCPU};
     50         int ncpu;
     51         size_t size = sizeof(ncpu);
     52         if(0 == sysctl(name, 2, &ncpu, &size, NULL, 0))
     53         {
     54             _numberOfCores = static_cast<WebRtc_UWord32>(ncpu);
     55             WEBRTC_TRACE(kTraceStateInfo, kTraceUtility, -1,
     56                          "Available number of cores:%d", _numberOfCores);
     57     } else
     58     {
     59             WEBRTC_TRACE(kTraceError, kTraceUtility, -1,
     60                          "Failed to get number of cores");
     61             _numberOfCores = 1;
     62     }
     63 #else
     64         WEBRTC_TRACE(kTraceWarning, kTraceUtility, -1,
     65                      "No function to get number of cores");
     66         _numberOfCores = 1;
     67 #endif
     68     }
     69     return _numberOfCores;
     70 }
     71 
     72 } // namespace webrtc
     73