Procházet zdrojové kódy

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 před 6 roky
rodič
revize
7be73d7385
1 změnil soubory, kde provedl 11 přidání a 1 odebrání
  1. 11
    1
      common/rfb/VNCServerST.cxx

+ 11
- 1
common/rfb/VNCServerST.cxx Zobrazit soubor

@@ -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()

Načítá se…
Zrušit
Uložit