diff --git a/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java b/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java index ed8dcd62..5d6d7330 100644 --- a/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java +++ b/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java @@ -656,6 +656,7 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer { } float decodeTimeMs = (float)lastTwo.decoderTimeMs / lastTwo.totalFramesReceived; + long rttInfo = MoonBridge.getEstimatedRttInfo(); StringBuilder sb = new StringBuilder(); sb.append(context.getString(R.string.perf_overlay_dimensions, initialWidth + "x" + initialHeight)).append('\n'); sb.append(context.getString(R.string.perf_overlay_decoder, decoder)).append('\n'); @@ -664,6 +665,8 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer { sb.append(context.getString(R.string.perf_overlay_renderingfps, fps.renderedFps)).append('\n'); sb.append(context.getString(R.string.perf_overlay_netdrops, (float)lastTwo.framesLost / lastTwo.totalFrames * 100)).append('\n'); + sb.append(context.getString(R.string.perf_overlay_netlatency, + (rttInfo >> 32) & 0xFFFF, rttInfo & 0xFFFF)).append('\n'); sb.append(context.getString(R.string.perf_overlay_recvtime, ((float)lastTwo.totalTimeMs / lastTwo.totalFramesReceived) - decodeTimeMs)).append('\n'); sb.append(context.getString(R.string.perf_overlay_dectime, decodeTimeMs)); diff --git a/app/src/main/java/com/limelight/nvstream/jni/MoonBridge.java b/app/src/main/java/com/limelight/nvstream/jni/MoonBridge.java index 2702b54e..b54f7b4d 100644 --- a/app/src/main/java/com/limelight/nvstream/jni/MoonBridge.java +++ b/app/src/main/java/com/limelight/nvstream/jni/MoonBridge.java @@ -306,5 +306,8 @@ public class MoonBridge { public static native String stringifyPortFlags(int portFlags, String separator); + // The RTT is in the top 32 bits, and the RTT variance is in the bottom 32 bits + public static native long getEstimatedRttInfo(); + public static native void init(); } diff --git a/app/src/main/jni/moonlight-core/moonlight-common-c b/app/src/main/jni/moonlight-core/moonlight-common-c index 5d09d43b..edf18387 160000 --- a/app/src/main/jni/moonlight-core/moonlight-common-c +++ b/app/src/main/jni/moonlight-core/moonlight-common-c @@ -1 +1 @@ -Subproject commit 5d09d43b0866d9fa30cc1741f9e10de5420deaad +Subproject commit edf183870897ce9e74a83595ccef238f2c03e5b8 diff --git a/app/src/main/jni/moonlight-core/simplejni.c b/app/src/main/jni/moonlight-core/simplejni.c index f09c628b..35f4d259 100644 --- a/app/src/main/jni/moonlight-core/simplejni.c +++ b/app/src/main/jni/moonlight-core/simplejni.c @@ -134,4 +134,15 @@ Java_com_limelight_nvstream_jni_MoonBridge_stringifyPortFlags(JNIEnv *env, jclas (*env)->ReleaseStringUTFChars(env, separator, separatorStr); return (*env)->NewStringUTF(env, outputBuffer); +} + +JNIEXPORT jlong JNICALL +Java_com_limelight_nvstream_jni_MoonBridge_getEstimatedRttInfo(JNIEnv *env, jclass clazz) { + uint32_t rtt, variance; + + if (!LiGetEstimatedRttInfo(&rtt, &variance)) { + return -1; + } + + return ((uint64_t)rtt << 32U) | variance; } \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 009daa69..a2d30351 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -110,6 +110,7 @@ Incoming frame rate from network: %1$.2f FPS Rendering frame rate: %1$.2f FPS Frames dropped by your network connection: %1$.2f%% + Average network latency: %1$d ms (variance: %2$d ms) Average receive time: %1$.2f ms Average decoding time: %1$.2f ms