Skip to content

Commit cf51bdd

Browse files
authored
feat(egfx)!: surface total_frames_decoded on the frame-ack callback (#1345)
1 parent e3dc0e7 commit cf51bdd

2 files changed

Lines changed: 13 additions & 5 deletions

File tree

crates/ironrdp-egfx/src/server.rs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -767,7 +767,14 @@ pub trait GraphicsPipelineHandler: Send {
767767
fn on_ready(&mut self, negotiated: &CapabilitySet);
768768

769769
/// Called when a frame has been acknowledged by the client
770-
fn on_frame_ack(&mut self, _frame_id: u32, _queue_depth: u32) {}
770+
///
771+
/// `total_frames_decoded` is the client's running decoded-frame count
772+
/// (MS-RDPEGFX 2.2.2.13), for decode-backlog flow control.
773+
fn on_frame_ack(&mut self, frame_id: u32, queue_depth: u32, total_frames_decoded: u32) {
774+
let _ = frame_id;
775+
let _ = queue_depth;
776+
let _ = total_frames_decoded;
777+
}
771778

772779
/// Called when QoE metrics are received from client (V10+)
773780
fn on_qoe_metrics(&mut self, _metrics: QoeMetrics) {}
@@ -1685,7 +1692,8 @@ impl GraphicsPipelineServer {
16851692
trace!(frame_id = pdu.frame_id, latency = ?rtt);
16861693
}
16871694

1688-
self.handler.on_frame_ack(pdu.frame_id, queue_depth);
1695+
self.handler
1696+
.on_frame_ack(pdu.frame_id, queue_depth, pdu.total_frames_decoded);
16891697
}
16901698

16911699
fn handle_qoe_frame_acknowledge(&mut self, pdu: QoeFrameAcknowledgePdu) {

crates/ironrdp-testsuite-core/tests/egfx/server.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use ironrdp_egfx::server::{GraphicsPipelineHandler, GraphicsPipelineServer, QoeM
1313
struct TestHandler {
1414
ready_called: bool,
1515
negotiated: Option<CapabilitySet>,
16-
frame_acks: Vec<(u32, u32)>,
16+
frame_acks: Vec<(u32, u32, u32)>,
1717
surfaces_created: Vec<u16>,
1818
surfaces_deleted: Vec<u16>,
1919
}
@@ -38,8 +38,8 @@ impl GraphicsPipelineHandler for TestHandler {
3838
self.negotiated = Some(negotiated.clone());
3939
}
4040

41-
fn on_frame_ack(&mut self, frame_id: u32, queue_depth: u32) {
42-
self.frame_acks.push((frame_id, queue_depth));
41+
fn on_frame_ack(&mut self, frame_id: u32, queue_depth: u32, total_frames_decoded: u32) {
42+
self.frame_acks.push((frame_id, queue_depth, total_frames_decoded));
4343
}
4444

4545
fn on_qoe_metrics(&mut self, _metrics: QoeMetrics) {}

0 commit comments

Comments
 (0)