mirror of
https://github.com/rustdesk/rustdesk
synced 2026-04-21 13:27:19 +00:00
log: add first-frame watchdog breadcrumbs
This commit is contained in:
parent
d41e384f69
commit
5e6ef28f33
3 changed files with 43 additions and 3 deletions
|
|
@ -282,8 +282,18 @@ impl<T: InvokeUiSession> Remote<T> {
|
|||
}
|
||||
_ = status_timer.tick() => {
|
||||
if self.watchdog.check(self.is_connected, self.first_frame, self.handler.is_default(), Instant::now()) {
|
||||
log::warn!("No first video frame received, sending refresh");
|
||||
let display = self.handler.lc.read().unwrap().peer_info.as_ref().map(|p| p.current_display).unwrap_or(0);
|
||||
let (id, display) = {
|
||||
let lch = self.handler.lc.read().unwrap();
|
||||
let display = lch
|
||||
.peer_info
|
||||
.as_ref()
|
||||
.map(|p| p.current_display)
|
||||
.unwrap_or(0);
|
||||
(lch.id.clone(), display)
|
||||
};
|
||||
log::warn!(
|
||||
"No first video frame received, id={id}, display={display}, sending refresh"
|
||||
);
|
||||
self.handler.refresh_video(display as _);
|
||||
}
|
||||
|
||||
|
|
@ -1292,8 +1302,14 @@ impl<T: InvokeUiSession> Remote<T> {
|
|||
if let Ok(msg_in) = Message::parse_from_bytes(&data) {
|
||||
match msg_in.union {
|
||||
Some(message::Union::VideoFrame(vf)) => {
|
||||
let display = vf.display as usize;
|
||||
if !self.first_frame {
|
||||
self.first_frame = true;
|
||||
log::info!(
|
||||
"First video frame received, id={}, display={}",
|
||||
self.handler.get_id(),
|
||||
display
|
||||
);
|
||||
self.handler.close_success();
|
||||
self.handler.adapt_size();
|
||||
self.send_toggle_virtual_display_msg(peer).await;
|
||||
|
|
@ -1301,7 +1317,6 @@ impl<T: InvokeUiSession> Remote<T> {
|
|||
}
|
||||
self.video_format = CodecFormat::from(&vf);
|
||||
|
||||
let display = vf.display as usize;
|
||||
if !self.video_threads.contains_key(&display) {
|
||||
self.new_video_thread(display);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3406,6 +3406,12 @@ impl Connection {
|
|||
}
|
||||
|
||||
fn refresh_video_display(&self, display: Option<usize>) {
|
||||
log::debug!(
|
||||
"refresh_video_display: conn_id={}, display={:?}, source={:?}",
|
||||
self.inner.id,
|
||||
display,
|
||||
self.video_source()
|
||||
);
|
||||
video_service::refresh();
|
||||
self.server.upgrade().map(|s| {
|
||||
s.read().unwrap().set_video_service_opt(
|
||||
|
|
|
|||
|
|
@ -650,6 +650,7 @@ fn run(vs: VideoService) -> ResultType<()> {
|
|||
let repeat_encode_max = 10;
|
||||
let mut encode_fail_counter = 0;
|
||||
let mut first_frame = true;
|
||||
let mut logged_invalid_frame = false;
|
||||
let capture_width = c.width;
|
||||
let capture_height = c.height;
|
||||
let (mut second_instant, mut send_counter) = (Instant::now(), 0);
|
||||
|
|
@ -722,6 +723,24 @@ fn run(vs: VideoService) -> ResultType<()> {
|
|||
let res = match c.frame(spf) {
|
||||
Ok(frame) => {
|
||||
if !frame.valid() {
|
||||
if !logged_invalid_frame {
|
||||
logged_invalid_frame = true;
|
||||
match &frame {
|
||||
scrap::Frame::PixelBuffer(f) => {
|
||||
log::debug!(
|
||||
"capturer returned invalid frame (pixelbuffer), len={}, w={}, h={}, treating as WouldBlock",
|
||||
f.data().len(),
|
||||
f.width(),
|
||||
f.height()
|
||||
);
|
||||
}
|
||||
scrap::Frame::Texture((texture, _)) => {
|
||||
log::debug!(
|
||||
"capturer returned invalid frame (texture={texture:?}), treating as WouldBlock"
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
Err(std::io::Error::new(WouldBlock, "empty frame"))
|
||||
} else {
|
||||
repeat_encode_counter = 0;
|
||||
|
|
|
|||
Loading…
Reference in a new issue