diff --git a/src/LibRyujinx/Android/JniExportedMethods.cs b/src/LibRyujinx/Android/JniExportedMethods.cs index 128e50886..2207d307f 100644 --- a/src/LibRyujinx/Android/JniExportedMethods.cs +++ b/src/LibRyujinx/Android/JniExportedMethods.cs @@ -116,41 +116,28 @@ namespace LibRyujinx ignoreMissingServices); } - [UnmanagedCallersOnly(EntryPoint = "Java_org_ryujinx_android_RyujinxNative_deviceGetGameStats")] - public static JObjectLocalRef JniGetGameStats(JEnvRef jEnv, JObjectLocalRef jObj) + [UnmanagedCallersOnly(EntryPoint = "Java_org_ryujinx_android_RyujinxNative_deviceGetGameFifo")] + public static JDouble JniGetGameFifo(JEnvRef jEnv, JObjectLocalRef jObj) { - var stats = GetGameStats(); + var stats = SwitchDevice.EmulationContext?.Statistics.GetFifoPercent() ?? 0; - var javaClassName = GetCCharSequence("org/ryujinx/android/viewmodels/GameStats"); + return stats; + } - JEnvValue value = jEnv.Environment; - ref JNativeInterface jInterface = ref value.Functions; - IntPtr findClassPtr = jInterface.FindClassPointer; - IntPtr newGlobalRefPtr = jInterface.NewGlobalRefPointer; - IntPtr getFieldIdPtr = jInterface.GetFieldIdPointer; - IntPtr getMethodPtr = jInterface.GetMethodIdPointer; - IntPtr newObjectPtr = jInterface.NewObjectPointer; - IntPtr setDoubleFieldPtr = jInterface.SetDoubleFieldPointer; + [UnmanagedCallersOnly(EntryPoint = "Java_org_ryujinx_android_RyujinxNative_deviceGetGameFrameTime")] + public static JDouble JniGetGameFrameTime(JEnvRef jEnv, JObjectLocalRef jObj) + { + var stats = SwitchDevice.EmulationContext?.Statistics.GetGameFrameTime() ?? 0; + return stats; + } - var findClass = findClassPtr.GetUnsafeDelegate(); - var newGlobalRef = newGlobalRefPtr.GetUnsafeDelegate(); - var getFieldId = getFieldIdPtr.GetUnsafeDelegate(); - var getMethod = getMethodPtr.GetUnsafeDelegate(); - var newObject = newObjectPtr.GetUnsafeDelegate(); - var setDoubleField = setDoubleFieldPtr.GetUnsafeDelegate(); + [UnmanagedCallersOnly(EntryPoint = "Java_org_ryujinx_android_RyujinxNative_deviceGetGameFrameRate")] + public static JDouble JniGetGameFrameRate(JEnvRef jEnv, JObjectLocalRef jObj) + { + var stats = SwitchDevice.EmulationContext?.Statistics.GetGameFrameRate() ?? 0; - var javaClass = findClass(jEnv, javaClassName); - var newGlobal = newGlobalRef(jEnv, javaClass._value); - var constructor = getMethod(jEnv, javaClass, GetCCharSequence(""), GetCCharSequence("()V")); - var newObj = newObject(jEnv, javaClass, constructor, 0); - - - setDoubleField(jEnv, newObj, getFieldId(jEnv, javaClass, GetCCharSequence("Fifo"), GetCCharSequence("D")), stats.Fifo); - setDoubleField(jEnv, newObj, getFieldId(jEnv, javaClass, GetCCharSequence("GameFps"), GetCCharSequence("D")), stats.GameFps); - setDoubleField(jEnv, newObj, getFieldId(jEnv, javaClass, GetCCharSequence("GameTime"), GetCCharSequence("D")), stats.GameTime); - - return newObj; + return stats; } [UnmanagedCallersOnly(EntryPoint = "Java_org_ryujinx_android_RyujinxNative_deviceLoad")] diff --git a/src/RyujinxAndroid/app/src/main/java/org/ryujinx/android/GameHost.kt b/src/RyujinxAndroid/app/src/main/java/org/ryujinx/android/GameHost.kt index eeb9e4c8e..a79306c8f 100644 --- a/src/RyujinxAndroid/app/src/main/java/org/ryujinx/android/GameHost.kt +++ b/src/RyujinxAndroid/app/src/main/java/org/ryujinx/android/GameHost.kt @@ -152,8 +152,7 @@ class GameHost(context: Context?, val controller: GameController, val mainViewMo c++ if (c >= 1000) { c = 0 - var stats = _nativeRyujinx.deviceGetGameStats() - mainViewModel.updateStats(stats.Fifo, stats.GameFps, stats.GameTime) + mainViewModel.updateStats(_nativeRyujinx.deviceGetGameFifo(), _nativeRyujinx.deviceGetGameFrameRate(), _nativeRyujinx.deviceGetGameFrameTime()) } } } diff --git a/src/RyujinxAndroid/app/src/main/java/org/ryujinx/android/RyujinxNative.kt b/src/RyujinxAndroid/app/src/main/java/org/ryujinx/android/RyujinxNative.kt index 3c127e66a..7cc7bcda7 100644 --- a/src/RyujinxAndroid/app/src/main/java/org/ryujinx/android/RyujinxNative.kt +++ b/src/RyujinxAndroid/app/src/main/java/org/ryujinx/android/RyujinxNative.kt @@ -2,7 +2,6 @@ package org.ryujinx.android import android.view.Surface import org.ryujinx.android.viewmodels.GameInfo -import org.ryujinx.android.viewmodels.GameStats import java.io.FileDescriptor class RyujinxNative { @@ -31,7 +30,9 @@ class RyujinxNative { ): Boolean external fun deviceLoad(game: String): Boolean - external fun deviceGetGameStats(): GameStats + external fun deviceGetGameFrameRate(): Double + external fun deviceGetGameFrameTime(): Double + external fun deviceGetGameFifo(): Double external fun deviceGetGameInfo(fileDescriptor: Int, isXci:Boolean): GameInfo external fun deviceGetGameInfoFromPath(path: String): GameInfo external fun deviceLoadDescriptor(fileDescriptor: Int, isXci:Boolean): Boolean diff --git a/src/RyujinxAndroid/app/src/main/java/org/ryujinx/android/viewmodels/GameStats.kt b/src/RyujinxAndroid/app/src/main/java/org/ryujinx/android/viewmodels/GameStats.kt deleted file mode 100644 index e4d954312..000000000 --- a/src/RyujinxAndroid/app/src/main/java/org/ryujinx/android/viewmodels/GameStats.kt +++ /dev/null @@ -1,7 +0,0 @@ -package org.ryujinx.android.viewmodels - -class GameStats { - var Fifo = 0.0 - var GameFps = 0.0 - var GameTime = 0.0 -} \ No newline at end of file