summaryrefslogtreecommitdiff
path: root/Source/Android/app/src/main/java
diff options
context:
space:
mode:
authorJosJuice <josjuice@gmail.com>2021-08-08 14:33:06 +0200
committerJosJuice <josjuice@gmail.com>2021-09-21 16:32:47 +0200
commit446e2d9119a3c4281e72feefca9bbcd2b1eb21e3 (patch)
tree523b3fd028ea69e5fadae5573372b7a637054dd6 /Source/Android/app/src/main/java
parent2c564a0b9d654d860dcc2832b2492f8e1b94813b (diff)
Android: Remove state from EmulationState
Diffstat (limited to 'Source/Android/app/src/main/java')
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java9
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/EmulationFragment.java79
2 files changed, 21 insertions, 67 deletions
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java
index 5ab4e15993..123cd6c066 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java
@@ -411,12 +411,21 @@ public final class NativeLibrary
public static native void StopEmulation();
/**
+ * Ensures that IsRunning will return true from now on until emulation exits.
+ * (If this is not called, IsRunning will start returning true at some point
+ * after calling Run.)
+ */
+ public static native void SetIsBooting();
+
+ /**
* Returns true if emulation is running (or is paused).
*/
public static native boolean IsRunning();
public static native boolean IsRunningAndStarted();
+ public static native boolean IsRunningAndUnpaused();
+
/**
* Enables or disables CPU block profiling
*
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/EmulationFragment.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/EmulationFragment.java
index 2ea106cb4a..ce35f1e98e 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/EmulationFragment.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/EmulationFragment.java
@@ -123,8 +123,12 @@ public final class EmulationFragment extends Fragment implements SurfaceHolder.C
@Override
public void onPause()
{
- if (mEmulationState.isRunning() && !NativeLibrary.IsShowingAlertMessage())
- mEmulationState.pause();
+ if (NativeLibrary.IsRunningAndUnpaused() && !NativeLibrary.IsShowingAlertMessage())
+ {
+ Log.debug("[EmulationFragment] Pausing emulation.");
+ NativeLibrary.PauseEmulation();
+ }
+
super.onPause();
}
@@ -186,7 +190,8 @@ public final class EmulationFragment extends Fragment implements SurfaceHolder.C
public void stopEmulation()
{
- mEmulationState.stop();
+ Log.debug("[EmulationFragment] Stopping emulation.");
+ NativeLibrary.StopEmulation();
}
public void startConfiguringControls()
@@ -214,13 +219,7 @@ public final class EmulationFragment extends Fragment implements SurfaceHolder.C
private static class EmulationState
{
- private enum State
- {
- STOPPED, RUNNING, PAUSED
- }
-
private final String[] mGamePaths;
- private State state;
private boolean mRunWhenSurfaceIsValid;
private boolean loadPreviousTemporaryState;
private final String temporaryStatePath;
@@ -229,56 +228,6 @@ public final class EmulationFragment extends Fragment implements SurfaceHolder.C
{
mGamePaths = gamePaths;
this.temporaryStatePath = temporaryStatePath;
- // Starting state is stopped.
- state = State.STOPPED;
- }
-
- // Getters for the current state
-
- public synchronized boolean isStopped()
- {
- return state == State.STOPPED;
- }
-
- public synchronized boolean isPaused()
- {
- return state == State.PAUSED;
- }
-
- public synchronized boolean isRunning()
- {
- return state == State.RUNNING;
- }
-
- // State changing methods
-
- public synchronized void stop()
- {
- if (state != State.STOPPED)
- {
- Log.debug("[EmulationFragment] Stopping emulation.");
- state = State.STOPPED;
- NativeLibrary.StopEmulation();
- }
- else
- {
- Log.warning("[EmulationFragment] Stop called while already stopped.");
- }
- }
-
- public synchronized void pause()
- {
- if (state != State.PAUSED)
- {
- state = State.PAUSED;
- Log.debug("[EmulationFragment] Pausing emulation.");
-
- NativeLibrary.PauseEmulation();
- }
- else
- {
- Log.warning("[EmulationFragment] Pause called while already paused.");
- }
}
public synchronized void run(boolean isActivityRecreated)
@@ -288,7 +237,6 @@ public final class EmulationFragment extends Fragment implements SurfaceHolder.C
if (NativeLibrary.IsRunning())
{
loadPreviousTemporaryState = false;
- state = State.PAUSED;
deleteFile(temporaryStatePath);
}
else
@@ -326,8 +274,10 @@ public final class EmulationFragment extends Fragment implements SurfaceHolder.C
private void runWithValidSurface()
{
mRunWhenSurfaceIsValid = false;
- if (state == State.STOPPED)
+ if (!NativeLibrary.IsRunning())
{
+ NativeLibrary.SetIsBooting();
+
Thread emulationThread = new Thread(() ->
{
if (loadPreviousTemporaryState)
@@ -344,7 +294,7 @@ public final class EmulationFragment extends Fragment implements SurfaceHolder.C
}, "NativeEmulation");
emulationThread.start();
}
- else if (state == State.PAUSED)
+ else
{
if (!EmulationActivity.getHasUserPausedEmulation() &&
!NativeLibrary.IsShowingAlertMessage())
@@ -353,11 +303,6 @@ public final class EmulationFragment extends Fragment implements SurfaceHolder.C
NativeLibrary.UnPauseEmulation();
}
}
- else
- {
- Log.debug("[EmulationFragment] Bug, run called while already running.");
- }
- state = State.RUNNING;
}
}