mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-24 06:39:46 -06:00
Merge pull request #8452 from JosJuice/android-emulationactivity-rotation-crash
Android: Replace emulation rotation crash workaround with proper fix
This commit is contained in:
@ -94,6 +94,7 @@ static bool s_is_stopping = false;
|
||||
static bool s_hardware_initialized = false;
|
||||
static bool s_is_started = false;
|
||||
static Common::Flag s_is_booting;
|
||||
static Common::Event s_done_booting;
|
||||
static std::thread s_emu_thread;
|
||||
static StateChangedCallbackFunc s_on_state_changed_callback;
|
||||
|
||||
@ -236,6 +237,8 @@ bool Init(std::unique_ptr<BootParameters> boot, const WindowSystemInfo& wsi)
|
||||
g_video_backend->PrepareWindow(wsi);
|
||||
|
||||
// Start the emu thread
|
||||
s_done_booting.Reset();
|
||||
s_is_booting.Set();
|
||||
s_emu_thread = std::thread(EmuThread, std::move(boot), wsi);
|
||||
return true;
|
||||
}
|
||||
@ -412,11 +415,11 @@ static void FifoPlayerThread(const std::optional<std::string>& savestate_path,
|
||||
static void EmuThread(std::unique_ptr<BootParameters> boot, WindowSystemInfo wsi)
|
||||
{
|
||||
const SConfig& core_parameter = SConfig::GetInstance();
|
||||
s_is_booting.Set();
|
||||
if (s_on_state_changed_callback)
|
||||
s_on_state_changed_callback(State::Starting);
|
||||
Common::ScopeGuard flag_guard{[] {
|
||||
s_is_booting.Clear();
|
||||
s_done_booting.Set();
|
||||
s_is_started = false;
|
||||
s_is_stopping = false;
|
||||
s_wants_determinism = false;
|
||||
@ -539,6 +542,7 @@ static void EmuThread(std::unique_ptr<BootParameters> boot, WindowSystemInfo wsi
|
||||
// The hardware is initialized.
|
||||
s_hardware_initialized = true;
|
||||
s_is_booting.Clear();
|
||||
s_done_booting.Set();
|
||||
|
||||
// Set execution state to known values (CPU/FIFO/Audio Paused)
|
||||
CPU::Break();
|
||||
@ -662,6 +666,12 @@ State GetState()
|
||||
return State::Uninitialized;
|
||||
}
|
||||
|
||||
void WaitUntilDoneBooting()
|
||||
{
|
||||
if (s_is_booting.IsSet() || !s_hardware_initialized)
|
||||
s_done_booting.Wait();
|
||||
}
|
||||
|
||||
static std::string GenerateScreenshotFolderPath()
|
||||
{
|
||||
const std::string& gameId = SConfig::GetInstance().GetGameID();
|
||||
|
@ -56,6 +56,7 @@ bool WantsDeterminism();
|
||||
// [NOT THREADSAFE] For use by Host only
|
||||
void SetState(State state);
|
||||
State GetState();
|
||||
void WaitUntilDoneBooting();
|
||||
|
||||
void SaveScreenShot(bool wait_for_completion = false);
|
||||
void SaveScreenShot(std::string_view name, bool wait_for_completion = false);
|
||||
|
Reference in New Issue
Block a user