impore fps control, quicker send refresh and clear video queue (#8137)

Signed-off-by: 21pages <sunboeasy@gmail.com>
This commit is contained in:
21pages 2024-05-24 17:21:16 +08:00 committed by GitHub
parent 902e166f0c
commit 17d18f1dd8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -319,13 +319,8 @@ impl<T: InvokeUiSession> Remote<T> {
let is_stopping_allowed = clip.is_stopping_allowed(); let is_stopping_allowed = clip.is_stopping_allowed();
let server_file_transfer_enabled = let server_file_transfer_enabled =
*self.handler.server_file_transfer_enabled.read().unwrap(); *self.handler.server_file_transfer_enabled.read().unwrap();
let file_transfer_enabled = self let file_transfer_enabled =
.handler self.handler.lc.read().unwrap().enable_file_copy_paste.v;
.lc
.read()
.unwrap()
.enable_file_copy_paste
.v;
let view_only = self.handler.lc.read().unwrap().view_only.v; let view_only = self.handler.lc.read().unwrap().view_only.v;
let stop = is_stopping_allowed let stop = is_stopping_allowed
&& (view_only && (view_only
@ -1032,13 +1027,15 @@ impl<T: InvokeUiSession> Remote<T> {
ctl.last_auto_fps = Some(auto_fps); ctl.last_auto_fps = Some(auto_fps);
} }
// send refresh // send refresh
let tolerable = std::cmp::min(decode_fps, video_queue.capacity() / 2);
if ctl.refresh_times < 10 // enough if ctl.refresh_times < 10 // enough
&& (len > video_queue.capacity() / 2 && (len > tolerable
&& (ctl.refresh_times == 0 || ctl.last_refresh_instant.elapsed().as_secs() > 30)) && (ctl.refresh_times == 0 || ctl.last_refresh_instant.elapsed().as_secs() > 10))
{ {
// Refresh causes client set_display, left frames cause flickering. // Refresh causes client set_display, left frames cause flickering.
while let Some(_) = video_queue.pop() {} while let Some(_) = video_queue.pop() {}
self.handler.refresh_video(*display as _); self.handler.refresh_video(*display as _);
log::info!("Refresh display {} to reduce delay", display);
ctl.refresh_times += 1; ctl.refresh_times += 1;
ctl.last_refresh_instant = Instant::now(); ctl.last_refresh_instant = Instant::now();
} }
@ -1765,13 +1762,7 @@ impl<T: InvokeUiSession> Remote<T> {
))] ))]
{ {
let enabled = *self.handler.server_file_transfer_enabled.read().unwrap() let enabled = *self.handler.server_file_transfer_enabled.read().unwrap()
&& self && self.handler.lc.read().unwrap().enable_file_copy_paste.v;
.handler
.lc
.read()
.unwrap()
.enable_file_copy_paste
.v;
ContextSend::enable(enabled); ContextSend::enable(enabled);
} }
} }
@ -1794,13 +1785,7 @@ impl<T: InvokeUiSession> Remote<T> {
}; };
let is_stopping_allowed = clip.is_stopping_allowed_from_peer(); let is_stopping_allowed = clip.is_stopping_allowed_from_peer();
let file_transfer_enabled = self let file_transfer_enabled = self.handler.lc.read().unwrap().enable_file_copy_paste.v;
.handler
.lc
.read()
.unwrap()
.enable_file_copy_paste
.v;
let stop = is_stopping_allowed && !file_transfer_enabled; let stop = is_stopping_allowed && !file_transfer_enabled;
log::debug!( log::debug!(
"Process clipboard message from server peer, stop: {}, is_stopping_allowed: {}, file_transfer_enabled: {}", "Process clipboard message from server peer, stop: {}, is_stopping_allowed: {}, file_transfer_enabled: {}",