Skip to content

Commit

Permalink
Add g_fxo->init_crtp to simplify thread construction
Browse files Browse the repository at this point in the history
  • Loading branch information
Nekotekina committed Feb 25, 2020
1 parent 7eebe06 commit fa02a04
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 11 deletions.
12 changes: 4 additions & 8 deletions rpcs3/Emu/RSX/RSXThread.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -498,7 +498,7 @@ namespace rsx

vblank_count = 0;

auto vblank_body = [this]()
g_fxo->init_crtp<named_thread>("VBlank Thread", [this]()
{
// See sys_timer_usleep for details
#ifdef __linux__
Expand Down Expand Up @@ -562,11 +562,9 @@ namespace rsx

thread_ctrl::wait_for(100);
}
};

g_fxo->init<named_thread<decltype(vblank_body)>>("VBlank Thread", std::move(vblank_body));
});

auto decomp_body = [this]
g_fxo->init_crtp<named_thread>("RSX Decompiler Thread", [this]
{
if (g_cfg.video.disable_asynchronous_shader_compiler)
{
Expand Down Expand Up @@ -597,9 +595,7 @@ namespace rsx
}

on_decompiler_exit();
};

g_fxo->init<named_thread<decltype(decomp_body)>>("RSX Decompiler Thread", std::move(decomp_body));
});

// Raise priority above other threads
thread_ctrl::set_native_priority(1);
Expand Down
5 changes: 2 additions & 3 deletions rpcs3/Emu/System.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -868,7 +868,7 @@ void Emulator::Load(const std::string& title_id, bool add_only, bool force_globa
// Workaround for analyser glitches
vm::falloc(0x10000, 0xf0000, vm::main);

auto sprx_loader_body = [this]
g_fxo->init_crtp<named_thread>("SPRX Loader"sv, [this]
{
std::vector<std::string> dir_queue;
dir_queue.emplace_back(m_path + '/');
Expand Down Expand Up @@ -983,9 +983,8 @@ void Emulator::Load(const std::string& title_id, bool add_only, bool force_globa
{
Emu.Stop();
});
};
});

g_fxo->init<named_thread<decltype(sprx_loader_body)>>("SPRX Loader"sv, std::move(sprx_loader_body));
return;
}

Expand Down
8 changes: 8 additions & 0 deletions rpcs3/util/fixed_typemap.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,14 @@ namespace stx
return obj;
}

// Special stuff
template <template <class...> typename CTAD, typename... Args>
auto init_crtp(Args&&... args) noexcept
{
using T = decltype(CTAD{std::forward<Args>(args)...});
return init<T>(std::forward<Args>(args)...);
}

// Obtain object pointer (the only thread safe function)
template <typename T>
T* get() const noexcept
Expand Down

0 comments on commit fa02a04

Please sign in to comment.