1
0
mirror of https://github.com/RPCS3/rpcs3.git synced 2024-11-22 02:32:36 +01:00

Implement thread_ctrl::scoped_priority

RAII priority control (+1, or -1)
This commit is contained in:
Nekotekina 2021-01-25 21:49:16 +03:00
parent a69248299d
commit ee288340b0
7 changed files with 26 additions and 11 deletions

View File

@ -281,6 +281,24 @@ public:
// Get current thread stack addr and size
static std::pair<void*, usz> get_thread_stack();
// Sets the native thread priority and returns it to zero at destructor
struct scoped_priority
{
explicit scoped_priority(int prio)
{
set_native_priority(prio);
}
scoped_priority(const scoped_priority&) = delete;
scoped_priority& operator=(const scoped_priority&) = delete;
~scoped_priority()
{
set_native_priority(0);
}
};
private:
// Miscellaneous
static const u64 process_affinity_mask;

View File

@ -600,7 +600,7 @@ void cell_audio_thread::update_config()
void cell_audio_thread::operator()()
{
thread_ctrl::set_native_priority(1);
thread_ctrl::scoped_priority high_prio(+1);
// Allocate ringbuffer
ringbuffer.reset(new audio_ringbuffer(cfg));

View File

@ -2358,7 +2358,7 @@ extern void ppu_initialize(const ppu_module& info)
named_thread_group threads(fmt::format("PPUW.%u.", ++g_fxo->get<thread_index_allocator>()->index), thread_count, [&]()
{
// Set low priority
thread_ctrl::set_native_priority(-1);
thread_ctrl::scoped_priority low_prio(-1);
for (u32 i = work_cv++; i < workload.size(); i = work_cv++)
{

View File

@ -434,7 +434,7 @@ void spu_cache::initialize()
named_thread_group workers("SPU Worker ", worker_count, [&]() -> uint
{
// Set low priority
thread_ctrl::set_native_priority(-1);
thread_ctrl::scoped_priority low_prio(-1);
// Initialize compiler instances for parallel compilation
std::unique_ptr<spu_recompiler_base> compiler;
@ -521,9 +521,6 @@ void spu_cache::initialize()
result++;
}
// Restore default priority
thread_ctrl::set_native_priority(0);
return result;
});
@ -6665,7 +6662,7 @@ public:
const auto as = byteswap(a);
const auto sc = build<u8[16]>(15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0);
const auto sh = eval(sc + splat_scalar(b));
if (m_use_avx512_icl)
{
set_vr(op.rt, vpermb(as, sh));
@ -6678,7 +6675,7 @@ public:
const auto sc = build<u8[16]>(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
const auto sh = eval(sc - splat_scalar(b));
if (m_use_avx512_icl)
{
set_vr(op.rt, vpermb(a, sh));

View File

@ -618,7 +618,7 @@ namespace rsx
});
// Raise priority above other threads
thread_ctrl::set_native_priority(1);
thread_ctrl::scoped_priority high_prio(+1);
if (g_cfg.core.thread_scheduler_enabled)
{

View File

@ -38,7 +38,7 @@ render_creator::render_creator(QObject *parent) : QObject(parent)
std::thread enum_thread = std::thread([&]
{
thread_ctrl::set_native_priority(-1);
thread_ctrl::scoped_priority low_prio(-1);
vk::instance device_enum_context;
if (device_enum_context.create("RPCS3", true))

View File

@ -421,7 +421,7 @@ logs::file_writer::file_writer(const std::string& name, u64 max_size)
m_writer = std::thread([this]()
{
thread_ctrl::set_native_priority(-1);
thread_ctrl::scoped_priority low_prio(-1);
while (true)
{