• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
DetectNumberOfCores()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