From 6cf7f437a7f66ceb0d9cb7c5d4615a6267e9f8eb Mon Sep 17 00:00:00 2001 From: Samuliak Date: Fri, 17 Jan 2025 14:51:54 +0100 Subject: [PATCH] set AIR cache thread priority --- .../Renderer/Metal/RendererShaderMtl.cpp | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/Cafe/HW/Latte/Renderer/Metal/RendererShaderMtl.cpp b/src/Cafe/HW/Latte/Renderer/Metal/RendererShaderMtl.cpp index 09a25499..94e4e928 100644 --- a/src/Cafe/HW/Latte/Renderer/Metal/RendererShaderMtl.cpp +++ b/src/Cafe/HW/Latte/Renderer/Metal/RendererShaderMtl.cpp @@ -35,7 +35,18 @@ public: s_threads.emplace_back(&ShaderMtlThreadPool::CompilerThreadFunc, this); // Create AIR cache thread - s_airCacheThread = new std::thread(&ShaderMtlThreadPool::AIRCacheThreadFunc, this); + s_airCacheThread = new std::thread(&ShaderMtlThreadPool::AIRCacheThreadFunc, this); + + // Set priority + sched_param schedParam; + schedParam.sched_priority = 20; + if (pthread_setschedparam(s_airCacheThread->native_handle(), SCHED_FIFO, &schedParam) != 0) { + cemuLog_log(LogType::Force, "failed to set FIFO thread priority"); + } + + if (pthread_setschedparam(s_airCacheThread->native_handle(), SCHED_RR, &schedParam) != 0) { + cemuLog_log(LogType::Force, "failed to set RR thread priority"); + } } void StopThreads() @@ -48,8 +59,12 @@ public: it.join(); s_threads.clear(); - s_airCacheThread->join(); - delete s_airCacheThread; + if (s_airCacheThread) + { + s_airCacheQueueCount.increment(); + s_airCacheThread->join(); + delete s_airCacheThread; + } } ~ShaderMtlThreadPool()