Performance Technology
How Lamco RDP Server delivers responsive remote desktop through adaptive frame rates, intelligent damage tracking, and physics-based cursor prediction
Performance is More Than Encoding Speed
Remote desktop performance isn't just about encoding speed. It's about the entire pipeline: detecting what changed, encoding efficiently, transmitting only what's needed, and making input feel responsive despite network latency.
Lamco RDP Server includes a suite of premium performance features that work together to deliver a responsive experience across varying network conditions.
Adaptive Frame Rate
The Problem with Fixed Frame Rate
Most remote desktop solutions use a fixed frame rate—typically 30 FPS regardless of what's on screen.
Static content
Wasting bandwidth and power encoding unchanging frames
Active content
30 FPS may not be smooth enough for video or gaming
Dynamic FPS Based on Activity
Lamco RDP Server continuously monitors screen activity and adjusts frame rate accordingly:
Screen Activity Detection
│
▼
┌─────────────────────────────────────────────────────────────┐
│ │
│ Static (<1% changed) ──────────► 5 FPS │
│ │ (power saving) │
│ ▼ │
│ Low Activity (1-10%) ──────────► 15 FPS │
│ (typing, cursor movement) (responsive) │
│ │ │
│ ▼ │
│ Medium Activity (10-30%) ──────────► 20-30 FPS │
│ (scrolling, window movement) (smooth) │
│ │ │
│ ▼ │
│ High Activity (>30%) ──────────► 30-60 FPS │
│ (video, animation) (fluid) │
│ │
└─────────────────────────────────────────────────────────────┘
| Scenario | Fixed 30 FPS | Adaptive FPS | Improvement |
|---|---|---|---|
| Reading document | 30 FPS | 5 FPS | 6x less bandwidth |
| Typing code | 30 FPS | 15 FPS | 2x less bandwidth |
| Watching video | 30 FPS | 60 FPS | 2x smoother |
| Battery (laptop) | Constant drain | Reduced drain | Significant savings |
Damage Tracking
What Is Damage Tracking?
Most screen updates are localized—a cursor moves, text appears in an editor, a notification pops up. The rest of the screen stays the same. Damage tracking identifies exactly which regions changed, so only those regions need to be encoded and transmitted.
Tile-Based Detection
The screen is divided into a grid of tiles (default 64×64 pixels). Each frame, we compare tiles against the previous frame:
Previous Frame Current Frame Damage Map
┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤
│ │ A │ B │ │ │ │ │ A'│ B │ │ │ ──► │ │ ▓ │ │ │ │
├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤
│ │ │ │ │ │ │ │ C │ │ │ │ │ │ ▓ │ │ │ │
├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
└───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘
Only tiles marked ▓ are encoded and sent.
SIMD Acceleration
Comparing millions of pixels per frame requires speed. Lamco RDP Server uses SIMD instructions to compare multiple pixels simultaneously:
x86_64
AVX2
32 pixels/cycle
ARM
NEON
16 pixels/cycle
Fallback
Scalar
1 pixel/cycle
Real-World Savings
Typical desktop use sees 90%+ bandwidth savings:
| Scenario | Savings |
|---|---|
| Static desktop | 99% |
| Typing in editor | 95% |
| Scrolling web page | 75% |
| Full-screen video | 0% |
Latency Governor
Three Modes for Different Needs
Not all remote desktop use is the same. Coding requires responsive input. Watching a presentation prioritizes visual quality. The latency governor optimizes the pipeline for your specific use case.
Interactive
Priority: Input latency
Best for: Coding, terminal work, real-time collaboration
Balanced
Priority: Both
Best for: General desktop use
Quality
Priority: Visual quality
Best for: Presentations, design review, media playback
How It Works
The latency governor adjusts multiple parameters:
| Parameter | Interactive | Balanced | Quality |
|---|---|---|---|
| Encode buffer | Minimal | Standard | Larger |
| Frame batching | Disabled | Light | Aggressive |
| QP preference | Higher (faster) | Medium | Lower (better) |
| Key frame interval | Shorter | Medium | Longer |
Predictive Cursor
The Latency Problem
Network latency is unavoidable. Even on fast connections, round-trip time of 20-50ms means the cursor lags behind your hand movement. On high-latency connections (100ms+), this becomes disorienting.
Physics-Based Prediction
Lamco RDP Server's predictive cursor uses physics modeling to extrapolate cursor position:
Actual cursor path (network delayed):
●───●───●───●───● ← Client sees this (50ms behind)
Predicted path (shown to user):
●───●───●───●───●───○───○ ← Extrapolated position
▲
Where cursor probably is NOW
How It Works:
- Track velocity: Monitor cursor movement over recent samples
- Track acceleration: Detect speed changes (starting/stopping)
- Extrapolate: Project position forward by latency amount
- Snap back: Smooth correction when actual position arrives
Prediction Quality
Steady motion
Excellent accuracy - feels nearly local
Acceleration
Good - slight overshoot, corrects smoothly
Sudden stop
Fair - brief overshoot, snaps to final position
Erratic movement
Disabled automatically - prediction would make it worse
Auto Mode Logic
Measure network latency
│
├─ <20ms ──────────► metadata (standard)
│ Latency too low to notice
│
├─ 20-80ms ─────────► predictive
│ Sweet spot for prediction
│
└─ >80ms ──────────► predictive (conservative)
Reduced prediction to avoid overshoot
Benchmarks
Measured on Intel i7-12700K, NVIDIA RTX 3070, 1920×1080 desktop:
| Configuration | FPS | Latency | CPU | GPU | Bandwidth |
|---|---|---|---|---|---|
| NVENC + AVC444 + 60fps | 60 | 12ms | 3% | 8% | 8.2 Mbps |
| NVENC + AVC420 + 30fps | 30 | 14ms | 2% | 5% | 4.1 Mbps |
| OpenH264 + AVC444 + 30fps | 30 | 18ms | 15% | 0% | 4.8 Mbps |
| OpenH264 + AVC420 + 30fps | 30 | 16ms | 12% | 0% | 3.2 Mbps |
*Latency measured end-to-end from input to display update on LAN connection.
Performance Tuning Guide
Low Bandwidth (<5 Mbps)
[egfx]
codec = "avc420" # Save ~40% vs AVC444
h264_bitrate = 2000
qp_default = 28 # Accept lower quality
[performance.adaptive_fps]
max_fps = 30 # Cap frame rate
[damage]
enabled = true # Essential
Low Latency (coding, terminals)
[performance.latency]
mode = "interactive"
[performance.adaptive_fps]
enabled = true
min_fps = 15 # Keep responsive
[cursor]
mode = "auto" # Enable prediction
High Quality (presentations, design)
[egfx]
codec = "avc444"
h264_bitrate = 10000
qp_default = 18
[performance.latency]
mode = "quality"
[performance.adaptive_fps]
max_fps = 60
Maximum Performance (LAN)
[hardware_encoding]
enabled = true
prefer_nvenc = true
quality_preset = "quality"
[egfx]
codec = "avc444"
h264_bitrate = 15000
qp_default = 15
[performance.adaptive_fps]
max_fps = 60