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