]> source.dussan.org Git - tigervnc.git/commitdiff
Client side support for continuous updates.
authorPierre Ossman <ossman@cendio.se>
Tue, 15 Nov 2011 12:13:37 +0000 (12:13 +0000)
committerPierre Ossman <ossman@cendio.se>
Tue, 15 Nov 2011 12:13:37 +0000 (12:13 +0000)
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4805 3789f03b-4d11-0410-bbf8-ca57d06f2519

vncviewer/CConn.cxx
vncviewer/CConn.h

index 4cc09f226794bd7aff7a9697d1f281c38ebe7410..fbd9a8ed07af31556ef98cfa340fd0e9bf79687b 100644 (file)
@@ -72,7 +72,7 @@ CConn::CConn(const char* vncServerName)
     pendingPFChange(false),
     currentEncoding(encodingTight), lastServerEncoding((unsigned int)-1),
     formatChange(false), encodingChange(false),
-    firstUpdate(true), pendingUpdate(false),
+    firstUpdate(true), pendingUpdate(false), continuousUpdates(false),
     forceNonincremental(true), supportsSyncFence(false)
 {
   setShared(::shared);
@@ -306,8 +306,8 @@ void CConn::framebufferUpdateEnd()
   if (firstUpdate) {
     int width, height;
 
-    // We need fences to make extra update requests "safe".
-    // See fence() for the next step.
+    // We need fences to make extra update requests and continuous
+    // updates "safe". See fence() for the next step.
     if (cp.supportsFence)
       writer()->writeFence(fenceFlagRequest | fenceFlagSyncNext, 0, NULL);
 
@@ -448,8 +448,15 @@ void CConn::fence(rdr::U32 flags, unsigned len, const char data[])
 
   if (len == 0) {
     // Initial probe
-    if (flags & fenceFlagSyncNext)
+    if (flags & fenceFlagSyncNext) {
       supportsSyncFence = true;
+
+      if (cp.supportsContinuousUpdates) {
+        vlog.info(_("Enabling continuous updates"));
+        continuousUpdates = true;
+        writer()->writeEnableContinuousUpdates(true, 0, 0, cp.width, cp.height);
+      }
+    }
   } else {
     // Pixel format change
     rdr::MemInStream memStream(data, len);
@@ -477,6 +484,9 @@ void CConn::resizeFramebuffer()
   if (!desktop)
     return;
 
+  if (continuousUpdates)
+    writer()->writeEnableContinuousUpdates(true, 0, 0, cp.width, cp.height);
+
   desktop->resizeFramebuffer(cp.width, cp.height);
 }
 
@@ -609,9 +619,11 @@ void CConn::requestNewUpdate()
 
   checkEncodings();
 
-  pendingUpdate = true;
-  writer()->writeFramebufferUpdateRequest(Rect(0, 0, cp.width, cp.height),
-                                          !forceNonincremental);
+  if (forceNonincremental || !continuousUpdates) {
+    pendingUpdate = true;
+    writer()->writeFramebufferUpdateRequest(Rect(0, 0, cp.width, cp.height),
+                                            !forceNonincremental);
+  }
  
   forceNonincremental = false;
 }
index 25d10e78ecc5181d1d6e5d89b6600e4b3a40ec0e..ea4edb55c7b539e6768ef0b1c1d001b2ed5449e5 100644 (file)
@@ -107,6 +107,7 @@ private:
 
   bool firstUpdate;
   bool pendingUpdate;
+  bool continuousUpdates;
 
   bool forceNonincremental;