]> source.dussan.org Git - tigervnc.git/commitdiff
Make it easier to change timer interval
authorPierre Ossman <ossman@cendio.se>
Thu, 29 Feb 2024 15:01:48 +0000 (16:01 +0100)
committerPierre Ossman <ossman@cendio.se>
Wed, 19 Jun 2024 14:39:07 +0000 (16:39 +0200)
common/rfb/Timer.cxx
common/rfb/Timer.h
common/rfb/VNCServerST.cxx

index 37aaad839953e9b336294d817befeefb5df828a2..e9ae52276d0b89b365d87615f03d13b67497ae25 100644 (file)
@@ -122,7 +122,7 @@ void Timer::start(int timeoutMs_) {
   insertTimer(this);
 }
 
-void Timer::repeat() {
+void Timer::repeat(int timeoutMs_) {
   timeval now;
 
   gettimeofday(&now, 0);
@@ -135,6 +135,9 @@ void Timer::repeat() {
   if (msBetween(&lastDueTime, &dueTime) != 0)
     vlog.error("Timer incorrectly modified whilst repeating");
 
+  if (timeoutMs_ != -1)
+    timeoutMs = timeoutMs_;
+
   dueTime = addMillis(lastDueTime, timeoutMs);
   if (isBefore(now)) {
     // Time has jumped forwards, or we're not getting enough
index 9775afd5e6629e85a79f9afaeffab2a65e511a32..36ec46c51ccd41935b5996339867a6b7bc4f82a0 100644 (file)
@@ -80,7 +80,9 @@ namespace rfb {
     //   Restarts the timer in a way that repeats that last timeout.
     //   This allows you to have a periodic timer without the risk of
     //   accumulating drift caused by processing delays.
-    void repeat();
+    //   A new interval can be specified, otherwise the previous
+    //   interval is reused.
+    void repeat(int timeoutMs_=-1);
 
     // stop()
     //   Cancels the timer.
index bd1fecf3bce3a2b0bf9fb7736ec1fb2433e6638f..68379f24633a43c90531c252288b9f829c983a2c 100644 (file)
@@ -633,10 +633,7 @@ void VNCServerST::handleTimeout(Timer* t)
     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);
-    else
-      frameTimer.repeat();
+    frameTimer.repeat(1000/rfb::Server::frameRate);
   } else if (t == &idleTimer) {
     slog.info("MaxIdleTime reached, exiting");
     desktop->terminate();