summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2023-01-26 04:00:11 +0100
committerbunnei <bunneidev@gmail.com>2023-06-03 09:05:28 +0200
commitd553fd4c3aaa947588954751cb07197b5c58fa4c (patch)
treeb08b72a3c0471efcb4d14d1d9d57f6b8f12f427d
parentandroid: jni: native: Remove unnecessary atomic for is_running. (diff)
downloadyuzu-d553fd4c3aaa947588954751cb07197b5c58fa4c.tar
yuzu-d553fd4c3aaa947588954751cb07197b5c58fa4c.tar.gz
yuzu-d553fd4c3aaa947588954751cb07197b5c58fa4c.tar.bz2
yuzu-d553fd4c3aaa947588954751cb07197b5c58fa4c.tar.lz
yuzu-d553fd4c3aaa947588954751cb07197b5c58fa4c.tar.xz
yuzu-d553fd4c3aaa947588954751cb07197b5c58fa4c.tar.zst
yuzu-d553fd4c3aaa947588954751cb07197b5c58fa4c.zip
-rw-r--r--src/android/app/src/main/jni/native.cpp29
1 files changed, 21 insertions, 8 deletions
diff --git a/src/android/app/src/main/jni/native.cpp b/src/android/app/src/main/jni/native.cpp
index f1a70c35c..119c7cd01 100644
--- a/src/android/app/src/main/jni/native.cpp
+++ b/src/android/app/src/main/jni/native.cpp
@@ -61,6 +61,7 @@ public:
}
bool IsRunning() const {
+ std::scoped_lock lock(mutex);
return is_running;
}
@@ -130,9 +131,10 @@ public:
}
void RunEmulation() {
- std::unique_lock lock(mutex);
-
- is_running = true;
+ {
+ std::scoped_lock lock(mutex);
+ is_running = true;
+ }
void(system.Run());
@@ -140,9 +142,19 @@ public:
system.InitializeDebugger();
}
- while (!cv.wait_for(lock, std::chrono::seconds(1), [&]() { return !is_running; })) {
- std::scoped_lock perf_stats_lock(perf_stats_mutex);
- perf_stats = system.GetAndResetPerfStats();
+ while (true) {
+ {
+ std::unique_lock lock(mutex);
+ if (cv.wait_for(lock, std::chrono::seconds(1), [&]() { return !is_running; })) {
+ // Emulation halted.
+ break;
+ }
+ }
+ {
+ // Refresh performance stats.
+ std::scoped_lock perf_stats_lock(perf_stats_mutex);
+ perf_stats = system.GetAndResetPerfStats();
+ }
}
}
@@ -156,12 +168,13 @@ private:
Core::System system;
Core::PerfStatsResults perf_stats{};
- mutable std::mutex perf_stats_mutex;
std::unique_ptr<EmuWindow_Android> window;
- std::mutex mutex;
std::condition_variable_any cv;
bool is_running{};
+
+ mutable std::mutex perf_stats_mutex;
+ mutable std::mutex mutex;
};
/*static*/ EmulationSession EmulationSession::s_instance;