summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Charles Lombardo2023-08-27 22:04:04 -0400
committerGravatar Charles Lombardo2023-08-30 15:19:23 -0400
commit5445e974e0cf164c3295d9eaa658b9d62fe42019 (patch)
tree1beffa53dc3adc39355e6ea2349e6d908b4f05bc
parentandroid: Game loading/shutting down indicators (diff)
downloadyuzu-5445e974e0cf164c3295d9eaa658b9d62fe42019.tar.gz
yuzu-5445e974e0cf164c3295d9eaa658b9d62fe42019.tar.xz
yuzu-5445e974e0cf164c3295d9eaa658b9d62fe42019.zip
android: Separate emulation states from emulation mutex
Emulation states are repeatedly checked by input and performance stats. During startup and shutdown, this could lead to a long halt on the UI thread because the call to IsRunning will be waiting on the emulation mutex to be unlocked. Using atomics should replace the existing functionality without causing problems.
Diffstat (limited to '')
-rw-r--r--src/android/app/src/main/jni/native.cpp6
1 files changed, 2 insertions, 4 deletions
diff --git a/src/android/app/src/main/jni/native.cpp b/src/android/app/src/main/jni/native.cpp
index 83e88010f..0f2a6d9e4 100644
--- a/src/android/app/src/main/jni/native.cpp
+++ b/src/android/app/src/main/jni/native.cpp
@@ -203,12 +203,10 @@ public:
203 } 203 }
204 204
205 bool IsRunning() const { 205 bool IsRunning() const {
206 std::scoped_lock lock(m_mutex);
207 return m_is_running; 206 return m_is_running;
208 } 207 }
209 208
210 bool IsPaused() const { 209 bool IsPaused() const {
211 std::scoped_lock lock(m_mutex);
212 return m_is_running && m_is_paused; 210 return m_is_running && m_is_paused;
213 } 211 }
214 212
@@ -544,8 +542,8 @@ private:
544 Core::PerfStatsResults m_perf_stats{}; 542 Core::PerfStatsResults m_perf_stats{};
545 std::shared_ptr<FileSys::VfsFilesystem> m_vfs; 543 std::shared_ptr<FileSys::VfsFilesystem> m_vfs;
546 Core::SystemResultStatus m_load_result{Core::SystemResultStatus::ErrorNotInitialized}; 544 Core::SystemResultStatus m_load_result{Core::SystemResultStatus::ErrorNotInitialized};
547 bool m_is_running{}; 545 std::atomic<bool> m_is_running = false;
548 bool m_is_paused{}; 546 std::atomic<bool> m_is_paused = false;
549 SoftwareKeyboard::AndroidKeyboard* m_software_keyboard{}; 547 SoftwareKeyboard::AndroidKeyboard* m_software_keyboard{};
550 std::unique_ptr<Service::Account::ProfileManager> m_profile_manager; 548 std::unique_ptr<Service::Account::ProfileManager> m_profile_manager;
551 std::unique_ptr<FileSys::ManualContentProvider> m_manual_provider; 549 std::unique_ptr<FileSys::ManualContentProvider> m_manual_provider;