]> source.dussan.org Git - tigervnc.git/commitdiff
Try to increase the update rate by requesting a new update in parallel with
authorPierre Ossman <ossman@cendio.se>
Wed, 1 Apr 2009 14:42:34 +0000 (14:42 +0000)
committerPierre Ossman <ossman@cendio.se>
Wed, 1 Apr 2009 14:42:34 +0000 (14:42 +0000)
decoding the current one.

git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@3733 3789f03b-4d11-0410-bbf8-ca57d06f2519

unix/vncviewer/CConn.cxx
unix/vncviewer/CConn.h

index 135794aec558c3d256002ae4de1e31454f3570e8..8a9dfcff068853f81edb305396b6e9ff2aa6b4cf 100644 (file)
@@ -300,6 +300,16 @@ void CConn::setName(const char* name) {
   }
 }
 
+// framebufferUpdateStart() is called at the beginning of an update.
+// Here we try to send out a new framebuffer update request so that the
+// next update can be sent out in parallel with us decoding the current
+// one. We cannot do this if we're in the middle of a format change
+// though.
+void CConn::framebufferUpdateStart() {
+  if (!formatChange)
+    requestNewUpdate();
+}
+
 // framebufferUpdateEnd() is called at the end of an update.
 // For each rectangle, the FdInStream will have timed the speed
 // of the connection, allowing us to select format and encoding
@@ -355,9 +365,19 @@ void CConn::framebufferUpdateEnd() {
     firstUpdate = false;
   }
 
+  // A format change prevented us from sending this before the update,
+  // so make sure to send it now.
+  if (formatChange)
+    requestNewUpdate();
+
+  // Compute new settings based on updated bandwidth values
   if (autoSelect)
     autoSelectFormatAndEncoding();
-  requestNewUpdate();
+
+  // Make sure that the X11 handling and the timers gets some CPU time
+  // in case of back to back framebuffer updates.
+  TXWindow::handleXEvents(dpy);
+  Timer::checkTimeouts();
 }
 
 // The rest of the callbacks are fairly self-explanatory...
index 96a76fe42aedb60f5076270f69156232591680b5..3bf0a82ea31893c1c97c9dd6c585e42e691e5af4 100644 (file)
@@ -81,6 +81,7 @@ public:
   void setColourMapEntries(int firstColour, int nColours, rdr::U16* rgbs);
   void bell();
   void serverCutText(const char* str, int len);
+  void framebufferUpdateStart();
   void framebufferUpdateEnd();
   void beginRect(const rfb::Rect& r, unsigned int encoding);
   void endRect(const rfb::Rect& r, unsigned int encoding);