From 691830fe89ed7ef28332ff926844eb691d7906c5 Mon Sep 17 00:00:00 2001 From: RustDesk <71636191+rustdesk@users.noreply.github.com> Date: Tue, 8 Sep 2026 23:31:05 +0800 Subject: [PATCH] bump webrtc: revert the T3-rtx probe recovery (#16121) The probe recovery merged as 692113c87 cost two to four times the p99 on the workload a remote desktop actually has, and the fork now reverts it: `sctp/src` returns to 48100bf1, the revision this repository shipped in #15684, with the benchmark harness and its corrections kept. It was justified on a fixed frame rate. Nothing is sent while the screen holds still - the capturer answers WouldBlock and the loop sends nothing - so typing, reading and clicking are short bursts with silence between them, and a steady frame rate is what playing video or dragging a window looks like and nothing else. The difference matters because a steady rate hides the whole effect: the next frame's SACK exposes a loss whatever the recovery logic does. Measured on bursts with gaps, after correcting two faults in the harness itself, p99 in ms for the two seeds: sparse RTT70 sparse RTT150 48100bf1 09-06 00:06 200 / 208 407 / 507 b221f13b 09-06 14:00 328 / 804 737 / 826 On a fixed frame rate the two are within noise of each other, which is why this was not caught. KCP is 138/130 and 257/250 on those rows, ahead of both. What is given up: a tail loss of exactly four packets recovers in 140 ms rather than 229, and an idle sender's backlog after a stall offers 1.58x the bytes rather than 1.08x. A five-packet tail improves, 292 ms to 232. Claude-Session: https://claude.ai/code/session_019aokqJuhjvB3kijXtAg5Ns Co-authored-by: Claude Opus 5 --- Cargo.lock | 4 ++-- Cargo.toml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 17eadf5f5..999fc644a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9731,7 +9731,7 @@ dependencies = [ [[package]] name = "webrtc-sctp" version = "0.12.0" -source = "git+https://github.com/rustdesk-org/webrtc?rev=b221f13b1d6f21fbce09f9f63096be27dd392265#b221f13b1d6f21fbce09f9f63096be27dd392265" +source = "git+https://github.com/rustdesk-org/webrtc?rev=db3b07a9dd8f195916c89c2e62a8911402b11d27#db3b07a9dd8f195916c89c2e62a8911402b11d27" dependencies = [ "arc-swap", "async-trait", @@ -9771,7 +9771,7 @@ dependencies = [ [[package]] name = "webrtc-util" version = "0.11.0" -source = "git+https://github.com/rustdesk-org/webrtc?rev=b221f13b1d6f21fbce09f9f63096be27dd392265#b221f13b1d6f21fbce09f9f63096be27dd392265" +source = "git+https://github.com/rustdesk-org/webrtc?rev=db3b07a9dd8f195916c89c2e62a8911402b11d27#db3b07a9dd8f195916c89c2e62a8911402b11d27" dependencies = [ "async-trait", "bitflags 1.3.2", diff --git a/Cargo.toml b/Cargo.toml index 393619136..00bb88fae 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -230,8 +230,8 @@ libxdo-sys = { path = "libs/libxdo-sys-stub" } # the SACK settle the rest (F-RTO), timed from the latest send, so a stall no longer resends the # whole backlog behind itself while a short lost tail still comes back at once. # Pinned by rev, not branch: a fork branch can be rewritten out from under the lockfile. -webrtc-util = { git = "https://github.com/rustdesk-org/webrtc", rev = "b221f13b1d6f21fbce09f9f63096be27dd392265" } -webrtc-sctp = { git = "https://github.com/rustdesk-org/webrtc", rev = "b221f13b1d6f21fbce09f9f63096be27dd392265" } +webrtc-util = { git = "https://github.com/rustdesk-org/webrtc", rev = "db3b07a9dd8f195916c89c2e62a8911402b11d27" } +webrtc-sctp = { git = "https://github.com/rustdesk-org/webrtc", rev = "db3b07a9dd8f195916c89c2e62a8911402b11d27" } [package.metadata.winres] LegalCopyright = "Copyright © 2026 Purslane Tech Pte. Ltd. All rights reserved."