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:
parent
a69248299d
commit
ee288340b0
@ -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;
|
||||
|
@ -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));
|
||||
|
@ -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++)
|
||||
{
|
||||
|
@ -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));
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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))
|
||||
|
@ -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)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user