diff options
Diffstat (limited to 'src/system_wrappers/source/cpu_info.cc')
-rw-r--r-- | src/system_wrappers/source/cpu_info.cc | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/src/system_wrappers/source/cpu_info.cc b/src/system_wrappers/source/cpu_info.cc new file mode 100644 index 0000000000..e367abfbdf --- /dev/null +++ b/src/system_wrappers/source/cpu_info.cc @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#include "cpu_info.h" + +#if defined(_WIN32) +#include <Windows.h> +#elif defined(WEBRTC_MAC) +#include <sys/types.h> +#include <sys/sysctl.h> +#elif defined(WEBRTC_MAC_INTEL) +// Intentionally empty +#elif defined(WEBRTC_ANDROID) +// Not implemented yet, might be possible to use Linux implementation +#else // defined(WEBRTC_LINUX) +#include <sys/sysinfo.h> +#endif + +#include "trace.h" + +namespace webrtc { + +WebRtc_UWord32 CpuInfo::_numberOfCores = 0; + +WebRtc_UWord32 CpuInfo::DetectNumberOfCores() +{ + if (!_numberOfCores) + { +#if defined(_WIN32) + SYSTEM_INFO si; + GetSystemInfo(&si); + _numberOfCores = static_cast<WebRtc_UWord32>(si.dwNumberOfProcessors); + WEBRTC_TRACE(kTraceStateInfo, kTraceUtility, -1, + "Available number of cores:%d", _numberOfCores); + +#elif defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) + _numberOfCores = get_nprocs(); + WEBRTC_TRACE(kTraceStateInfo, kTraceUtility, -1, + "Available number of cores:%d", _numberOfCores); + +#elif (defined(WEBRTC_MAC) || defined(WEBRTC_MAC_INTEL)) + int name[] = {CTL_HW, HW_AVAILCPU}; + int ncpu; + size_t size = sizeof(ncpu); + if(0 == sysctl(name, 2, &ncpu, &size, NULL, 0)) + { + _numberOfCores = static_cast<WebRtc_UWord32>(ncpu); + WEBRTC_TRACE(kTraceStateInfo, kTraceUtility, -1, + "Available number of cores:%d", _numberOfCores); + } else + { + WEBRTC_TRACE(kTraceError, kTraceUtility, -1, + "Failed to get number of cores"); + _numberOfCores = 1; + } +#else + WEBRTC_TRACE(kTraceWarning, kTraceUtility, -1, + "No function to get number of cores"); + _numberOfCores = 1; +#endif + } + return _numberOfCores; +} + +} // namespace webrtc |