diff options
| author | Markus Wick <degasus@users.noreply.github.com> | 2018-01-05 13:45:36 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-01-05 13:45:36 +0100 |
| commit | e705d433126e00e3dc39e7a25a182fcd3b555a2b (patch) | |
| tree | d362f74f96adb576fe0bfbff3e8b11cf4236b100 /Source/Core | |
| parent | e31f8f8ecb901a81cdf6075ca305032a6ba3366b (diff) | |
| parent | 136e835fb489f2b0412c760739dd5c668055fb56 (diff) | |
Merge pull request #6270 from mahdihijazi/suppport_restore_state
[Android] Support restore emulator state
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/Core/Boot/Boot.h | 1 | ||||
| -rw-r--r-- | Source/Core/Core/Core.cpp | 20 |
2 files changed, 15 insertions, 6 deletions
diff --git a/Source/Core/Core/Boot/Boot.h b/Source/Core/Core/Boot/Boot.h index 7581b2abb8..a6b7391b44 100644 --- a/Source/Core/Core/Boot/Boot.h +++ b/Source/Core/Core/Boot/Boot.h @@ -76,6 +76,7 @@ struct BootParameters Parameters parameters; std::optional<std::string> savestate_path; + bool delete_savestate = false; }; class CBoot diff --git a/Source/Core/Core/Core.cpp b/Source/Core/Core/Core.cpp index 1d77f4e2fc..500885ffbb 100644 --- a/Source/Core/Core/Core.cpp +++ b/Source/Core/Core/Core.cpp @@ -318,7 +318,7 @@ static void CPUSetInitialExecutionState() } // Create the CPU thread, which is a CPU + Video thread in Single Core mode. -static void CpuThread(const std::optional<std::string>& savestate_path) +static void CpuThread(const std::optional<std::string>& savestate_path, bool delete_savestate) { DeclareAsCPUThread(); @@ -342,7 +342,13 @@ static void CpuThread(const std::optional<std::string>& savestate_path) EMM::InstallExceptionHandler(); // Let's run under memory watch if (savestate_path) - QueueHostJob([&savestate_path] { ::State::LoadAs(*savestate_path); }); + { + QueueHostJob([&savestate_path, delete_savestate] { + ::State::LoadAs(*savestate_path); + if (delete_savestate) + File::Delete(*savestate_path); + }); + } s_is_started = true; CPUSetInitialExecutionState(); @@ -380,7 +386,8 @@ static void CpuThread(const std::optional<std::string>& savestate_path) EMM::UninstallExceptionHandler(); } -static void FifoPlayerThread(const std::optional<std::string>& savestate_path) +static void FifoPlayerThread(const std::optional<std::string>& savestate_path, + bool delete_savestate) { DeclareAsCPUThread(); const SConfig& _CoreParameter = SConfig::GetInstance(); @@ -517,6 +524,7 @@ static void EmuThread(std::unique_ptr<BootParameters> boot) } const std::optional<std::string> savestate_path = boot->savestate_path; + const bool delete_savestate = boot->delete_savestate; // Load and Init Wiimotes - only if we are booting in Wii mode if (core_parameter.bWii && !SConfig::GetInstance().m_bt_passthrough_enabled) @@ -556,7 +564,7 @@ static void EmuThread(std::unique_ptr<BootParameters> boot) PowerPC::SetMode(PowerPC::CoreMode::Interpreter); // Determine the CPU thread function - void (*cpuThreadFunc)(const std::optional<std::string>& savestate_path); + void (*cpuThreadFunc)(const std::optional<std::string>& savestate_path, bool delete_savestate); if (std::holds_alternative<BootParameters::DFF>(boot->parameters)) cpuThreadFunc = FifoPlayerThread; else @@ -597,7 +605,7 @@ static void EmuThread(std::unique_ptr<BootParameters> boot) Host_Message(WM_USER_CREATE); // Spawn the CPU thread - s_cpu_thread = std::thread(cpuThreadFunc, savestate_path); + s_cpu_thread = std::thread(cpuThreadFunc, savestate_path, delete_savestate); // become the GPU thread Fifo::RunGpuLoop(); @@ -615,7 +623,7 @@ static void EmuThread(std::unique_ptr<BootParameters> boot) Common::SetCurrentThreadName("Emuthread - Idle"); // Spawn the CPU+GPU thread - s_cpu_thread = std::thread(cpuThreadFunc, savestate_path); + s_cpu_thread = std::thread(cpuThreadFunc, savestate_path, delete_savestate); while (CPU::GetState() != CPU::State::PowerDown) { |
