Browse Source

Avoid corner case of applications rendering at frame rate

There is a problematic corner case where an application is updating
at exactly the same rate that we're sending update. In that case we
may miss updates regularly, getting a very uneven final frame rate.
Avoid this by introducing a slight offset when we start updating.
tags/v1.8.90
Pierre Ossman 6 years ago
parent
commit
7be73d7385
1 changed files with 11 additions and 1 deletions
  1. 11
    1
      common/rfb/VNCServerST.cxx

+ 11
- 1
common/rfb/VNCServerST.cxx View File

@@ -529,6 +529,13 @@ bool VNCServerST::handleTimeout(Timer* t)
return false;

writeUpdate();

// If this is the first iteration then we need to adjust the timeout
if (frameTimer.getTimeoutMs() != 1000/rfb::Server::frameRate) {
frameTimer.start(1000/rfb::Server::frameRate);
return false;
}

return true;
}

@@ -573,7 +580,10 @@ void VNCServerST::startFrameClock()
if (blockCounter > 0)
return;

frameTimer.start(1000/rfb::Server::frameRate);
// The first iteration will be just half a frame as we get a very
// unstable update rate if we happen to be perfectly in sync with
// the application's update rate
frameTimer.start(1000/rfb::Server::frameRate/2);
}

void VNCServerST::stopFrameClock()

Loading…
Cancel
Save