aboutsummaryrefslogtreecommitdiff
path: root/src/common/thread_worker.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/thread_worker.h')
-rw-r--r--src/common/thread_worker.h21
1 files changed, 18 insertions, 3 deletions
diff --git a/src/common/thread_worker.h b/src/common/thread_worker.h
index 6ec9d6a2bd..ec3ca0af49 100644
--- a/src/common/thread_worker.h
+++ b/src/common/thread_worker.h
@@ -1,4 +1,4 @@
-// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
+// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project
@@ -37,10 +37,25 @@ class StatefulThreadWorker {
using StateMaker = std::conditional_t<with_state, std::function<StateType()>, DummyCallable>;
public:
- explicit StatefulThreadWorker(size_t num_workers, std::string name, StateMaker func = {})
+ explicit StatefulThreadWorker(size_t num_workers, std::string name, StateMaker func = {},
+ ThreadPlacement placement = ThreadPlacement::Default)
: workers_queued{num_workers}, thread_name{std::move(name)} {
- const auto lambda = [this, func](std::stop_token stop_token) {
+ const auto lambda = [this, func, placement](std::stop_token stop_token) {
Common::SetCurrentThreadName(thread_name.c_str());
+ if (placement != ThreadPlacement::Default) {
+ Common::SetCurrentThreadPriority(ThreadPriority::Low);
+ }
+ switch (placement) {
+ case ThreadPlacement::Efficiency:
+ Common::SetCurrentThreadToEfficiencyCores();
+ break;
+ case ThreadPlacement::Background:
+ Common::SetCurrentThreadToBackgroundWork();
+ break;
+ default:
+ Common::SetCurrentThreadToAllCores();
+ break;
+ }
{
[[maybe_unused]] std::conditional_t<with_state, StateType, int> state{func()};
while (!stop_token.stop_requested()) {