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_wrapper.h" 12 13 #if defined(_WIN32) 14 #include <Windows.h> 15 #include "engine_configurations.h" 16 #include "cpu_windows.h" 17 #elif defined(WEBRTC_MAC) 18 #include <sys/types.h> 19 #include <sys/sysctl.h> 20 #include "cpu_mac.h" 21 #elif defined(WEBRTC_MAC_INTEL) 22 #include "cpu_mac.h" 23 #elif defined(ANDROID) 24 // Not implemented yet, might be possible to use Linux implementation 25 #else // defined(WEBRTC_LINUX) 26 #include <sys/sysinfo.h> 27 #include "cpu_linux.h" 28 #endif 29 30 #include "trace.h" 31 32 namespace webrtc { 33 WebRtc_UWord32 CpuWrapper::_numberOfCores = 0; 34 35 WebRtc_UWord32 CpuWrapper::DetectNumberOfCores() 36 { 37 if (!_numberOfCores) 38 { 39 #if defined(_WIN32) 40 SYSTEM_INFO si; 41 GetSystemInfo(&si); 42 _numberOfCores = static_cast<WebRtc_UWord32>(si.dwNumberOfProcessors); 43 WEBRTC_TRACE(kTraceStateInfo, kTraceUtility, -1, 44 "Available number of cores:%d", _numberOfCores); 45 46 #elif defined(WEBRTC_LINUX) && !defined(ANDROID) 47 _numberOfCores = get_nprocs(); 48 WEBRTC_TRACE(kTraceStateInfo, kTraceUtility, -1, 49 "Available number of cores:%d", _numberOfCores); 50 51 #elif (defined(WEBRTC_MAC) || defined(WEBRTC_MAC_INTEL)) 52 int name[] = {CTL_HW, HW_AVAILCPU}; 53 int ncpu; 54 size_t size = sizeof(ncpu); 55 if(0 == sysctl(name, 2, &ncpu, &size, NULL, 0)) 56 { 57 _numberOfCores = static_cast<WebRtc_UWord32>(ncpu); 58 WEBRTC_TRACE(kTraceStateInfo, kTraceUtility, -1, 59 "Available number of cores:%d", _numberOfCores); 60 } else 61 { 62 WEBRTC_TRACE(kTraceError, kTraceUtility, -1, 63 "Failed to get number of cores"); 64 _numberOfCores = 1; 65 } 66 #else 67 WEBRTC_TRACE(kTraceWarning, kTraceUtility, -1, 68 "No function to get number of cores"); 69 _numberOfCores = 1; 70 #endif 71 } 72 return _numberOfCores; 73 } 74 75 CpuWrapper* CpuWrapper::CreateCpu() 76 { 77 #if defined(_WIN32) 78 return new CpuWindows(); 79 #elif (defined(WEBRTC_MAC) || defined(WEBRTC_MAC_INTEL)) 80 return new CpuWrapperMac(); 81 #elif defined(ANDROID) 82 return 0; 83 #else 84 return new CpuLinux(); 85 #endif 86 } 87 } // namespace webrtc 88