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