mirror of
https://github.com/RPCS3/rpcs3.git
synced 2024-11-22 02:32:36 +01:00
System: only init fxo objects if a game is started
The progress_dialog and patch system aren't needed unless a game is started. Before, they were both initialized everytime we added a single game to the game list or even when simply started RPCS3. This both means that a thread was needlessly idling all the time and even worse: The patch.yml was read countless times when we didn't need it.
This commit is contained in:
parent
c37c6fb6de
commit
129ade2f73
@ -64,12 +64,6 @@ void fmt_class_string<patch_type>::format(std::string& out, u64 arg)
|
|||||||
|
|
||||||
patch_engine::patch_engine()
|
patch_engine::patch_engine()
|
||||||
{
|
{
|
||||||
const std::string patches_path = get_patches_path();
|
|
||||||
|
|
||||||
if (!fs::create_path(patches_path))
|
|
||||||
{
|
|
||||||
patch_log.fatal("Failed to create path: %s (%s)", patches_path, fs::g_tls_error);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string patch_engine::get_patch_config_path()
|
std::string patch_engine::get_patch_config_path()
|
||||||
|
@ -117,7 +117,6 @@ void Emulator::Init(bool add_only)
|
|||||||
}
|
}
|
||||||
|
|
||||||
g_fxo->reset();
|
g_fxo->reset();
|
||||||
g_fxo->need<named_thread<progress_dialog_server>>();
|
|
||||||
|
|
||||||
// Reset defaults, cache them
|
// Reset defaults, cache them
|
||||||
g_cfg.from_default();
|
g_cfg.from_default();
|
||||||
@ -235,6 +234,7 @@ void Emulator::Init(bool add_only)
|
|||||||
make_path_verbose(fs::get_cache_dir() + "shaderlog/");
|
make_path_verbose(fs::get_cache_dir() + "shaderlog/");
|
||||||
make_path_verbose(fs::get_cache_dir() + "spu_progs/");
|
make_path_verbose(fs::get_cache_dir() + "spu_progs/");
|
||||||
make_path_verbose(fs::get_config_dir() + "captures/");
|
make_path_verbose(fs::get_config_dir() + "captures/");
|
||||||
|
make_path_verbose(patch_engine::get_patches_path());
|
||||||
|
|
||||||
if (add_only)
|
if (add_only)
|
||||||
{
|
{
|
||||||
@ -312,9 +312,6 @@ void Emulator::Init(bool add_only)
|
|||||||
// Limit cache size
|
// Limit cache size
|
||||||
if (g_cfg.vfs.limit_cache_size)
|
if (g_cfg.vfs.limit_cache_size)
|
||||||
rpcs3::cache::limit_cache_size();
|
rpcs3::cache::limit_cache_size();
|
||||||
|
|
||||||
// Initialize patch engine
|
|
||||||
g_fxo->init<patch_engine>()->append_global_patches();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Emulator::SetUsr(const std::string& user)
|
void Emulator::SetUsr(const std::string& user)
|
||||||
@ -419,6 +416,9 @@ bool Emulator::BootRsxCapture(const std::string& path)
|
|||||||
vm::init();
|
vm::init();
|
||||||
g_fxo->init(false);
|
g_fxo->init(false);
|
||||||
|
|
||||||
|
// Initialize progress dialog
|
||||||
|
g_fxo->init<named_thread<progress_dialog_server>>();
|
||||||
|
|
||||||
// PS3 'executable'
|
// PS3 'executable'
|
||||||
m_state = system_state::ready;
|
m_state = system_state::ready;
|
||||||
GetCallbacks().on_ready();
|
GetCallbacks().on_ready();
|
||||||
@ -649,22 +649,28 @@ game_boot_result Emulator::Load(const std::string& title_id, bool add_only, bool
|
|||||||
// Set RTM usage
|
// Set RTM usage
|
||||||
g_use_rtm = utils::has_rtm() && ((utils::has_mpx() && g_cfg.core.enable_TSX == tsx_usage::enabled) || g_cfg.core.enable_TSX == tsx_usage::forced);
|
g_use_rtm = utils::has_rtm() && ((utils::has_mpx() && g_cfg.core.enable_TSX == tsx_usage::enabled) || g_cfg.core.enable_TSX == tsx_usage::forced);
|
||||||
|
|
||||||
// Log some extra info in case of boot
|
|
||||||
if (!add_only)
|
if (!add_only)
|
||||||
{
|
{
|
||||||
|
// Log some extra info in case of boot
|
||||||
#if defined(_WIN32) || defined(HAVE_VULKAN)
|
#if defined(_WIN32) || defined(HAVE_VULKAN)
|
||||||
if (g_cfg.video.renderer == video_renderer::vulkan)
|
if (g_cfg.video.renderer == video_renderer::vulkan)
|
||||||
{
|
{
|
||||||
sys_log.notice("Vulkan SDK Revision: %d", VK_HEADER_VERSION);
|
sys_log.notice("Vulkan SDK Revision: %d", VK_HEADER_VERSION);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
sys_log.notice("Used configuration:\n%s\n", g_cfg.to_string());
|
sys_log.notice("Used configuration:\n%s\n", g_cfg.to_string());
|
||||||
|
|
||||||
if (g_use_rtm && !utils::has_mpx())
|
if (g_use_rtm && !utils::has_mpx())
|
||||||
{
|
{
|
||||||
sys_log.warning("TSX forced by User");
|
sys_log.warning("TSX forced by User");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Initialize patch engine
|
||||||
|
g_fxo->need<patch_engine>();
|
||||||
|
|
||||||
|
// Load patches from different locations
|
||||||
|
g_fxo->get<patch_engine>().append_global_patches();
|
||||||
|
g_fxo->get<patch_engine>().append_title_patches(m_title_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_use_rtm)
|
if (g_use_rtm)
|
||||||
@ -675,9 +681,6 @@ game_boot_result Emulator::Load(const std::string& title_id, bool add_only, bool
|
|||||||
g_rtm_tx_limit2 = static_cast<u64>(g_cfg.core.tx_limit2_ns * _1ns);
|
g_rtm_tx_limit2 = static_cast<u64>(g_cfg.core.tx_limit2_ns * _1ns);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load patches from different locations
|
|
||||||
g_fxo->get<patch_engine>().append_title_patches(m_title_id);
|
|
||||||
|
|
||||||
// Mount all devices
|
// Mount all devices
|
||||||
const std::string emu_dir = rpcs3::utils::get_emu_dir();
|
const std::string emu_dir = rpcs3::utils::get_emu_dir();
|
||||||
std::string bdvd_dir;
|
std::string bdvd_dir;
|
||||||
@ -1038,6 +1041,9 @@ game_boot_result Emulator::Load(const std::string& title_id, bool add_only, bool
|
|||||||
return game_boot_result::no_errors;
|
return game_boot_result::no_errors;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Initialize progress dialog
|
||||||
|
g_fxo->init<named_thread<progress_dialog_server>>();
|
||||||
|
|
||||||
// Set title to actual disc title if necessary
|
// Set title to actual disc title if necessary
|
||||||
const std::string disc_sfo_dir = vfs::get("/dev_bdvd/PS3_GAME/PARAM.SFO");
|
const std::string disc_sfo_dir = vfs::get("/dev_bdvd/PS3_GAME/PARAM.SFO");
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user