]> source.dussan.org Git - tigervnc.git/commitdiff
Code cleanups in PollingManager.
authorConstantin Kaplinsky <const@tightvnc.com>
Wed, 1 Feb 2006 05:59:21 +0000 (05:59 +0000)
committerConstantin Kaplinsky <const@tightvnc.com>
Wed, 1 Feb 2006 05:59:21 +0000 (05:59 +0000)
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@475 3789f03b-4d11-0410-bbf8-ca57d06f2519

x0vncserver/PollingManager.cxx
x0vncserver/PollingManager.h

index 84a7435798d99e1672863109b34c0da4dd52a94b..c02e509254487cd9c20a722af0c29c9481b2611d 100644 (file)
@@ -127,27 +127,32 @@ void PollingManager::pollDebug()
 
 void PollingManager::poll()
 {
+  bool someChanges = false;
+
   switch((int)pollingType) {
   case 0:
-    poll_Dumb();
+    someChanges = poll_Dumb();
     break;
   case 1:
-    poll_Traditional();
+    someChanges = poll_Traditional();
     break;
   case 2:
-    poll_SkipCycles();
+    someChanges = poll_SkipCycles();
     break;
 //case 3:
   default:
-    poll_DetectVideo();
+    someChanges = poll_DetectVideo();
     break;
   }
+
+  if (someChanges)
+    m_server->tryUpdate();
 }
 
-void PollingManager::poll_DetectVideo()
+bool PollingManager::poll_DetectVideo()
 {
   if (!m_server)
-    return;
+    return false;
 
   const int GRAND_STEP_DIVISOR = 8;
   const int VIDEO_THRESHOLD_0 = 3;
@@ -209,14 +214,13 @@ void PollingManager::poll_DetectVideo()
     }
   }
 
-  if (nTilesChanged)
-    m_server->tryUpdate();
+  return (nTilesChanged != 0);
 }
 
-void PollingManager::poll_SkipCycles()
+bool PollingManager::poll_SkipCycles()
 {
   if (!m_server)
-    return;
+    return false;
 
   enum {
     NOT_CHANGED, CHANGED_ONCE, CHANGED_AGAIN
@@ -274,14 +278,13 @@ void PollingManager::poll_SkipCycles()
     }
   }
 
-  if (nTilesChanged)
-    m_server->tryUpdate();
+  return (nTilesChanged != 0);
 }
 
-void PollingManager::poll_Traditional()
+bool PollingManager::poll_Traditional()
 {
   if (!m_server)
-    return;
+    return false;
 
   int nTilesChanged = 0;
   int scanLine = m_pollingOrder[m_pollingStep++ % 32];
@@ -317,16 +320,23 @@ void PollingManager::poll_Traditional()
     }
   }
 
-  if (nTilesChanged)
-    m_server->tryUpdate();
+  return (nTilesChanged != 0);
 }
 
-void PollingManager::poll_Dumb()
+//
+// Simplest polling method, from the original x0vncserver of VNC4.
+//
+
+bool PollingManager::poll_Dumb()
 {
-  if (m_server) {
-    m_image->get(DefaultRootWindow(m_dpy));
-    Rect rect(0, 0, m_width, m_height);
-    m_server->add_changed(rect);
-    m_server->tryUpdate();
-  }
+  if (!m_server)
+    return false;
+
+  m_image->get(DefaultRootWindow(m_dpy));
+  Rect rect(0, 0, m_width, m_height);
+  m_server->add_changed(rect);
+
+  // As we have no idea if any pixels were changed,
+  // always report that some changes have been detected.
+  return true;
 }
index 59eb22e06cc3ab39203890a3e0d29374af1e2dd0..253c237f66bb16b4b9a4949b9d59568ef80f822d 100644 (file)
@@ -43,10 +43,14 @@ public:
 
 protected:
 
-  void poll_DetectVideo();
-  void poll_SkipCycles();
-  void poll_Traditional();
-  void poll_Dumb();
+  //
+  // Implementations of different polling algorithms.
+  // Return value of true reports that some changes were detected.
+  //
+  bool poll_DetectVideo();
+  bool poll_SkipCycles();
+  bool poll_Traditional();
+  bool poll_Dumb();
 
   Display *m_dpy;
   VNCServer *m_server;