summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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;