summaryrefslogtreecommitdiffstats
path: root/hal/windows/WindowsProcessPriority.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'hal/windows/WindowsProcessPriority.cpp')
-rw-r--r--hal/windows/WindowsProcessPriority.cpp45
1 files changed, 45 insertions, 0 deletions
diff --git a/hal/windows/WindowsProcessPriority.cpp b/hal/windows/WindowsProcessPriority.cpp
new file mode 100644
index 0000000000..c660991278
--- /dev/null
+++ b/hal/windows/WindowsProcessPriority.cpp
@@ -0,0 +1,45 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "Hal.h"
+#include "HalLog.h"
+
+#include <windows.h>
+
+using namespace mozilla::hal;
+
+namespace mozilla {
+namespace hal_impl {
+
+bool SetProcessPrioritySupported() { return true; }
+
+void SetProcessPriority(int aPid, ProcessPriority aPriority) {
+ HAL_LOG("WindowsProcessPriority - SetProcessPriority(%d, %s)\n", aPid,
+ ProcessPriorityToString(aPriority));
+
+ nsAutoHandle processHandle(
+ ::OpenProcess(PROCESS_SET_INFORMATION, FALSE, aPid));
+#ifdef DEBUG
+ if (!processHandle) {
+ printf_stderr("::OpenProcess() failed with error %#08x\n",
+ ::GetLastError());
+ }
+#endif // DEBUG
+ MOZ_ASSERT(processHandle);
+ if (processHandle) {
+ DWORD priority = NORMAL_PRIORITY_CLASS;
+ if (aPriority == PROCESS_PRIORITY_BACKGROUND) {
+ priority = IDLE_PRIORITY_CLASS;
+ } else if (aPriority == PROCESS_PRIORITY_BACKGROUND_PERCEIVABLE) {
+ priority = BELOW_NORMAL_PRIORITY_CLASS;
+ }
+ ::SetPriorityClass(processHandle, priority);
+ }
+
+ HAL_LOG("WindowsProcessPriority - priority set to %d for pid %d\n", aPriority,
+ aPid);
+}
+
+} // namespace hal_impl
+} // namespace mozilla