github derflacco/moonlight-android Experimental_6.1
MTK_Ultra_Low_Latency_Experimental_6.1

MTK_Ultra_Low_Latency_Experimental_6.1

**Note: i'm pretty tired from work and this is a fully Ai generated changelog. Sorry for that.

Highlights

  • Lower input-to-pixel latency with safer low-latency policy and smarter target-time frame picking.

  • Truer stats: Decode Time (enqueue→dequeue) split from Displayed Frame Age (dequeue→present).

  • External displays no longer clamp at 60 Hz when higher refresh is available.

  • Clear compatibility: Direct Present cannot be combined with FSR or HDR.

  • Perf build now compiled with -O3 and Full LTO for native code.

  • App (perf variant) renamed to “Artemide”.

Improvements

  • Decode latency metrics

Stock measurement restored (enqueue → dequeue) with symmetric locking.

Split metrics (Decode Time vs Displayed Frame Age), stable avg/p95, outlier filtering.

Cleaner onReleaseOutputBuffer logging (PTS, deltas, render flag).

Output buffer handling

Safer buffer release; prevent double-release/invalid indices.

Prefer the frame closest to target present time; conservative drop if too far.

  • Latency policy \ Frame pacing

Prefer Lower Delays (pure LFR): non-blocking dequeue (0 µs) to avoid extra waits in the decoder path.

Balanced / Cap FPS / Max Smoothness: stable target slots; better cap alignment; reduced micro-stutter.

Cap FPS: jump to the next nominal slot under jitter instead of clamping to “now”.

IJH (Instant Jitter Hybrid): jitter budget from instantaneous PTS deltas (peak-hold + decay); avoids added latency on >90 Hz panels.

  • Fsr AntiLag

Enabled only on managed profiles (Balanced/Cap/Max), not on pure LFR.

Profile-based tolerances (~1.5 ms Balanced; ~3 ms Cap/Max) and activation only with empty output queue.

  • External displays

Removed unintended 60 Hz clamp on high-refresh monitors; rendering follows the external display refresh when possible.

  • HDR / FSR / Direct Present

Reliable HDR state updates (HDR10 detection, format changes, server capability) and consistent hdrActive.

FSR pipeline: faster EASU/RCAS, lazy EGL/GL init, safe bypass when OFF, OES blit path, drain “latest-only”.

UI enforces rules: Direct Present not combinable with FSR or HDR; overlay shows FSR/HDR tags only when truly active.

  • Overlay & UX

Perf Lite / Advanced Lite polish (FSR/HDR/IN·R tags, spacing, SDR/HDR label).

Pixel-shift OLED anti burn-in and subtle periodic blink refresh.

New Preferred display option to choose the target display buggy, but works

  • System & compatibility

ADPF / Performance Hint Manager via reflection: create session only when supported; safe no-op otherwise; clean close; isActive() helper for diagnostics.

Removed over-aggressive CPU affinity pinning.

Vendor guards (e.g., Samsung-specific code gated to Samsung).

  • Build & Packaging

Perf build uses -O3 and Full LTO for native components to improve codegen and reduce CPU overhead.

App rename: the perf variant is now presented as “Artemide” (updated app name in launcher/branding for that variant).

  • Performance

Lower end-to-end latency, especially on 90/120 Hz panels.

Smoother cadence under FPS caps and less visible jitter during network hiccups.

  • Fixes

Removed stats inflation when stream FPS > display Hz.

Suppressed spurious errors on devices without Performance Hints/PowerHAL.

Stabilized rare paths around INFO_OUTPUT_FORMAT_CHANGED and early codec errors.

  • Notes & Limitations

Direct Present cannot run together with FSR or HDR.

On some MediaTek devices, ultra-low-latency vendor paths may be limited by the platform.

Expect different numbers vs older builds because stats now separate decoder work from queue/pacing delay.

  • What is “Snappy Input”?

A set of micro-optimizations to shorten the path from your touch/gamepad action to the next visible frame:

Shorter input queues and fewer blocking points.

Lower event coalescing (events forwarded sooner).

Higher thread priority on critical input paths.

More frequent flushing of input packets to the host.

Effect: noticeably snappier controls, especially with conservative pacing or network jitter.
Trade-off: slightly higher input packet rate and less smoothing of tiny movements.

  • What is ADPF / Performance Hints?

ADPF (Android Dynamic Performance Framework) lets the app provide workload hints to the system (when supported):

Open a hint session for critical threads (decode/render).

Report a target time budget and the actual time taken per frame.

With these hints, the system/PowerHAL can boost and schedule more intelligently, reducing jank and latency without running max clocks continuously.

Compatibility: if ADPF/PowerHAL isn’t available, it’s a no-op (no impact, no errors).

For more, check commits.

The app is named Artemide to avoid replacing the official Artemis app (I'm looking at you, @VirtualGit). You'll likely need to pair it again on Apollo or Sunshine (and this will be the last time, I promise!).

As always,

⚠️ Heads up: this is experimental. I’ve only tested on my hardware, so things may break on yours. Use at your own risk.

Found a bug? Tell me and I’ll try to fix it.
Enjoy!

PS: Thank you to all the testers who helped me identify bugs I had missed on my own devices. There will be plenty more to discover, I'm sure!

Don't miss a new moonlight-android release

NewReleases is sending notifications on new releases.