summaryrefslogtreecommitdiff
path: root/src/mongo/util/processinfo_windows.cpp
diff options
context:
space:
mode:
authorWaley Chen <waleycz@gmail.com>2016-02-25 18:09:15 -0500
committerWaley Chen <waleycz@gmail.com>2016-02-26 16:58:34 -0500
commit7f7a64a1d6ef791d3b111245301d73902e9e4875 (patch)
tree37685005da6ebc7afb34eb5253aa5823a2ef41fd /src/mongo/util/processinfo_windows.cpp
parent6e95475c55642d97e316467fa2adeb38edc6d762 (diff)
downloadmongo-7f7a64a1d6ef791d3b111245301d73902e9e4875.tar.gz
SERVER-22398 Add SystemInfo::numAvailableCores
Diffstat (limited to 'src/mongo/util/processinfo_windows.cpp')
-rw-r--r--src/mongo/util/processinfo_windows.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/mongo/util/processinfo_windows.cpp b/src/mongo/util/processinfo_windows.cpp
index 224cd5a896a..e39fa6778da 100644
--- a/src/mongo/util/processinfo_windows.cpp
+++ b/src/mongo/util/processinfo_windows.cpp
@@ -31,6 +31,9 @@
#include "mongo/platform/basic.h"
+#include <bitset>
+#include <boost/none.hpp>
+#include <boost/optional.hpp>
#include <iostream>
#include <psapi.h>
@@ -73,6 +76,18 @@ ProcessInfo::ProcessInfo(ProcessId pid) {}
ProcessInfo::~ProcessInfo() {}
+// get the number of CPUs available to the current process
+boost::optional<unsigned long> ProcessInfo::getNumAvailableCores() {
+ DWORD_PTR process_mask, system_mask;
+
+ if (GetProcessAffinityMask(GetCurrentProcess(), &process_mask, &system_mask)) {
+ std::bitset<32> mask(process_mask);
+ if (mask.count() > 0)
+ return mask.count();
+ }
+ return boost::none;
+}
+
bool ProcessInfo::supported() {
return true;
}